现在的位置: 首页 > 综合 > 正文

Struts 2简单介绍

2014年06月28日 ⁄ 综合 ⁄ 共 3699字 ⁄ 字号 评论关闭

一、struts2

    1.概述

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts
2的变化很小。

      2. 搭建Struts2开发环境

     (1)找到开发Struts2应用需要使用到的jar文件.

           
     (2)编写Struts2的配置文件

       Struts2默认的配置文件为struts.xml ,该文件需要存放在WEB-INF/classes下,该          文件的配置模版如下:
     <?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>
   </struts>
   注意:此文件在开发的时候是放到src目录下,程序编译后会自动拷贝到WEB-INF/classes目录下。
     (3)在web.xml中加入Struts2 MVC框架启动配置

在struts2中,struts框架是通过Filter启动的。他在web.xml中的配置如下:
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 <!-- 自从Struts 2.1.3以后,下面的FilterDispatcher已经标注为过时
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> --> 
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。

注意:struts2读取到struts.xml的内容后,以javabean形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件

        3.动态方法调用

       如果Action中存在多个方法时,可以使用!+方法名调用指定方法。

如果不想使用动态方法调用,可以通过常量struts.enable.DynamicMethodInvocation关闭动态方法调用。
      <constant name="struts.enable.DynamicMethodInvocation" value="false"/>

       4.Struts2中常用的结果类型

       dispatcher:主要用于返回JSP,HTML等以页面为基础View视图,这个也是Struts2默认的Result类型。在使用dispatcher时,唯一需要指定的,是JSP或者HTML页面的位置,这个位置将被用于定位返回的页面。

注意:用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。location只能是页面,不能是另一个action
       redirect:将用户重定向到一个已配置好的URL。
       redirectAction:将用户重定向到一个已定义好的action。
       chain 用于把相关的几个action连接起来,共同完成一个功能。

 二、案例

用户登录:

struts.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<package name="login" namespace="/login" extends="struts-default">//如果某个包没有指定namespace,则该包使用默认的命名空间,默认的命名空间总是""。struts-default定义了这些拦截器和Result类型。可以这么说:当包继承了struts-default才能使用struts2提供的核心功能。
		<action name="login" class="bean.LoginAction" method="execute">
			<result name="success">
				/index.jsp//如果返回success跳转
			</result>
			<result  name="error">/error.jsp</result>//如果出现错误跳转到错误界面
		</action>
	</package>//访问struts2中action的URL路径由两部份组成:包的命名空间+action的名称
</struts>


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Struts Blank</display-name>
<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>
<welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

LoginAction.java

package bean;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction  extends  ActionSupport{
   
	//private static final long serialVersionUID = 1L;
	private String name;
    private String pass;
    public  String execute()  throws  Exception{
    	if(this.getName().equals("scott")&&this.getPass().equals("tiger")){
    		ActionContext.getContext().getSession().put("user",this.getName());
    		return this.SUCCESS;
    	}
    	this.addActionMessage("用戶名或密码错误");
    	return this.ERROR;
    }
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}     
}



【上篇】
【下篇】

抱歉!评论已关闭.