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. 使用datatables实现列宽设置、水平滚动条、显示某列部分内容

    示例 1.//使用 columnDefs 给列设置宽度 $('#example').DataTable( { "columnDefs": [ //给第一列指定宽度为表格整个宽度的2 ...

  2. linux shell操作

    ---------------------------------------------------- 原文:http://unix.stackexchange.com/questions/2863 ...

  3. iOS开发之UITabBarController和UICollectionView的使用

    这一篇要记录的是iOS开发中UITabBarController控件和UICollectionView控件的使用.APP跑起来之后的效果例如以下图: watermark/2/text/aHR0cDov ...

  4. 一种client同步server数据的方案

    场景 clientA不定时地把本地数据同步到server上,然后还有一个clientB(app)从server把数据同步下来,汇总展示 clientA数据结构 原始的数据(来自clientA).每条都 ...

  5. mongodb+php通过_id查询

    在php中通过_id 在mongodb中查找特定记录: <?php $conn=new Mongo("127.0.0.1:27017"); #连接指定端口远程主机 $db=$ ...

  6. JMeter 系列之—-02 创建数据库测试计划

    Jmeter创建数据库测试计划,包括如下步骤: 1. 添加数据库jar包 使用不同的数据库,要引入不同的jar包.主要有两种方式: 方式1:直接将jar包复制到jmeter的lib目录 方式2:通过测 ...

  7. Vim经常使用技巧总结2

    我的主力博客:半亩方塘 1. 在光标所在行查找字符在普通模式下用 f{char} 命令,光标会移动到该字符所在的位置.向下反复查找在普通模式下用 ;,向上回退查找用 , 2. 在光标所在行查找与替换在 ...

  8. notepad++的f90配置文件

    notepad++仅支持f77格式的,所以f90格式需要重新定义配置文件 传送门: http://ehc.ac/p/notepad-plus/discussion/331753/thread/8f72 ...

  9. Spark 学习笔记:(四)MLlib基础

    MLlib:Machine Learning Library.主要内容包括: 数据类型 统计工具 summary statistics correlations stratified sampling ...

  10. 中断线程Interrupt()

    以下是参考<<Java多线程模式>>的 1. sleep() & interrupt() 线程A正在使用sleep()暂停着: Thread.sleep(100000) ...