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. 数据库的DDL、DML和DCL的区别与理解

    DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...

  2. 利用背景流量数据(contexual flow data) 识别TLS加密恶意流量

    识别出加密流量中潜藏的安全威胁具有很大挑战,现已存在一些检测方法利用数据流的元数据来进行检测,包括包长度和到达间隔时间等.来自思科的研究人员扩展现有的检测方法提出一种新的思路(称之为“dataomni ...

  3. Python 一行命令ftp服务器

    Obligatory Twisted example: twistd -n ftp And probably useful: twistd ftp --help Usage: twistd [opti ...

  4. 使用crontab定时执行脚本时别忘了输出重定向>

    原文:https://blog.csdn.net/solmyr_biti/article/details/50683279 -------------------------------------- ...

  5. Linux中修改docker镜像源及安装docker

    1.首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.re ...

  6. 把握linux内核设计思想(十二):内存管理之slab分配器

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流.请勿用于商业用途] 上一节最后说到对于小内存区的请求,假设採用伙伴系统来进行分配,则会在页内产生非 ...

  7. C#连接数据库 增删改查

  8. PHP生成excel(3)

    这一节主要是设置背景颜色.边框.字体大小.表格宽度 效果图 代码如下 <?php header("Content-Type:text/html;charset=utf-8") ...

  9. CSS属性中Display与Visibility的不同

    大多数人很容易将CSS属性display和visibility混淆,它们看似没有什么不同,其实它们的差别却是很大的.visibility属性用来确定元素是显示还是隐藏,这用visibility=&qu ...

  10. HDOJ1004 数组还要自己初始化

    #include <iostream> #include <stdio.h> #include "string.h"using namespace std; ...