struct 2(一) 之基本原理

 

一、基本原理

1. 问题 

如果是前端的静态HTML,处理网页设计的美术人员可以独立设计

如果是后端的类,程序设计人员可以独立设计而结合HTML与Java代码的JSP,处理网页设计的美术人员与程序设计人员,必须被彼此加入至视图组件中的逻辑互相干扰,开发一个JSP页面,需要双方不断交流才能够完成,开发人员的学习负担重,他们必须一人了解多个角色的工作以及相关技术。

2. 解决

Struts它试图在不同的角度上提供网页设计人员、应用程序设计人员、架构设计人员解决方案,让不同技术的人员可以彼此合作又不互相干扰。从架构设计人员的角度来看,他只需要做出一些配置与定义,定义后端bean与前端页面的关系。从网页设计人员的角度来看,Struts提供了一套像是新版本的HTML标签,但它不是静态的,而是动态的,可以与后端的动态程序结合,但网页设计人员不需要理会后端的动态部份。从应用程序设计人员的角度来看,他只需要按架构师设计人员的定义,完成后端bean的实现即可。

3. 总的来说,struct就是为了解决前台设计人员与应用程序设计人员的各自工作的解耦,尽量让另一方的工作不影响到另一方工作。

二、使用

1. 添加jar包


注:struct-spring-plugin.jar这个包是负责struct与spring进行交互,这个包是spring提供的,spring提供的这个jar包是有严谨的版本要求,spring决定是哪一个版本的struct

2,配置web.xml: 配置struts引擎

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

3,添加struts.xml到src根目录

 

<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">
 
 <struts>
<package  name="demo_struts2" extends="struts-default">
 	<action name="UserLogin" class="demo.mystruct.UserAction">
			<!-- 定义处理结果和资源之间映射关系。 -->
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
			<result name="input">/index.jsp</result>
	</action>
 	</package>
 </struts>

所定义的action都是在package标签里面,例如:

在struts.xml中定义一个action

 

<action name="UserLogin" class="demo.mystruct.UserAction">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="input">/index.jsp</result>
</action>
 

4.按struts.xml中的action定义撰写一个简单的Action类,demo.mystruct.UserAction定义两个用户输入的属性(也就是页面会传过来的参数,注意页面的name要和该类对应的属性要一致),提供getter/setter定义处理用户请求的execute方法。运行的流程是:页面使用到action--->通过web.xml的struct引擎进行过滤---->找到struct.xml,查询对应的action所对应的定义处理----->找到对应的类,执行execute方法,根据execute方法返回的内容进行跳转那个页面(跳转页面是由action定义的)。

处理类execute方法的写法

 

public String execute() throws Exception {
// 当用户请求参数的username等于admin,密码请求参数为12345时,返回success字符串
// 否则返回error字符串
f ("11".equals(getName()) && "22".equals(getPass())) {
           ActionContext.getContext().getSession().put("userinfo", getName());
          System.out.println(this.SUCCESS);
          return this.SUCCESS;
} else if(getName() == null || getName().trim().equals("")||getPass() ==             null || getPass().trim().equals("")){
          return this.INPUT;
} else
          return this.ERROR;	 
}
 5. 总结:

Struts2的工作机制:

一个请求在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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值