Struts2学习笔记二:开发流程

一:创建项目,添加依赖包

二:在web.xml配置核心控制器

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

三:创建action

class XXAction extends ActionSupport//继承ActionSupport定义action
{
   定义全局属性;//请求传进来时会自动把同名的参数值注入全局属性变量中
   
   定义处理方法;

   重写父类提供的默认方法;//主要有两个:execute()和validate()

return "结果"; }

四:创建拦截器

五:配置struts.xml

1:配置常量

2:引入其他模块配置的xml

3:定义package

  3.1)注册拦截器

  3.2)配置默认拦截器、全局result

  3.3)注册action:配置method、引用拦截器、配置结果集、默认参数值

<?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>
   <!--配置Structs2自身选项:常量配置-->
    <constant name="struts.action.extension" value="action,do,..." />//后缀名配置,什么后缀名的请求交给structs2处理
    <!-- 是否启用开发模式 -->
    <constant name="struts.devMode" value="true" />
    <!-- struts配置文件改动后,是否重新加载 -->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 设置浏览器是否缓存静态内容 -->
    <constant name="struts.serve.static.browserCache" value="false" />
    <!-- 请求参数的编码方式 -->
    <constant name="struts.i18n.encoding" value="utf-8" />
    <!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
    <constant name="struts.i18n.reload" value="true" />
    <!-- 文件上传最大值 -->
    <constant name="struts.multipart.maxSize" value="104857600" />
    <!-- 让struts2支持动态方法调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />//开启感叹号形式的action方法调用
    <!-- Action名称中是否还是用斜线 -->
    <constant name="struts.enable.SlashesInActionNames" value="false" />
    <!-- 允许标签中使用表达式语法 -->
    <constant name="struts.tag.altSyntax" value="true" />
    <!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
    <constant name="struts.dispatcher.parametersWorkaround" value="false" />

  
    <include file="struts-default.xml"></include>//组件化开发使用该标签:可以针对不同模块的请求处理定义成不同xml,引入structs.xml即可。注意文件头同strcuts.xml
    
    
    <!-- package提供了将多个Action组织为一个模块的方式
        package的名字必须是唯一的 package可以扩展 当一个package扩展自
        另一个package时该package会在本身配置的基础上加入扩展的package
        的配置 父package必须在子package前配置 
        name:package名称
        extends:继承的父package名称
        abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
        namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
     -->
    <package name="com.kay.struts2" extends="struts-default" namespace="/test">

<!--注册拦截器--> <interceptors> <interceptor name="timer" class="com.kay.timer"></interceptor> <interceptor name="logger" class="com.kay.logger"></interceptor> <!-- 定义拦截器栈 --> <interceptor-stack name="mystack"> <interceptor-ref name="timer"></interceptor-ref> <interceptor-ref name="logger"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 定义默认的拦截器 每个Action都会自动引用 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> <default-interceptor-ref name="mystack"></default-interceptor-ref> <!-- 全局results配置:每个action都可以使用--> <global-results> <result name="input">/error.jsp</result> </global-results> <!-- Action配置--> <action name="hello" class="com.kay.struts2.Action.LoginAction" method="调用action的哪个方法进行请求处理,不配置则默认调用execute方法"> <interceptor-ref name="timer"></interceptor-ref>//把注册的拦截器作用到该action上 <result name="success" type="dispatcher">/talk.jsp</result>//配置结果跳转 <param name="url">http://www.sina.com</param>//配置action中某全局变量的默认初始值,action中变量需要定义好setter/getter方法 </action> </package> </struts>

六:在页面端通过action的url来发送请求

原文地址:https://www.cnblogs.com/ygj0930/p/6807546.html