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. IntelliJ IDEA 默认需要进行maven的设置

    IntelliJ IDEA 默认需要进行maven的设置 需要指定maven的地址,指定settings.xml的地址: 可以默认的在user/.m2/下面放一个settings.xml文件: 学习: ...

  2. WheelView实现省市区三级联动(数据库实现版本号附带完整SQL及数据)

    近期在实现收货地址功能,用到了省市区三级联动效果,网上找到一般都是xml或json.数据源陈旧改动麻烦.改动了一下使用数据库方式实现了一下 数据源解决.因为数据量比較大通过初始化批量运行SQL的方式不 ...

  3. LeetCode——Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  4. 我所见过的最简短、最灵活的javascript日期转字符串工具函数

    我们知道javascript的Date对象并没有提供日期格式化函数.将日期对象转换成"2015-7-02 20:35:11"等这样的格式又是项目中非经常常使用的需求.近期在我们项目 ...

  5. CPU Stepping

    http://baike.baidu.com/view/16839.htm?fr=ala0_1_1 步进 编辑   步进(Stepping)是CPU的一个重要参数,也叫分级鉴别产品数据转换规范,“步进 ...

  6. IconTabPageIndicator

    https://github.com/msdx/IconTabPageIndicator

  7. Redis 事务及其应用

    参考: http://www.runoob.com/redis/redis-transactions.html https://www.cnblogs.com/qlshine/p/5958504.ht ...

  8. 细谈SetButtonInfo函数及其用途

    SetButtonInfo用于设置某个按钮,它的接口定义如下: 下面是它的几个接口函数说明: void CToolBar::SetButtonInfo(int nIndex, UINT nID, UI ...

  9. Kubernetes实战阅读笔记--2、架构和部署

    安装Kubernetes “本书准备了4台虚拟机(CentOS 7.0系统)用于部署Kubernetes运行环境,包括一个Etcd.一个Kubernetes Master和三个Kubernetes N ...

  10. SequenceFileInputFormat区别TextInputFormat

    通过InputFormat,Hadoop可以: l           检查MapReduce输入数据的正确性: l           将输入数据切分为逻辑块InputSplit,这些块会分配给Ma ...