1.新建Web Project,取名为MapgisEgov.Test
2.Build Path-->Libraries中添加Jars、JRE System Library[jdk]、EAR libraries、Web App libraries、Apache Tomcat
3.Java EE Module Dependencies中勾选Jars,项目部署时会将Jars集成至WEB-INF/classes文件夹
4.在WebContent/下新建一个jsp文件NewTest.jsp
在Java Resources:src包下新建包com.mapgis.test包,在此包下面新建类NewTestAction.java,注意action和jsp命名方式。
5.在Java Resources:src包下新建配置文件:log4j.properties配置如下:
log4j.rootCategory=INFO, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
#
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${webApp.root}/WEB-INF/logs/mapgisegov.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.appender.R.Encoding=UTF-8
#
log4j.logger.com.opensymphony=ERROR
log4j.logger.org.springframework=WARN
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
log4j.logger.org.apache.velocity=FATAL
#
log4j.logger.org.hibernate=ERROR
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.tool.hbm2ddl=ERROR
log4j.logger.org.hibernate.type=info
log4j.logger.org.hibernate.hql=info
#
6.配置web.xml文件,详解如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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元素提供GUI工具可能会用来标记这个特定的web应用的一个名称 -->
<display-name>MapgisEgov.Test</display-name>
<!-- 指定欢迎页面 -->
<welcome-file-list>
<welcome-file>NewTest.jsp</welcome-file>
</welcome-file-list>
<!--
MVC框架需要 Web应用加载一个核心控制器,对于Struts2框架而言,需要加载FilterDispatcher
只要Web应用负责加载FilterDispatcher,FilterDispatcher将会加载应用的Struts框架。 因为Struts2
将核心控制器设计成Filter,而不是一个普通的Servlet。故为了让Web应用加载FIlterDispatcher,
只需在Web.xml文件中配置FilterDispatcher即可。配置FilterDispatcher的代码如下:
-->
<!--
过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联,
一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或者多个servlet或JSP页面相关联
-->
<!-- 配置Struts2框架的核心Filter -->
<filter>
<!-- 配置Struts2核心Filter名字 -->
<!-- 配置Struts2核心实现类 -->
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<!-- 配置Struts2框架默认加载的Action包结构 -->
<!--
<init-param> <param-name>actionPackages</param-name>
<param-value>org.apache.struts2.showcase.person</param-value>
</init-param>
-->
<!-- 配置Struts2框架配置提供者 -->
<!--
<init-param> <param-name>configProviders</param-name>
<param-value></param-value> </init-param>
-->
</filter>
<!--
正如上面看到的,当配置Struts2的FilterDispatcher类时,可以指定一系列的初始化参数,为
该Filter配置初始化参数时,其中有3个初始化参数有意义。
1:config:该参数的值是一个以英文逗号(,)隔开的字符串,每个字符串都是一个XML配置文件的位置。Struts2框架将扫描这些包空间下的Action类
2:actionPackages:该参数的值也是一个以英文逗号(,)隔开的字符串,每个字符串都是一个包空间,Struts2将扫描这些包空间下的Action类
3:configProviders:如果用户需要实现自己的ConfigurationProvider类,用户可以提供一个或者多个实现了ConfigurationProvider接口类,
然后将这些类的类名设置成该属性值,多个类名之间以英文(,)隔开。
除此之外,还可以在此处配置Struts2常量,每个<init-param>元素配置一个Struts2常量,其中<param-name>元素指定常量name,而<param-value>子元素指定了常量value。
-->
<!--
在web.xml文件中配置了该Filter,还需要配置该Filter拦截的URL。通常,我们让该FIlter拦截所有的用户请求,因此使用通配符来配置该Filter拦截器的URL,
下面是该Filter拦截URL的配置
-->
<!-- 配置Filter拦截的URL -->
<filter-mapping>
<!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 处理中文乱码的过滤器配置-->
<filter>
<!-- spring编辑过滤器 -->
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 编码方式 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!--
强制进行编码转换 <init-param> <param-name>forceEncoding</param-name>
<param-value>true</param-value> </init-param>
-->
</filter>
<!-- 过滤器的匹配 URL -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置监听器 -->
<!-- WebAppRootListener监听器配置 -->
<!--
说明:Spring在org.springframework.web.util 包中提供了几个特殊用途的 Servlet
监听器,正确的使用它们可以完成一些特殊功能的需求。 比如某些第三方工具支持通过 ${key} 的方式引用系统参数(即可以通过
System.getProperty() 获取的属性,WebAppRootListener可以将
web应用根目录添加到系统参数中,对应的属性名可以通过名为“webAppRootKey”的Servlet上下文参数指定,默认为“webapp.root”。下面是具体配置
-->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webApp.root</param-value>
</context-param>
<!-- 负责将Web应用根目录以WebAppRootKey上下文参数指定的属性名添加到系统参数中 -->
<!--
通过以上对webAppRootKey配置,就可以在程序中通过 System.getProperty("webapp.root") 获取
Web 应用的根目录了。 过更常见的使用场景是在第三方工具的配置文件中通过${webapp.root} 引用 Web 应用的根目录。
-->
<!-- Log4jConfigListener监听器配置 -->
<!--
说明: 一般情况下,必须将Log4J日志配置文件以log4j.properties为文件名保存在类路径下。
Log4jConfigListener允许通过log4jConfigLocation
Servlet上下文显示的指定Log4J配置文件地址,如下所示:
-->
<context-param>
<!-- 指定 Log4J 配置文件的地址 -->
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
<!-- Log4J日志刷新时间间隔 -->
<param-name>log4jRefreshInterval</param-name>
<param-value>6000</param-value>
</context-param>
<!-- 使用该监听器初始化Log4J日志引擎 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 这里集成Spring框架 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,classpath*:beanContext-*.xml,classpath*:springContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--
如果某个会话在一定时间内未被访问,服务器可以抛出它以节省内存,可以通过使用HttpSession的setMaxInactiveInterval
方法,明确设置单个会话对象的超时值,或者可以利用session-config元素制定缺省超时值,超时值的单位为(分)
-->
<!-- SESSION设置 -->
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<!-- error-page元素使得在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面 -->
<!-- 指定错误处理页面 -->
<error-page>
<!-- excpetion-type指出在出现某个给定的Java异常但未捕捉到此异常时使用的URL -->
<exception-type>java.io.IOException</exception-type>
<location>/common/system_ioerror.jsp</location>
<!--
error-code 指出在给定HTTP错误代码时使用的URL <error-code></error-code>
-->
</error-page>
</web-app>
7.配置struts.xml文件,将其保存在Java Resources:src包下,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- Struts框架核心配置文件就是struts.xml配置文件,该文件主要负责管理Struts2框架业务控制器Action -->
<!--
在默认情况下,Struts2框架将自动加载放在WEB-INF/class路径下的struts.xml文件。在大部分应用里,随着应用规模的增加,
系统Action数量也大量增加,导致struts.xml配置文件很臃肿,为了避免struts.xml文件过于庞大臃肿,提高其可读性,
我们可以将一个struts.xml配置文件分解成多个配置文件,然后再struts.xml包含其它配置文件
-->
<!-- 下面是struts2配置文件的根元素 -->
<struts>
<!-- 通过include元素导入其它配置文件 -->
<include file="struts-default.xml"></include>
<!-- struts-test.xml文件在下面将会讲到-->
<include file="struts-test.xml"></include>
<!-- .... -->
<!-- Struts配置文件还应该有一个Struts.properties文件,我们在此处通过配置constant元素,同样可以配置这些属性 -->
<!-- 设置Struts2应用是否使用开发模式,设置为true则可以在应用出错时显示更多、更友好的错误提示 -->
<constant name="struts.devMode" value="true"></constant>
<!--
配置名为com.mapgis.egov.test.glob的包空间,继承struts-default包空间。
struts-default包空间定义在struts-default.xml(Struts2框架默认配置文件,Struts2框架每次都会自动加载该文件)文件中。-->
<package name="com.test" extends="struts-default" namespace="/…">
<!-- 定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
<default-interceptor-ref name="defaultStack"></default-interceptor-ref>
<!-- 全局results配置 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!--
<action name="abc" class="NewTestAction">
<result name="input">/NewTest.jsp</result>
<result name="error">/NewTest.jsp</result>
<result name="success" type="dispatcher">/NewTest.jsp</result>
</action>
-->
</package>
</struts>
下面再看看struts-test.xml文件的配置:
<?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提供了将多个Action组织为一个模块的方式
package的名字必须是唯一的 ,package可以扩展 ,当一个package扩展自另一个package时,
该package会在本身配置的基础上加入扩展的package的配置 ,
父package必须在子package前配置
name:package名称
extends:继承的父package名称
abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
-->
<package name="test" extends="struts-default" namespace="/s">
<action name="*" class="{1}Action">
<result name="input">/{1}.jsp</result>
<result name="error">/{1}.jsp</result>
<result name="success" type="dispatcher">/{1}.jsp</result>
</action>
</package>
</struts>
使用匹配符可以匹配时,要注意action的起名形式,应为:XXXAction.java,对应jsp页面也应匹配成XXX.jsp形式。
最后再配置由spring初始化bean的文件配置springContext-test.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Spring配置文件的DTD信息 -->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<!-- Spring配置文件的根元素 -->
<beans>
<!--以下是逻辑接口的bean配置 -->
<bean id="NewTestAction" class="com.action.test.NewTestAction" >
</bean>
</beans>
ok了,可以运行试试了。