技术分析之在Struts2框架中使用Servlet的API

1. 在Action类中也可以获取到Servlet一些常用的API

需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上。

提供JSP注册的页面,演示下面这三种方式

注册页面

姓名:

密码:

2. 完全解耦合的方式

如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API

一些常用的方法如下

static ActionContext getContext()                                                      -- 获取ActionContext对象实例

java.util.Map getParameters()          -- 获取请求参数,相当于request.getParameterMap();

java.util.Map getSession()               -- 获取的代表session域的Map集合,就相当于操作session域。

java.util.Map getApplication()           -- 获取代表application域的Map集合

void put(java.lang.String key, java.lang.Object value)                           -- 注意:向request域中存入值。

3. 使用原生Servlet的API的方式(常用到)

Struts2框架提供了一个类,ServletActionContext,该类中提供了一些静态的方法

具体的方法如下

getPageContext()

getRequest()

getResponse()

getServletContext()

技术分析之结果页面的跳转

1. 结果页面存在两种方式

全局结果页面

> 条件:如果包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果页面。

> 全局结果页面针对的当前的包中的所有的Action,但是如果局部还有结果页面,会优先局部的。使用的标签是

/demo3/suc.jsp

局部结果页面

/demo3/suc.jsp

2. 结果页面的类型

结果页面使用标签进行配置,包含两个属性

> name    -- 逻辑视图的名称

> type    -- 跳转的类型,值一些,需要掌握一些常用的类型。常见的结果类型去struts-default.xml中查找。

dispatcher        -- 转发.type的默认值.Action--->JSP

redirect            -- 重定向.    Action--->JSP

chain                -- 多个action之间跳转.从一个Action转发到另一个Action.    Action---Action

redirectAction    -- 多个action之间跳转.从一个Action重定向到另一个Action.    Action---Action

stream            -- 文件下载时候使用的

技术分析之Struts2框架的数据封装

1. 为什么要使用数据的封装呢?

作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中

封装数据为开发提供了很多方便

Struts2框架提供了很强大的数据封装的功能,不再需要使用Servlet的API完成手动封装了!!

2. Struts2中提供了两类数据封装的方式?

第一种方式:属性驱动

> 提供对应属性的set方法进行数据的封装。

表单的哪些属性需要封装数据,那么在对应的Action类中提供该属性的set方法即可。

表单中的数据提交,最终找到Action类中的setXxx的方法,最后赋值给全局变量。

注意0:Struts2的框架采用的拦截器完成数据的封装。

注意1:这种方式不是特别好:因为属性特别多,提供特别多的set方法,而且还需要手动将数据存入到对象中.

注意2:这种情况下,Action类就相当于一个JavaBean,就没有体现出MVC的思想,Action类又封装数据,又接收请求处理,耦合性较高。

> 在页面上,使用OGNL表达式进行数据封装。

在页面中使用OGNL表达式进行数据的封装,就可以直接把属性封装到某一个JavaBean的对象中。

在页面中定义一个JavaBean,并且提供set方法:例如:private User user;

页面中的编写发生了变化,需要使用OGNL的方式,表单中的写法:

注意:只提供一个set方法还不够,必须还需要提供user属性的get和set方法!!!

> 先调用get方法,判断一下是否有user对象的实例对象,如果没有,调用set方法把拦截器创建的对象注入进来,

/**

属性驱动方式,把数据封装到JavaBean的对象中

@author Administrator

*/

public class Regist2Action extends ActionSupport{

private static final long serialVersionUID = 6556880331550390473L;

// 注意二:属性驱动的方式,现在,要提供是get和set方法

private User user;

public User getUser() {

System.out.println("getUser...");

return user;

}

public void setUser(User user) {

System.out.println("setUser...");

this.user = user;

}

public String execute() throws Exception {

System.out.println(user);

return NONE;

}

}

第二种方式:模型驱动

> 使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别!

> 编写的页面不需要任何变化,正常编写name属性的值

> 模型驱动的编写步骤:

手动实例化JavaBean,即:private User user = new User();

必须实现ModelDriven接口,实现getModel()的方法,在getModel()方法中返回user即可!!

/**

模型驱动的方式

实现ModelDriven接口

必须要手动实例化对象(需要自己new好)

@author Administrator

*/

public class Regist3Action extends ActionSupport implements ModelDriven{

private static final long serialVersionUID = 6556880331550390473L;

// 必须要手动实例化

private User user = new User();

// 获取模型对象

public User getModel() {

return user;

}

public String execute() throws Exception {

System.out.println(user);

return NONE;

}

}

技术分析之Struts2把数据封装到集合中

1. 封装复杂类型的参数(集合类型 Collection 、Map接口等)

2. 需求:页面中有可能想批量添加一些数据,那么现在就可以使用上述的技术了。把数据封装到集合中

3. 把数据封装到Collection中

因为Collection接口都会有下标值,所有页面的写法会有一些区别,注意:

在Action中的写法,需要提供products的集合,并且提供get和set方法。

4. 把数据封装到Map中

Map集合是键值对的形式,页面的写法

Action中提供map集合,并且提供get和set方法

代码:

/**

属性驱动的方式,把数据封装到map集合中

@author Administrator

*/

