3.2Struts2的搭建和基础知识

来源:互联网 发布:linux ntpdate 脚本 编辑:程序博客网 时间:2024/05/20 20:45

1、structs2框架的搭建(版本是2.3.28)

1.1把Struts相应的jar包拷到工程里去。

1.2在工程中的web.xml中配上struct的过滤器。

<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>

1.3把相应的struct.xml的配置文件拷到工程的src目录下。

1.4创建一个Java类,这个类充当struct中的Action控制器,前提是这个类必须提供一个方法execute()。创建完后得在struct.xml中配置这个类。

package com.action;/** * 类要充当Struts中的Action控制器:原则:必须提供一个方法 *  *  * @author ctd * */public class FirstAction {private String username;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String execute() throws Exception {System.out.println("FirstActin中的Execute方法被执行了。。。");/** * 返回Result */this.username = "admin";return "succ_2";//return "succ";}}

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.devMode" value="true" /><package name="default" namespace="/" extends="struts-default"><action name="xx" class="com.action.FirstAction"><result name="succ">/succ_01.jsp</result><result name="succ_2" type="freemarker">/succ_02.ftl</result></action></package></struts>

1.5最后一步就是创建相应的jsp等页面或模板。

2:Struts框架的使用初步:
A:Apache下载struts.2.1.8.rar包。
B:解压空工程,进入apps目录。
C:将struts2的基本jar包拷到工程的lib目录中。
D:配置web.xml,加载struts2的过滤器
E:加载struts的配置文件struts.xml到src目录。
F:开发Struts中的Action类。并且类中必须有execute方法。 
exeucte是用于执行用户请求(Request)和响应用户(Response)的操作。
          用于接收GET与POST的请求。
G:将Action类配置到struts.xml中。
  <package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="helloAction" class="com.action.HelloAction">
<result name="succ">/succ_result.jsp</result>
</action>
   </package>
H:页面访问Action,执行exceute方法,根据execute方法的返回值到Action到result中
进行名称的匹配,从而请求转发或者重定向到页面。
3:Struts框架的流程
A:浏览器发送请求:/Struts2_Project_1/fistAction
B:Struts总过滤器接收接求,然后将请求的路径与struts.xml中的action name进行匹配。
C:如果匹配,将开始执行拦截器链,请求中的数据将一个一个通过过滤链中的每一个拦截器。
D:开始执行Action中的execute方法。
F:execute方法返回result响应类型。(请求转发,重定向页面)
4:struts.xml的配置。
1:bean,定义类。
2:constant:struts中的常量定义。
default.properties定义了struts2中所有的常量。struts并不会去读取。
struts.i18n.encoding=UTF-8//设置请求的编码
struts.enable.DynamicMethodInvocation = true//是否支持动态方法的调用
struts.configuration.xml.reload = true//是否支持XML的自动加载
struts.devMode = false//开发模式
struts.ui.theme=xhtml//UI模板的设置
struts.ognl.allowStaticMethodAccess=false//是否允许在ONGL表达式中调用静态方法
struts.action.extension=action,,//STruts请求的扩展名。
系统可以覆盖常量。struts读取常量的顺序:后面的会覆盖前面的配置。
A:struts-default.xml:不需要配置
B:struts.xml
<constant name="struts.i18n.encoding" value="GBK" />
C:struts.properties(这个文件需手工建立,也是放在src目录下,一般用于WebWork工程)
struts.i18n.encoding=UTF-8
D:web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
include部分:
struts中多模块的设置,模块化文件。
<include file="xxxx.xml"/>
公用的Action放在struts.xml中,模板的配置放到模板的配置文件中。

package
name="default"包名,随便取,不能重复。
namespace="/" 命名空间。
extends="struts-default"包之间的继承。就可以父包配置的选项
                默认所有的package都继承struts-default.xml
abstract="true|false"是否抽象包。抽象包中不能定义action。

Package底下的配置:
<action 
name="" action的名称
class="" action的类路径
method="" 执行action中哪一个方法的名称。
<action name="firstAction" class="com.action.FirstAction" method="delete"></action>
访问firstAction时,执行不是FirstAction中的execute方法,而是FirstActionon类中的Delete方法。
如果没有配置method,就是访问execute方法。
<result name="succ" type="dispatcher">
<param name=""></param>
</result>
name:result的名称
type:result的类型,
chain: 请求转发到Action
dispatcher: 请求转发到JSP面
redirect: 重定向到JSP页面
redirectAction:重定向到Action
stream: 流方式,用于下载
param:
result-type对应的类中成员变量的名称。
Action
private String username;
//成员变量必须生成SET/GET方法。
<param name=""></param> //Action中成员变量的值。

<result name="firstPage" type="redirectAction">
<param name="namespace">/space_test1</param>
<param name="actionName">test1Action</param>
</result>
interceptors:
配置拦截器和拦截器栈。
default-interceptor-ref:
配置默认栈。
当配置文件中配置了一个栈时,所以的action要使用栈的话,必须在action中加入调用
栈的代码。
<action = >
<interceptor-ref name=""></interceptor-ref>
</action>
比较麻烦,可以配置默认的栈,这样在package底下所有的action都用使用这个默认栈。
default-action-ref:
配置默认的action。
当链接到一个命名空间时,没有指定action的路径,那么就会执行默认的action。
http://localhost:8080/Struts2_Project_1/test1/
<package name="test" namespace="/test1" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result>/main.jsp</result>
</action>

<action name="testNameSpace"
class="com.action.TestNameSpaceAction">
</action>
</package>

//***********************
global-results与results的区别:
global-result:是Package下面所有的action都可以调用global中定义的result.
result:是action中私用的。
其它的package想要调用另一个package中定义的global-result时,直接将包做
继承关系即可。

4、Struts2和Servlet的不同

线程模式:
  Servlet是单例模式并且必须是线程安全的.
  Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

表达式语言:
  ◆Servlet整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
  ◆Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).
  绑定值到页面(view):
  ◆ Servlet使用标准JSP机制把对象绑定到页面中来访问。
  ◆Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页

          面(view)。

原创粉丝点击