才开始学习Struts2时,理解它的处理流程是一个重点。这里将会用一个小例子来讲述大概的过程,可能语言不会太专业,但是试图将这个过程理解简单化。详细的研究大家可以自己寻找资料。
我们先来一个简单的struts2的简单程序。这个程序建立在Myeclipse 8.5上,使用的是自带的添加struts2库。
1.配置web.xml <?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"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <display-name>Struts Blank</display-name> <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>
避免出现误会,上面的配置中核心控制器是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。据查应该是在struts2.1.3的版本以下(不包含2.1.3)是大家常见的org.apache.struts2.dispatcher.FilterDiapatcher。Myeclipse 8.5 自带的应该是2.1.8。
2.JSP页面helloreader.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>helloreader!</title> </head> <body> <h2> <s:property value="message" /> </h2> </body> </html>
3.Action类 HelloReader.javapackage tutorial; import com.opensymphony.xwork2.ActionSupport; public class HelloReader extends ActionSupport { public static final String MESSAGE = "Hello Reader ! I'm from Struts 2"; public String execute() throws Exception { setMessage(MESSAGE); return SUCCESS; } private String message; public void setMessage(String message){ this.message = message; } public String getMessage() { return message; } }
4.struts.xml<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.configuration.xml.reload" value="true" /> <constant name="struts.devMode" value="true" /> <package name="tutorial" extends="struts-default"> <action name="HelloReader" class="tutorial.HelloReader"> <result name="success">/helloreader.jsp</result> <result name="error">/index.jsp</result> </action> </package> </struts>
我们通过http://jingyuan_l-pc:8080/Struts2/HelloReader.action进行访问,得到结果如下
我们可以大概用简单的话来描述这个过程:
1.我们通过http://jingyuan_l-pc:8080/Struts2/HelloReader.action来访问,如同访问servlet一般,我们会先查看web.xml的配置,找到核心过滤器,然后进入struts2的处理流程。
2.接着会查看struts.xml中action名为“HelloReader”(这里的name值即为你要访问的action,即URL“....../HelloReader.action”中的HelloReader)的配置。然后调用指定class 的execute方法。
3.调用方法时,赋值给message,然后返回常量值“SUCCESS”。
4.再看struts.xml中result,是success时是跳到helloreader.jsp。
5.然后到helloreader.jsp调用message的值,标签显示值然后以HTML发送到浏览器。