读书人

Struts2.0-HelloWord以及工作原理

发布时间: 2012-08-26 16:48:06 作者: rapoo

Struts2.0------HelloWord以及工作原理

struts2 工作原理:

一个请求在Struts 2框架中的处理大概分为三个步骤
第一:客户端提交一个(HttpServletRequest)请求
??????????? 如在浏览器里面输入 http://localhost:8080/reg.jsp就是提交给一个

(HttpServletRequest)请求
??????????? 请求被提交到一系列的过滤器里面(Filter),如(ActionContextCleanUp,其他过滤器,

FilterDispather)。注意这是有先后顺序的。
???????? FilterDispather是控制器的核心,就是MVC的Struts
第二 :实现中控制器的核心。
???????? FilterDispatcher 询问ActionMapper是否需要调用某个Action来处理HttpServletRequest请求

,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交给ActionProxy。
???????? ActionProxy通过Configuration Manager(struts.xml)询问配置文件,找到需要调用的Action

类。比如注册 UserReg 类。
第三: ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,

在调用之前,ActionInvocation会根据配置加载Action相关的所有拦截器(Interceptor)
,一旦Action调用完毕,ActionInvocation负责根据struts.xml中的配置找到相应的result视图,返回结

果。
struts 2 的核心控制器是FilterDispatcher,有三个重要的方法:destroy(),doFilter(),init();
?

-----小技巧----打开记事本 CMD--notep

?

?

------reg.jsp-----------------------------------------

?? <body>
????? <form action="user.action" method="post">
??????? <input type="text" name="username"/><br/>
??????? <input type="text" name="password"/><br/>
??????? <input? type="submit"? name="save"/>
????? </form>
? </body>

?

------success.jsp----------------------------------------------------------------------

? <body>
?????? username=? ${username};
?????? password=? ${password};
? </body>

?

------com.panhe.cn.HelloWorldAction---------------------------------------------

package com.panhe.cn;

import com.opensymphony.xwork2.ActionSupport;


public class HelloWordAction? extends ActionSupport{
?private String username;
?private String password;
??? public String getUsername() {
??return username;
?}
?public void setUsername(String username) {
??System.out.println(username);
??this.username = username;
?}
?public String getPassword() {
??return password;
?}
?public void setPassword(String password) {
??System.out.println(password);
??this.password = password;
?}
?@Override
??? public String execute() throws Exception {
??? ?
??? ?return SUCCESS;
??? }
?
}

------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">
<!--struts2 总共有四类配置文件
??? struts.properties :? 定义框架自身的全局变量
??? strurs.default.xml:? 定义框架自身的使用的action映射以及result定义
??? struts-plugin.xml :? struts插件使用的配置文件,比如当使用strtus和spring结合的时候就需要
????????????????????????? 在 web.xml 中引用该配置文件。
??? strtus.xml 定义应用自身使用的action映射以及result定义;当我们一般将应用的各个模块分到不同的配置文件里面?????? :???????????????????????????
??? struts.properies定义的全局属性也可以在strtus.xml文件中定义
? -->
??
<!-- 四个配置文件的执行顺序
? strurs.default.xml? struts-plugin.xml? strtus.xml? struts.properties? web.xml
?-->


<struts>
???? <!--必须是.action结尾的才能被Struts2框架管理? -->

?<!--动态方法的调用? -->
?<constant name="struts.enable.DynamicMethodInvocation" value="false" />
?<!--设置开发模式? -->
?<constant name="struts.devMode" value="false" />
?<!--
??name 表示模版名称 namespace 表示空间名称,URL后面要自带的 extends
??struts是必须继承这个文件,因为里面会有很多定义的拦截器的
?-->
?<package name="user" namespace="/" extends="struts-default">
??<!--name 的名字 class是我要关联的类
??? method 最默认值execute方法
??? result 默认值是success试图
?? -->
??<action name="user" 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">
?<!--配置文件? Strtus2.0过滤器-->
?<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>

?<welcome-file-list>
??<welcome-file>index.jsp</welcome-file>
?</welcome-file-list>
</web-app>

-----------------------------------------------

读书人网 >软件架构设计

热点推荐