public class Regist5Action extends ActionSupport{

private static final long serialVersionUID = 6556880331550390473L;

private Map map;

public Map getMap() {

return map;

}

public void setMap(Map map) {

this.map = map;

}

public String execute() throws Exception {

System.out.println(map);

return NONE;

}

}

案例总结之Struts2的拦截器技术

1. 拦截器的概述

拦截器就是AOP(Aspect-Oriented Programming)的一种实现。(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。)

过滤器:过滤从客服端发送到服务器端请求的

拦截器:拦截对目标Action中的某些方法进行拦截

拦截器不能拦截JSP

拦截到Action中某些方法

2. 拦截器和过滤器的区别

1)拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的

2)过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器

3)拦截器只能对Action请求起作用(Action中的方法),而过滤器可以对几乎所有的请求起作用(CSS JSP JS)

拦截器 采用 责任链 模式

> 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链

> 责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行

在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )

3. Struts2的核心是拦截器,看一下Struts2的运行流程

自定义拦截器和配置

1. 编写拦截器,需要实现Interceptor接口,实现接口中的三个方法

protected String doIntercept(ActionInvocation invocation) throws Exception {

// 获取session对象

User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");

if(user == null){

// 说明,没有登录,后面就不会执行了

return "login";

}

return invocation.invoke();

}

2. 需要在struts.xml中进行拦截器的配置,配置一共有两种方式

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java参数action_Struts2之Action接收请求参数和拦截器详解相关推荐

  1. Struts2的第二天(Action接收请求参数)

    Struts2的第二天 Struts2的第二天的内容 1. Struts2框架中的Servlet的API的使用 2. Struts2中Action接收请求参数 3. Struts2中自定义拦截器 案例 ...

  2. Struts2之Action接收请求参数和拦截器

    技术分析之在Struts2框架中使用Servlet的API          1. 在Action类中也可以获取到Servlet一些常用的API         * 需求:提供JSP的表单页面的数据, ...

  3. Flutter 网络请求 Dio 拦截器详解

    老王的烦恼 昔日的小王凭借这他的小心谨慎和借助漂亮能干的女友 Dio 的辅助,终于干下了一番事业,成为中华大地响当当的人物,小王也变成老王.如今,老王已经年近花甲,看似迈上了人生巅峰,却也遇到了人生的 ...

  4. springmvc接收请求参数(springmvc教程二)

    目录 工程代码 普通接收请求参数 pojo接收请求参数 @RequestParam接收请求参数 restful风格 URL接收请求参数 json接收请求参数 Array数据接收请求参数 接收请求参数序 ...

  5. java控制器接收请求参数_SpringMVC之接收请求参数和页面传参

    Spring接收请求参数 1,使用HttpServletRequest获取 Java代码 @RequestMapping("/login.do") public String lo ...

  6. java 页面接收参数_详解SpringMVC——接收请求参数和页面传参

    spring接收请求参数: 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...

  7. Spring MVC 接收请求参数所有方式总结!

    来源:简书,作者:zhrowable 链接:https://www.jianshu.com/p/5f6abd08ee08 SpringMVC请求参数接收 其实一般的表单或者JSON数据的请求都是相对简 ...

  8. SpringMVC框架 学习DAY_02 : 接收请求参数/向模板页面转发数据/重定向与转发 /Session

    1. 接收客户端提交的请求参数 1.1. 使用HttpServletRequest接收请求参数 在处理请求的方法的参数列表中,添加HttpServletRequest类型的参数,在处理请求的过程中,调 ...

  9. springMVC接收请求参数的几种方式

    1.  用注解@RequestParam绑定请求参数 用注解@RequestParam绑定请求参数a到变量a,当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,例如: ...

最新文章

  1. 活动目录(Active Directory)域故障解决实例
  2. 常用几种数据库连接字符串
  3. [简单题]自定义取余(三种解法)C++实现
  4. Boost:bind绑定的回归测试
  5. 什么是CRM Sales category
  6. Mysql导入大容量SQL文件数据问题
  7. linux查看有哪些用户连接到本机
  8. 解决安装并配置好 hb后,hb -h检测不对
  9. jQuery对象与dom对象相互转换
  10. 对String值不可变的理解以及String类型的引用传递问题
  11. matlab学习技巧之semilogx和semilogy函数
  12. 23个无本空手套白狼的赚钱方法!颠…
  13. 班主任直接把奖学金名额给了我?就因为我用Python给她写了一个自动阅卷脚本
  14. win7系统盘瘦身四大招:
  15. 智慧农业智能节水灌溉 机井灌溉控制器
  16. Maven第6篇:生命周期 插件
  17. Golang IDE总汇
  18. ShaderJoy —— 烟花爆炸特效【GLSL】
  19. 灰色关联分析过程及代码实现
  20. 马托石头问题-java(大马中马小马托石头)

热门文章

  1. 推动绿色节能, APC再度“转动”地球日
  2. html去除默认格式化,HTML 格式化等处理方法
  3. 百万级数据实现PDO入库
  4. 过年回家,你是否也努力的给别人解释软件开发是干啥滴?
  5. 用游戏设计的方式教小朋友学习珠心算
  6. [CTO札记]《与空姐同居的日子》改编成的电影《恋爱前规则》上映
  7. bigbang0106
  8. C# ------ MEF
  9. 微信开发与代码的编写(二)
  10. Linux命令:grep命令 | egrep命令