struts2是一个较为成熟的mvc框架,先看看怎么配置struts2并且产生helloworld页面。
首先从官网下载struts2,http://struts.apache.org/download.cgi,用2.5就可以,本文也是基于2.5说明的,其他版本配置的时候会略有不同。环境tomcat8+jdk1.8+eclipse。下载之后,解压,把其中的8个包(本次开发只用这些即可,其他版本会有不同),commons-fileupload-1.3.3.jar、commons-io-2.5.jar、commons-lang3-3.6.jar、freemarker-2.3.26.jar、 log4j-api-2.9.1.jar、ognl-3.1.15.jar、struts2-core-2.5.14.1.jar、javassist-3.20.0-GA.jar。另外这里少了一个包,按理说官网给的不会少,但是在这8个包下面开发,tomcat始终会报错,于是加一个包,log4j-core.jar。
新建一个动态网页项目,然后把这些包刚在WEB-INF下的lib里面。
在web.xml中,配置拦截器,就是会过滤你的网页,因为只有你的网页经过了这个属于struts2的filter,你的操作才能被struts2看见,才能被struts2处理,所以这个filter要干三件事,1指出是谁要filter网页,2这个人的源地址或者说这个人的class是什么,3这个人要filter的网页是哪些。所以配置文件很明了了。
<?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_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>MyStruts2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置核心拦截器 --> <filter> <!-- Filter的名字 --> <filter-name>struts2</filter-name> <!-- Filter的实现类 struts2.5以前可能有所不同 --> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <!-- 拦截所有的url --> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
<filter>标签说明了谁要拦截网页,这个人是struts2,并且他的class的地址,<filter-mapping>说明了struts2这个人要拦截的网页是哪些,是全部。这两个标签通过filter-name联系起来,共同说明了filter的三个特征。
完成web.xml配置,需要的网页已经被拦截,那么拦截之后要让struts2来处理,这是就需要一个struts2.xml来处理这个拦截过来的网页了。在src目录下建立一个struts2.xml。
这个xml要对拦截到的网页进行处理,你访问的是a网页,那就让struts里面对应a的网页的来处理,如果访问的是b,那就让struts里面对应b的网页的来处理。由于我们做最简单的helloworld,我们就用helloworld来做访问,因此我们要在struts.xml放一个东西来接收并出来拦截到的helloworld页面。这个东西也要具备3个条件,1接收,用对应的名字即可接收,2处理,我们用什么东西来处理这个页面,3返回,处理完这个拦截的页面之后,我们要返回让访问者看到。1用对应的名字,2用一个类,3用一个页面。于是就有了下面这个struts2配置。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <!-- name action的名字,访问时使用helloworld.action访问,class:实现类 --> <action name="helloworld" class="MyPackage.HelloWorldAction"> <!-- 结果集,即action中SUCCESS返回的视图 --> <result name="success"> /result.jsp </result> </action> </package> </struts>
第二行的文字很重要,没有的话是无法使用struts2的。<struts>标签里面一个<package>,再往里面,<action>就是我们要的,这个action的name是helloworld,表明我们用这个action来出来名为helloworld的网页,用class中的类来处理,处理之后可能会有不同的返回值,根据不同的返回值,用<result>中对应name的页面来返回给访问者。
这个action中的类:
package MyPackage; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; public String execute()throws Exception { System.out.println("正在执行的Action"); return SUCCESS; } }
这个action中返回的页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>Insert title here</title> </head> <body> struts2配置成功! </body> </html>
访问http://localhost:8080/MyStruts2/helloworld。
整个项目的结构:
这样一个最基本的struts2的网页就实现了。
主要还是要理解web.xml中的filter和struts.xml中的action。