配置基本的环境
配置本地的struts2的环境,从官网上下载了最新的版本,拿了重要的几个包,然后将这些包导入到项目里面,并且把这几个包拷贝到web-inf下的lib文件夹里面。如下如
在编写 web.xml 中至少要包含以下两部分的内容:
- 定义的节点,定义所映射 URL 模式。
- 定义一个项目默认访问的首页。在下面的例子中,节点对应的类为org.apache.struts2.dispatcher.FilterDispatcher;其 URL 模式为*,即匹配所有的 URL 模式;默认的首页为 index.html。
这是可应用于 Struts2的 web.xml 的最基本形式了。当然,也可以在 web.xml 中增加更多的其它的配置项,比如增加对 spring 等其它开源项目的支持。web.xml 是任何 Web 应用都不能少的配置文件,它存放的路径是在 WebRoot 这个目录下的,千万不要存放错位置。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>servlet_test</display-name>
<!--部署之前,先清除环境 -->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--部署filter的名称以及对应的类 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
<filter>
<filter-name>Controller</filter-name>
<filter-class>control.Controller</filter-class>
</filter>
<filter-mapping>
<filter-name>Controller</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
-->
<!--项目的首页-->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
文件前面两个节点的配置,在上面没有提到,其实它的配置并不是必须的,只是一种好的风格。作用就是,在部署这个项目之前先清除以前在 Tomcat 中遗留的一些干扰信息,这样就不会对新的项目部署产生干扰。整个web.xml 就是在项目中要先配置一个 FilterDispatcher,拦截类似于.jsp、.vm 的请求,然后寻求相应的 Action 去执行。当然还可以使用 Struts2 提供的标签,其他的框架为了使用标签就是要单独配置一个标签的节点,譬如 WebWork,但是 Struts2 为我们提供了方便,进行了默认的配置。其实大多数 web 应用的 web.xml 文件都是按照这样配置。
注意:在做上传文件的时候,一定要在 web.xml 中增加 ActionContextCleanUp 这个 filter,如果不增加,会发生第一次上传取不到文件的情况。
配置struts2配置环境
作为 Struts2 最核心的配置文件,Struts2 所有高级特性的相关特性都在这里进行定义,包括 Action,Interceptor,Velocity 视图等等。下面的 Struts2.xml 所示的是这一章后面实例的所有配置,有结点是对 Struts2 的 Action 的配置,有结点是对 Struts2拦截器的配置,还有 Velocity 视图模板结点的配置。
<?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>
<constant name="struts.devMode" value="true"/>
<!-- 在包中导入 Struts 自带的配置文件 struts-default.xml -->
<package name="default" extends="struts-default">
<!-- 配置自己定义的拦截器 -->
<interceptors>
<interceptor name="greeting" class="example.GreetingInterceptor">
</interceptor>
</interceptors>
<!-- 配置系统自带的拦截器栈 -->
<default-interceptor-ref name="completeStack">
</default-interceptor-ref>
<!-- 配置自己定义的 Action -->
<action name="helloworld" class="example.helloworld">
<result name="success">hello.jsp</result>
<result name="input">name.jsp</result>
</action>
<action name="greeting" class=" example.GreetingAction">
<result name="success" type="velocity">ex01-result.vm</result>
<!-- 显示使用自己定义的拦截器 -->
<interceptor-ref name="greeting"></interceptor-ref>
</action>
</package>
</struts>
第一句代码的功能也是为了统一的字符编码,和 web.xml 采用一样的编码风格。
接下也是对应的 DTD 的说明。这个标签是表示现在采用的是否为 struts2 开发模式,在开发模式下会报错,如果是在开发阶段值就要设置为“true”,便于开发,如果是最终完成后就设置为“false”。
在 struts.xml 文件中,需要配置拦截器,以及自己添加的 Action,是在一个 package 标签之间配置的,通过 extends 属性把 Struts 自带的配置文件 struts-default.xml 导入。
上面关于自己定义的拦截器配置是后面的例子要用到的,以及第二个 greeting Action 也是的。在helloworld 这个例子中,默认的 Struts2 文件一定要导入,其次就是配置 helloworld Action。在页面上会提交数据给 Action,然后 Struts2 就会根据给的 Action 名字,就到 struts.xml 文件中查找,找到 Action 对应的类,最后就给相应的类进行处理。
还可以根据执行的不同返回结果,选择不同的返回页面。在这个配置文件里,重点是声明自定义的拦截器,通过 interceptor 标签的声明告诉系统自定义的拦截器。
注意:struts.xml 和 web.xml 处于不同的目录下。
- struts.xml 存放在\WebRoot\WEB-INF\classes下
- web.xml 存放在\WebRoot 目录下,大家切记。