Struts2篇
一、Struts2应用开发的步骤:
1.导入相关jar包。
将Struts2的lib文件夹下的
commons-fileupload.jar,commons-io.jar,freemarker.jar,
javassist.jar,ognl.jar,struts-core.jar,xwork-core.jar
复制到Web应用的WEB-INF/lib路径下。如果需要在Web应用中使用Struts2的更多特性,则需要将相应的JAR文件复制到Web应用的WEB-INF/lib路径下。
2.在web.xml文件中定义核心Filter来拦截用户请求。
由于Web应用是基于请求/响应架构的应用,所以不管哪个
MVC Web框架,都需要在web.xml中配置核心Filter或Servlet,这样才可以让该框架介入Web应用中。定义Struts2的核心Filter
< filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
让Struts2的核心Filter拦截所有请求
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.如果需要以POST方式提交请求,则定义包含表单数据的JSP页面。如果仅仅只是以GET方式发送请求,则无须经过这一步。
4.定义处理用户请求的Action类。
这一步也是所有MVC框架中必不可少的,因为这个Action就是MVC中的C,也就是控制器。该控制器负责调用Model里的方法来处理请求。
在MVC框架中,控制器实际上由2个部分共同组成,即拦截所有用户请求,处理请求的通用代码都由核心控制器完成,而实际的业务控制(诸如调用Model,返回处理结果等)则由Action处理。
5.配置Action。
对于Java领域的绝大部分MVC框架而言,都非常喜欢使用XML来配置管理。配置Action就是指定哪个请求对应用哪个Action进行处理,从而让核心控制器根据配置来创建合适的Action实例,并调用该Action的业务控制方法。
6.配置处理结果和物理视图资源之间的对应关系。
当Action处理用户请求结束后,通常会返回一个处理结果(通常使用简单的字符串就可以了),我们可以认为该名称是逻辑视图名,这个逻辑视图名和指定物理视图资源关联才有价值。所以,我们还需要配置处理结果之间的对应关系。
7.编写视图资源。
如果Action需要把一些数据传给视图资源,则可以借助OGNL表达式。
二、Struts2 拦截器和过滤器的区别:
①过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器。
②Struts2 拦截器只能对 Action 请求起作用,而过滤器则可以对几乎所有请求起作用。
③拦截器可以访问 Action 上下文(ActionContext)、值栈里的对象(ValueStack),而过滤器不能.
④在 Action 的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
三、Action创建的俩中方法
action是一次请求,对于URL来说的。Action是一个类,可以对应多个action。
创建Action的方法。遵守普通javaBean的规范。
第一种是继承ActionSupport类(优点就是可以使Action方便的进行数据校验,国际化等工作)
第二种就是实现.xwork2.Action接口
四、Struts2 如何访问 HttpServletRequest、HttpSession、ServletContext 三个域对象 ?
①与 Servlet API 解耦的访问方式
> 通过 ActionContext 访问域对象对应的 Map 对象
要获取这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类。
> 通过实现 Aware 接口使 Struts2 注入对应的 Map 对象
②与 Servlet API 耦合的访问方式
> 通过 ServletActionContext 直接获取 Servlet API 对象
> 通过实现 ServletXxxAware 接口的方式使 Struts2 注入对应的对象
五、 Struts2 中的默认包 struts-default 有什么作用?
①struts-default 包是 struts2 内置的,它定义了 struts2 内部的众多拦截器和 Result 类型,而 Struts2 很多核心的功能都是通过这些内置的拦截器实现,如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了struts-default包才能使用struts2为我们提供的这些功能。
②struts-default 包是在 struts-default.xml 中定义,struts-default.xml 也是 Struts2 默认配置文件。Struts2 每次都会自动加载 struts-default.xml文件。
③通常每个包都应该继承 struts-default 包。
六、ActionContext、ServletContext、pageContext的区别 ?
①ActionContext Struts2 的 API:是当前的 Action 的上下文环境
ActionContext 是当前 Action 执行时的上下文环境, ActionContext 中维护了一些与当前 Action 相关的对象的引用,如: Parameters (参数), Session (会话), ValueStack (值栈), Locale (本地化信息) 等。另外, 由于 Struts2 的 Action 是每一次用户请求都产生一个新的实例, 因此, ActionContext 不存在线程安全问题, 可以放心使用。
②ServletContext 和 PageContext 是 Servlet 的 API
一个WEB运用程序只有一个 ServletContext 实例, 它是在容器(包括 JBoss, Tomcat 等)完全启动 WEB 项目之前被创建, 生命周期伴随整个 WEB 运用。
当在编写一个 Servlet 类的时候, 首先是要去继承一个抽象类 HttpServlet, 然后可以直接通过 getServletContext() 方法来获得 ServletContext 对象。这是因为 HttpServlet 类中实现了 ServletConfig 接口, 而 ServletConfig 接口中维护了一个 ServletContext 的对象的引用。利用 ServletContext 能够获得 WEB 运用的配置信息, 实现在多个 Servlet 之间共享数据等。

浙公网安备 33010602011771号