第一个Struts应用
关于web.xml
1.<filter>节点用来定义Struts2框架的控制组件StrutsPrepareAndExecuteFilter,他位于Struts2的Struts2-core-X.jar
2.<filter-mapping>用来定义过滤器的URL映射规则,设置为“/*”,则表示过滤器对所有的请求信息都执行过滤操作,这样Struts2就全面接管了Web应用的控制权。
关于Struts2组件
1.控制组件:Struts2中自带的StrutsPrepareAndExecuteFilter作为控制组件
2.视图组件:Strut2框架默认对后缀为Action的请求进行处理
3.模型组件:模型组件是用来对客户输入的信息根据业务规则进行处理,并根据数据处理结果返回结果视图的逻辑名称。
Struts2中的模型组件需符合以下要求:
①. 具有一个execute()方法,作为对请求信息进行处理并返回结果的接口。
②. 对包含的属性参数提供setter/getter方法,以便框架对属性参数进行操作。
配置Struts2框架
1.控制组件通过一个默认的配置文件Struts.xml来获取组件之间的关联信息。
2.Struts.xml被添加在源代码的根目录下,代码被编译后自动打包到发布文件包的class目录下。
3.其实配置文件Struts2就是一个Web应用于Struts2框架交流的平台,只有通过这个平台,才能够将组件的定义、配置参数、组件之间的逻辑关系等告诉框架,框架才能够在我们的控制下有序运行。
简单示例:
1.修改Web应用配置文件web.xml
在web.xml中部署Struts2框架的控制组件。
Web.xml
<?xml version="1.0" encoding="GBK"?> <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"> <display-name></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>
2. 定义视图组件
Input.jsp
<%@ page contentType="text/html;charset=GBK" %><%@ page language="java" import="java.util.*" pageEncoding="GBK"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>表单页面</title> </head> <body> <form action="greet.action"> <h1>name:<input type="text" name="name" value="" /> </h1> <br> <input type="submit" value="提交" name="submit"/> </form> </body></html>
Hello.jsp<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>显示页面</title> </head> <body> <h4> hello </h4> </body></html>
Unknown.jsp <%@ page language="java" import="java.util.*" pageEncoding="GBK"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>错误页面</title> </head> <body> <h1> 对不起,我不与陌生人说话</h1> </body></html>
3. 定义模型组件
Greet.javapackage com.luocky.struts2;public class Greet {private String name;private String Greeting;private static final String GREETING="你好,";public String execute(){if("".equals(getName())){return "FAIL";}else{setGreeting(GREETING+getName());return "SUCCESS";}}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGreeting() {return Greeting;}public void setGreeting(String greeting) {Greeting = greeting;}}4.配置Struts2框架
Struts.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 name="default" namespace="/" extends="struts-default"><action name="greet" class="com.luocky.struts2.Greet"><result name="SUCCESS">/Hello.jsp </result><result name="FAIL">/Unkown.jsp</result></action> </package></struts>
分析原理:
1.客户在Input.jsp页面填好信息提交时,则向服务器发出请求http://localhost:8080/StrutsDemo01/greet.action?name=test%submit=... , 由于在web.xml中配置的过滤器StrutsPrepareAndExecuteFilter接管了Web应用,因此首先被过滤器StrutsPrepareAndExecuteFilter处理。
2.接下来是StrutsPrepareAndExecuteFilter的工作,看到请求的扩展名action,过滤器FilterDispatcher将开始对URL 进行解析以便得到正确的映射。首先除去“?“后的参数,Struts2Demo01时Web应用上下文名称,”/greet.action“才是要映射的模型组件的URL,除去扩展名,则剩余”/greet“分别对应模型组件的Package对应的命名空间”/“和模型组件的名称”greet“。
3.接下来过滤器将在Struts2的配置文件Struts.xml中查找命名空间为“/“的package,然后在此包中寻找名为greet的Action模型组件,最后将请求转到Action对应的实现类com.luocky.struts2.Greet。
4.参数传给模型组件后,execute方法对参数进行处理,并返回视图或逻辑对象。
总之,Struts2框架的工作流程为:框架收到客户端的请求,控制器StrutsPrepareAndExecuteFilter根据配置文件将请求映射到制定的Action组件,Action组件处理完成后返回一个代表结果视图的字符串,框架根据此字符串定位到指定的结果视图,并返回到客户端,整个处理流程结束。