Struts2的相关知识(一)

Struts2 是什么?

是一个扩展的用来建立企业级JAVA WEB应用程序的框架,不但注重程序的开发程序,更注重部署和后期维护.
Struts2 使用OGNL可以访问值栈,OGNL对集合和索引属性的支持非常强大

Struts2核心控制器

在Struts2中,核心控制器是Filter,而不是一个不同的servlet,为了实现AOP概念

Struts框架的组成:

核心控制器FilterDispatcher(Struts2系统给的),业务控制器和用户事项的业务逻辑组件(用户自己提供)
 Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts 2调用名为login的Action来处理该请求。
  Struts 2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action时,定义了该Action的name属性和 class属性,其中name属性决定了该Action处理哪个用户请求,而class属性决定了该Action的实现类。

数据流程图(执行流程)

    HTTP请求----->核心控制器(web.xml)---Struts.xml---->Action--->IOC方法注值---->Action调用业务逻辑处理业务逻辑(3层)--->JSP()返回result)--->HTTP响应到客户端
  • 1、客户端浏览器发出HTTP请求。
  • 2、根据web.xml配置,该请求被FilterDispatcher接收。
  • 3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
  • 4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
  • 5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
  • 6、返回HTTP响应到客户端浏览器。

为什么要用Struts2框架?

Struts2是基于MVC的轻量级的web应用框架

Struts配置文件优先级
Web.xml > struts.properties >struts.xml

Method的用处?为什么要使用Method?

可以在配置文件中配置Action的时候用method=来指定执行哪个方法
也可以在url地址中动态指定(动态方法调用DMI)(推荐)

Struts2 type属性(转发和重定向的区别)

详请:转发: 转发是服务器行为(浏览器上的网址不变)
客户浏览器发送http请求——>web服务器接受此请求——>调用内部的一个方法在容器内部完成请求处理和转发动作——>将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向:客户端行为(浏览器上的网址改变)
客户浏览器发送http请求——>web服务器接受后发送302状态码响应及对应新的location给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——>服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
正文
重定向其实是两次request
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
请求转发
是服务器内部把对一个request/response的处理权,移交给另外一个对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。
转发到action用chain
重定向到action用redirectAction
重定向:
  发送请求 –>服务器运行–>响应请求,返回给浏览器一个新的地址与响应码–>浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址–>服务器运行–>响应请求给浏览器
转发:
  发送请求 –>服务器运行–>进行请求的重新设置,例如通过request.setAttribute(name,value)–>根据转发的地址,获取该地址的网页–>响应请求给浏览器

在Struts2 中获取请求参数

1.属性驱动

(1)方式一:直接将action做一个model,就可以得到请求参数.

问题1:action封装请求参数,会不会存在线程安全问题?
不会:因为每一次请求,都是一个新的action。
缺点:需要单独定义javaBean,将action中属性copy到javaBean中。
优点:简单。
这种方式 ,底层是通过反射来实现的。

(2)方式二:在action中声明一个model。

private User user;提供get/set方法
在页面上使用ognl来描述
优点:简单,解决了第一种封装的问题
缺点:在页面上使用了ognl表达式,页面不通用了。

问题:这种方式,数据是怎样封装的?
是通过struts2中的interceptor进行了数据封装.

2.方式三:模型驱动(在开发中应用比较多)

步骤:
1.让action类实现ModelDriven
2.重写getModel方法
3.在action中实例化一个model对象,让getModel方法返回这个对象。
优点:解决了属性驱动存在的问题
缺点:一次只能封装一个model对象.

Struts2 的Action中取得请求参数值的几种方法

方法一

:当把参数作为Action的类属性,且提供属性的getter/setter方法时,xwork的OGNL会自动把request参数的值设置到类属性中,此时访问请求参数只需要访问类属性即可。

方法二

:可以通过ActionContext对象Map parameterMap=context.getParameters();方法,得到请求参数Map,然后通过parameterMap来获取请求参数。需要注意的是:当通过parameterMap的键取得参数值时,取得是一个数组对象,即同名参数的值的集合。

方法三

:通过ActionContext取得HttpServletRequest对象,然后使用request.getParameter(“参数名”)得到参数值。
Struts2数据校验
1>编程式校验
2>声明式校验(编程常用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值