框架总结之Struts2上
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了框架总结之Struts2上相关的知识,希望对你有一定的参考价值。
一、Struts2的由来和介绍:
传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。
因此产生了Struts框架来解决这个问题。
什么是Struts框架:
Struts2框架中其实是把JSP+Servlet+Javabean这个简易版的Mvc模式进行了升级。
Struts 2框架由3个部分组成:StrutsPrepareAndExecuteFilter是核心控制器、业务控制器和用户实现的业务逻辑组件。
Struts的MVC框架解读:
M:负责封装应用的状态,并实现应用的功能。通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息、用户信息等;而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等。
V:说白点就是把M的数据展示到页面上给用户看。
C:表示控制层,在这个控制层中采用FilterDispatcher核心控制器来,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当 用户请求到达时,该Filter会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts 2框架处理。
在Web.xml中配置控制器FilterDispatcher即可使用
<filter>
<!-- 定义核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 定义核心Filter的实现类 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- StrutsPrepareAndExecuteFilter用来处理所有的HTTP请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Struts2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts2调用名为login的Action来处理该请求。
Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts2
框架提供了系列拦截器,该系列拦截器负责将 HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action的execute方法来处理用户请求。
二.Struts2的工作流程 (原文:http://www.cnblogs.com/jy02444453/archive/2011/08/27/2155427.html)
一个请求在Struts2框架中的处理大概分为以下几个步骤
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。
三.Hello,Struts2
Struts开发步骤:
1. web项目,引入struts - jar包
2. web.xml中,引入struts的核心功能
配置过滤器
3. 开发action
4. 配置action
src/struts.xml
1. web项目struts2,引入struts2的jar包
包名 | 作用 |
commons-fileupload-x.y.z.jar | 核心包:Struts的上传和下载 |
commons-io-x.y.z.jar | |
commons-lang-x.y.jar | 核心包:为java.lang包提供扩展 |
commons-logging-x.y.z.jar | 核心包:Jakarta的通用日志记录包 |
commons-logging-api-x.y.jar | 辅助包:Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。 |
freemarker-x.y.z.jar | 核心包:FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具 |
javassist-.xy.z.GA | |
ognl-x.y.z.jar | 核心包:支持ognl表达式 |
struts2-core-x.y.z.jar | 核心包:struts的核心包 |
xwork-core.x.y.z.jar | 核心包:xwork核心包 |
2. web.xml中,引入struts的核心功能
配置过滤器
<filter> <!-- 定义核心Filter的名字 --> <filter-name>struts2</filter-name> <!-- 定义核心Filter的实现类 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- StrutsPrepareAndExecuteFilter用来处理所有的HTTP请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3. 开发action
package huangrenchao.hellostruts2; public class HelloStruts2Action { private String name; public String hello(){ System.out.println("hello,struts"); name = "黄仁超"; return "success"; } }
4. 在struts中配置action
<?xml version="1.0" encoding="GBK" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 配置了一个包元素 --> <package name="lee" extends="struts-default"> <!-- 配置处理文件上传的Action --> <action name="hello" class="huangrenchao.hellostruts2.HelloStruts2Action" method="hello"> <result name="success" >/success.jsp</result> </action> </package> </struts>
5.写一个success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> hello.struts </body> </html>
6.发布项目到tomcat中,然后在浏览器中运行
以上是关于框架总结之Struts2上的主要内容,如果未能解决你的问题,请参考以下文章