【SSH】Struts2

struts2简单介绍

    struts2是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它继承了struts1和webwork2的优点,同时做了相当的改进。

    首先,去Struts官网(http://struts.apache.org),下载需要的版本,小编下载的是struts-2.3.28.1-all.zip。

    解压struts-2.3.28.1-all.zip之后,我们来看一下里面的内容:

     创建一个Web Project项目,并导入一些基本jar包:


commons-fileupload:处理文件上传组件

commons-io:fileupload上传使用

commons-logging:ASF出品的日志包

ognl:Object-Graph Navigation Language,对象图导航语言,struts2框架通过其读写对象的属性

struts2-core:struts2核心ja类库

xwork-core:XWork类库,struts2在其上构建

freemarker:struts2的UI标签的模板使用Freemarker编写

Struts2实例:

   web.xml:配置过滤器StrutsPrepareAndExecuteFilter

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><?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>
</span></span>

   Action类继承ActionSupport,写界面实体和返回参数。默认执行execute()方法,返回相应的字符串,Struts.xml根据返回的字符串跳转至相应页面。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">public class LoginAction extends ActionSupport
{
	private String username;
	
	private String password;
	
	private int age;
	
	private Date date;
	
	public int getAge()
	{
		return age;
	}
	
	public Date getDate()
	{
		return date;
	}
	
	public void setDate(
			Date date)
	{
		this.date = date;
	}
	
	public void setAge(
			int age)
	{
		this.age = age;
	}
	
	public String getUsername()
	{
		return username;
	}
	
	public void setUsername(
			String username)
	{
		this.username = username;
	}
	
	public String getPassword()
	{
		return password;
	}
	
	public void setPassword(
			String password)
	{
		this.password = password;
	}
	
	
	public String execute(){
		return SUCCESS;
	}
}
</span></span>

   Struts.xml:放在src下,配置action对应的转向页面。将其放在src下,部署的时候,会自动发布到WEB-INF/classes目录下,也可以直接创建在WEB-INF/classes目录下。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><?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可以包含多个action,一个Struts可以包含多个package  -->
	<!--package起到分类的作用,支持继承  -->
	<package name="struts2" extends="struts-default">
		<action name="login" class="com.jmj.struts2.LoginAction">
			<result name="success">/login_success.jsp</result>
			<result name="input">/login.jsp</result>
		</action>
	</package>
</struts>
</span></span>

   Struts.xml继承了struts2的struts-default.xml中的内容。

JSP

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><!--action名称和struts.xml中的action的name一样  -->
	<form action="login">
		用户名:<input type="text" name="username"><br>
		密码:<input type="password" name="password"><br>
		年龄:<input type="text" name="age"><br>
		日期:<input type="text" name="date"><br>
		<input type="submit" value="登陆"> 
	</form></span></span>

显示页面

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	<!--使用ognl获取信息  -->
	用户名:<s:property value="username"/><br>
	密码:<s:property value="password"/><br>
	年龄:<s:property value="age"/><br>
	日期:<s:property value="date"/><br>
</body>
</html></span></span></span>

Struts2的优点:

1、良好的架构和设计

2、可重用、模块化、扩展性好

3、Open source

自定义拦截器

   自定义拦截器必须实现interceptor接口,并覆盖init()、destroy()、intercept()方法。AbstractInterceptor实现了interceptor接口,也可以直接让拦截器类继承此抽象类。继承此类后,可以不用覆盖init()、destroy()方法,只需要覆盖intercept()方法即可。

   自定义拦截器类完成后,需要在struts.xml中配置:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><packagename="struts2" extends="struts-default">

       <interceptors>

               <interceptorname="theInterceptor1" class="com.jmj.interceptor.TheInterceptor1">           <!—自定义拦截器的名称和全路径-->

                      <paramname="test">shengsiyuan</param>   <!—拦截器传递的参数,如果没有参数,可以不写这段代码  -->

               </interceptor>

     </interceptors>

<!--在action中引用拦截器-->

       <action name=”login” class=”com.jmj.struts.LoginAction”>

              <interceptor-ref name=” theInterceptor1”/>

       </action>

</package></span></span>

   如果struts.xml中配置了自定义拦截器,则默认的拦截器将会失效,若还想使用默认拦截器,则可以加上<interceptor-ref name=”defaultStack”/>,且必须要将自定义拦截器放在默认拦截器前面。

   Struts.xml中还可以配置拦截器栈,拦截器栈可以引用多个拦截器,也可以引用其他拦截器栈。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><interceptor-stack name=”myInterceptorStack”>

       <interceptor-refname=” theInterceptor1”/>

      <interceptor-ref name=”defaultStack”/>

</ interceptor-stack></span></span>

   Action中引用拦截器栈和引用拦截器是一样的。

   还有一种拦截器---方法拦截器,需要继承MethodFilterInterceptor抽象类,此拦截器根据方法名进行拦截,需要覆盖doIntercept(ActionInvocation invocation)方法。

   Struts.xml中配置需要拦截的方法和不拦截的方法:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><interceptor-refname=”theInterceptor3”>

       <param name=”includeMethods”>execute</param>

       <param name=”excludeMethods”>myExecute</param>

</interceptor-ref></span></span>

    注:在方法过滤拦截器中,如果既没有指定includeMethods参数,也没有指定excludeMethods参数,则所有的方法都会被拦截;如果仅仅指定了includeMethods参数,则只会拦截includeMethods中的方法,没有包含在includeMethods中的方法就不会被拦截。

注解(Annotation)

   Struts2若想使用注解,需要引入struts2-convention-plugin-2.2.1.1.jar。

   注解配置在相应的Action类中:

@ParentPackage("struts-default")       //指定父包

@Action(value="login",results={@Result(name="success",location="/result.jsp"),@Result(name="input",location="/error.jsp")}) //配置action,如果想要指定多个result,需要使用“{}“括起来,result之间用逗号分隔。

@InterceptorRef("defaultStack")   //使用拦截器

@ InterceptorRefs({@InterceptorRef("theInterceptor1"), @InterceptorRef("defaultStack")})           //多个拦截器使用”{}”括起来,拦截器之前用逗号分隔

@ExceptionMappings({@ExceptionMapping(),@ExceptionMapping()})     //指定异常,多个异常处理使用“{}”括起来,异常处理之间用逗号分隔

注:若注解和配置文件冲突,则以注解为准。

异常处理

   异常类需要继承Exception抽象类。

   Struts.xml中配置异常类:

<global-exception-mapping>          //全局异常

<exception-mapping result=”名称(自定义)” exception=”异常类全路径”>           //局部异常

   注:局部异常优于全局异常。

   另外,action中的result也可以定义成全局的,使用<global-result>即可。

数据校验器

   Struts2提供了大量的数据校验器,包括字段优先校验器和校验器优先校验器。

字段优先校验器

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><validators>

       <field name=”username”>

              <field-validator type=”requiredstring”>         <!--必填项-->

                  <message>用户名不能为空!</message>

             </field-validator>

            <field-validator type=”stringlength”>     <!—字符串长度-->

                 <paramname=”minLength”>4</param>

                 <paramname=”maxLength”>6</param>

                 <message>用户名长度介于${minLength}和${maxLength}之间</message>

          </field-validator>

     </field>

     <field name=”age”>

         <field-validator type=”required”>           <!--必填项-->

            <message>年龄不能为空!</message>

        </field-validator>

       <field-validator type=”int”>      <!—数值型-->

            <paramname=”min”>10</param>

            <paramname=”max”>40</param>

            <message>年龄介于${min}和${max}之间</message>

       </field-validator>

    </field>

</validators></span></span>

   Requiredstring和required的区别就是requiredstring可以有空格字符串。另外,还可以校验日期(设置type=”date”)、邮件(设置type=”email”)、网址(设置type=”url”)等等。

校验器优先校验器

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><validators>

     <validator type=”requiredstring”>          <!--必填项-->

          <paramname=”fieldName”>username</param>

          <message>用户名不能为空!</message>

     </validator>

     <validator type=”stringlength”>     <!—字符串长度-->

          <paramname=”fieldName”>username</param>

          <paramname=”minLength”>4</param>

         <paramname=”maxLength”>6</param>

         <message>用户名长度介于${minLength}和${maxLength}之间</message>

     </validator>

</validators></span></span>
  以上是struts2的简单使用,Struts2的深入学习有待继续。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值