Struts2:本质servlet
1、接受页面参数

        a、使用原生的ServletAPI接受(不推荐)
request.getParameter(name)
获取元素request方式:
--HttpServletRequest request = ServletActionContext.getRequest(); 每个方法中都要获取
--通过实现接口:完成原生servlet对象的注入
public class BaseAction implements ServletRequestAware,ServletContextAware,ServletResponseAware{
protected HttpServletRequest request;
protected HttpSession session = request.getSession();
protected ServletContext appliaction;
protected HttpServletResponse response;
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
} @Override
public void setServletContext(ServletContext application) {
this.appliaction = application;
} @Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
} b、在action类中提供私有Model对象(setter和getter方法),在jsp页面保证参数名称为:引用.属性
//接受页面参数
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
jsp:
username:<input type="text" name="user.username"/><br>
password:<input type="text" name="user.passwrod"/><br>
birthday:<input type="text" name="user.birthday"/><br>
salary:<input type="text" name="user.salary"/><br> 好处:直接将属性封装到对象中,自动类型转换(date--yyyy-MM-dd)
弊端:在jsp页面修改name属性名有可能会冲突($(input[name='username']);)
c、实现ModelDriven接口,重写getModel方法(推荐)
public class UserAction implements ModelDriven<User>{
private User user = new User();
@Override
public User getModel() {
return user;
}
}

2、调用业务逻辑(如何携带参数到目标)

第一种:
request.setAttribute(name,value)
request.getSession().setAttribute(name,value)
application.setAttribute(name,value) 第二种:
ActionContext.getContext().put(name,value):
ActionContext.getContext().getSession().put(name,value)
ActionContext.getContext().getApplicaton.put(name,value)

3、负责页面跳转

    根据方法返回值结合配置页面的跳转:
<result>:默认type="dispatcher" 转发页面
<result>:type="redirect" 重定向页面
<result>:type="redirectAction" 重定向到action <package name="user" namespace="/user" extends="struts-default">
<!-- http://localhost:8080/项目名/user/reg.action -->
<action name="reg" class="com.bdyc.action.UserAction" method="reg">
<!-- 如果该方法的返回值是:regSuccess,就将地址转发到regSuccess.jsp -->
<result name="regSuccess">/regSuccess.jsp</result> <!-- 重定向到regError.jsp -->
<result name="regFail" type="redirect">/regError.jsp</result>
</action>
</package>

完成用户的CRUD+DBUtils

Struts2基本使用的更多相关文章

  1. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  2. 菜鸟学Struts2——Interceptors

    昨天学习Struts2的Convention plugin,今天利用Convention plugin进行Interceptor学习,虽然是使用Convention plugin进行零配置开发,这只是 ...

  3. 菜鸟学Struts2——零配置(Convention )

    又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...

  4. 菜鸟学Struts2——Results

    在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...

  5. 菜鸟学Struts2——Actions

    在对Struts2的工作原理学习之后,对Struts2的Action进行学习.主要对Struts2文档Guides中的Action分支进行学习,如下图: 1.Model Driven(模型驱动) St ...

  6. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  7. 13、零配置Struts2开发

    Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...

  8. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  9. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  10. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

随机推荐

  1. Go -- go语言指针

    package main import "fmt" type Test struct { Name string } func change2(t *Test) { t.Name ...

  2. PHP中extract()函数的妙用

    看cakephp 2.3.8的源代码,很多地方都用 到 compact('name', 'response'); extract($status, EXTR_OVERWRITE); 这样的代码.com ...

  3. HDU 4857 topological_sort

    逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  4. TCP 的那些事儿(下)(转)

    TCP的RTT算法 从前面的TCP的重传机制我们知道Timeout的设置对于重传非常重要, 设长了,重发就慢,没有效率,性能差: 设短了,重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多 ...

  5. LOCAL_CFLAGS参数说明

    1.-Wall 是打开警告开关 2.-O 代表默认优化,可选:-O0不优化,-O1低级优化,-O2中级优化,-O3高级优化,-Os代码空间优化 3.-g 是生成调试信息,生成的可执行文件具有和源代码关 ...

  6. 网络请求--Retrofit2用法

    欢迎Follow我的GitHub, 关注我的CSDN. Retrofit是Square开发的网络请求库, 简化了网络请求的使用, 这个库太知名了, 优点我就不多说了. 让我们看看怎样使用吧? 注意: ...

  7. POJ 1151 HDU 1542 Atlantis(扫描线)

    题目大意就是:去一个地方探险,然后给你一些地图描写叙述这个地方,每一个描写叙述是一个矩形的右下角和左上角.地图有些地方是重叠的.所以让你求出被描写叙述的地方的总面积. 扫描线的第一道题,想了又想,啸爷 ...

  8. 我对hibernate和mybatis框架的比較

    系统在选择操作数据库的框架上面,究竟是选择hibernate,还是mybatis. 首先说下两者的原理,假设你要关联几张表做查询,查出20条记录: 1.假设是mybatis SELECT *   FR ...

  9. 面向对象五大原则_1.单一职责原则&amp;2.里氏替换原则

    单一职责原则:Single Responsibility Principle (SRP) 一个类.仅仅有一个引起它变化的原因.应该仅仅有一个职责.每个职责都是变化的一个轴线.假设一个类有一个以上的职责 ...

  10. 不能实现RadioButton默认选择

    当用RadioButton时,希望在程序运行的时候默认一个选项: CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1); //CheckRadioBut ...