Struts2.5.X搭建环境

来源:互联网 发布:vivo手机怎么开4g网络 编辑:程序博客网 时间:2024/05/22 13:41

Struts2.5.X搭建环境

完整示例源代码下载(含jar包):http://download.csdn.net/detail/pplsunny/9678163

Struts2.5在配置过程中,有几点需要注意:

开发环境:Eclipse neon(4.6),Tomcat8.5,JDK1.8

    1.导入jar包,必备jar包如下:尤其是log4j.jar和javassist.jar为必备包


  

2.在web.xml中添加过滤器。需要注意的是filter-class的值,相对于之前的版本发生了变化。

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>StrutsDemo</display-name><!-- 配置Struts2过滤器 --><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.html</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

过去的写法如下:

<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> 或者 <filter> <filter-name>action2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter>

Struts2用于处理用户请求的Action,没有与Servlet API耦合,显示无法处理用户请求,而Struts2提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并调用Action的execute方法来处理用户的请求.

   3.struts.xml Examples(官网示例)

<?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="helloWorld" extends="struts-default">  <action name="hello" class="com.ppl.action.HelloAction">  <result name="success">/hello.jsp</result>  </action>  </package></struts>

也可使用升级后的版本,修改配置文件头部为2.5版本的:

<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd">

注意点:

有的同学反映方法不能访问的问题,需要在每个action配置文件中加上 strict-method-invocation="false";

<package name="login" namespace="/login" extends="struts-default" strict-method-invocation="false">


Struts2配置文件解析

Struts2框架中使用包来管理action,避免了Servlet在web.xml中难以管理的与维护的局面.包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action,在实际应用中,我们应该把一组业务功能相关的action 放在同一个包下.

配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,如果其他包要继承该包,必须通过该属性进行引用,包的namespace属性用于定义该包的命名空间,命名空间作用为访问该包下的action路径的一部分,namespace属性可以不配置,如果不指定该属性,默认的命名空间为””,见以上示例.

通常每个包都应该继承struts-default包,因为struts2很多核心功能都是拦截来实现的,如,从请求中把请求参数封闭到action,文件上传和数据验证等都是通过拦截器实现的,struts-default定义了这些拦截器和Result类型,可以这么说,当包继承了struts-default才能使用struts2提供的核心功能,struts-default包是在struts2-core-2.xx.jar文件中的struts-defalut.xml中定义,struts-default.xml也是struts2默认配置文件,struts2每次都会自动加载struts-default.xml文件.

package还有一个abstract=”true”属性,指定此包为抽象包,和抽象类的概念差不多,说明此包只能被其他包继承,则它里面不允许包含action元素.

Action节点:Action 元素method属性,默认值为method=”execute”,也就是当action接收到请求后,交给哪个方法去处理,默认的是交给execute方法去处理,当然,也可以交给其他方法,后面会讲解到.

result元素主要定义视图的跳转和返回的行为及类型,后面会详细介绍.

<struts><constant name="struts.enable.DynamicMethodInvocation" value="false"/><constant name="struts.devMode" value="false"/><constant name="struts.i18n.encoding" value="UTF-8"/><constant name="struts.serve.static.browserCache " value="false"/><include file="chapter1.xml"/></struts> 

1.struts.xml文件的分离
 我们的web.xml文件非常之大,到后来是越来越难的查找与维护,看得头都是大的,Struts2配置文件可以分离,很好的解决了此问题.
通过主次配置文件的分离,可以加强团队间的合作,并且互不打扰彼此的配置文件,出了问题也知道责任在哪里.
在实例开发中也是这样做的,通过一个主文件中,打开全局开关,引入其他子配置文件--><includefile="chapter1.xml"/>

2.常用开关的介绍

<constant name="struts.i18n.encoding" value="UTF-8"/>指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法<constant name="struts.action.extension" value="do,action"/>该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。   <constant name="struts.custom.i18n.resources" value="guojihua" />设置国际化 ,value必须和国际化配置文件前缀相同<constant name="struts.serve.static.browserCache " value="false"/>设置浏览器是否缓存静态内容,默认值为true,开发阶段最好false<constant name="struts.configuration.xml.reload" value="true"/>当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段最好true<constant name="struts.devMode" value="true"/>开发模式下设为true,这样可以打印出更详细的错误信息<constant name="struts.enable.DynamicMethodInvocation" value="false"/>使用超链接方法,如<a href="user!add">添加</a>必须设为true 动态方法调用,可以解决多个请求对应一个Servlet的问题,后面详细讲解,默认为true,关闭则设为false.

整个项目截图如下:


谷歌浏览器访问路径:http://localhost:8080/Struts2Demo/hello

整个执行过程详解图


Struts2的Action的方法访问(使用通配符实现)

通配符用星号(*)表示,用于配置0个或多个字符串,在配置Action时,可以在action元素的name属性中使用星号来匹配任意的字符串。

ACTION类

/*** com.ppl.action.BookAction.java* @author 作者 : pplsunny* @version 创建时间:2017年4月10日 下午10:03:32* 类说明*/package com.ppl.action;import com.opensymphony.xwork2.ActionSupport;/** * XXXX */public class BookAction extends ActionSupport {/** * 添加 * @return */public String add() {System.out.println("add..............");return NONE;}/** * 修改 * @return */public String update() {System.out.println("update..............");return NONE;}}

Struts2配置文件

<!-- 配置action的方法访问 --><!-- <package name="methoddemo" extends="struts-default" namespace="/"> 有method属性:写要执行的action里面的方法的名称<action name="addAction" class="com.ppl.method.BookAction" method="add"></action>执行update方法 <action name="updateAction" class="com.ppl.action.BookAction" method="update"></action></package>    --><!-- 通配符方式实现 --><package name="methoddemo" extends="struts-default" namespace="/"><!-- name属性值里面写符号 * (1)执行action里面的add方法,访问 book_add,使用book_*可以匹配到,*相当于变成 add (2)执行action里面的update方法,访问book_update,使用book_*可以匹配到,*相当于变成 update 上面两个路径使用 book_* 可以匹配到 method属性写*值 --><action name="book_*" class="com.ppl.action.BookAction" method="{1}"></action></package>

测试代码:

    <h1>测试页面</h1>    <s:form action="book_add">        <s:submit value="测试页面1"/>    </s:form>    <s:form action="book_update">        <s:submit value="测试页面2"/>    </s:form>


2 1
原创粉丝点击