框架总结之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上的主要内容,如果未能解决你的问题,请参考以下文章

Java后台处理框架之struts2学习总结

框架总结之Struts2上

Struts2之result中标准结果代码

struts2 之 Action的创建方式

struts2基础之配置详解

Struts2框架之类型转换 --Struts2框架