惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
C
Cisco Blogs
The Hacker News
The Hacker News
T
Threatpost
S
Schneier on Security
K
Kaspersky official blog
Spread Privacy
Spread Privacy
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
NISL@THU
NISL@THU
量子位
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
Security Latest
Security Latest
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
News and Events Feed by Topic
爱范儿
爱范儿
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
Project Zero
Project Zero
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
T
Tenable Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Vulnerabilities – Threatpost
Forbes - Security
Forbes - Security
博客园 - 三生石上(FineUI控件)
C
Cyber Attacks, Cyber Crime and Cyber Security
N
News and Events Feed by Topic
V
V2EX
Webroot Blog
Webroot Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
M
MIT News - Artificial intelligence
Scott Helme
Scott Helme
Simon Willison's Weblog
Simon Willison's Weblog
L
LangChain Blog
W
WeLiveSecurity
Cloudbric
Cloudbric

博客园 - 马森

Java IO测试样例-字节流-字符流 java中的io系统详解 MongoDB资料汇总 字符编码笔记:ASCII,Unicode和UTF-8 jQuery和ExtJS的timeOut超时设置和event事件处理 Sybase字符串函数-数学函数-系统函数 inux 设置系统时间和硬件时间 Sybase采用固定表+存储过程实现分页 Wordpress XML-RPC协议说明 理解 SET CHAINED command not allowed within multi-statement transaction. sybase性能优化 - 马森 - 博客园 Java引用对象SoftReference WeakReference PhantomReference(二) [整理]centos下配置和安装 jstl字符串处理 [原]动态打jar包程序,可用于手机图片音乐游戏的动态打包 Java,Tomcat,Mysql乱码总结 [原]output parameters have not yet been processed源自返回了多个数据集 [转]MS SQL Server数据库事务锁机制分析 tomcat支持ssl时Keystore was tampered with, or password was incorrect
struts2 action 配置方法 &&struts2的配置文件
马森 · 2011-06-09 · via 博客园 - 马森

 struts2 action几乎完全吸收了xwork 的精华,近日学习struts 2,总结一下action的配制方法。首先看一下com.opensymphony.xwork2.Action的接口声明,Action提供execute() 方法,子类必须实现execute() 方法。

  public interface Action {
    public String execute() throws Exception;
}

com.opensymphony.xwork2.ActionSupport是com.opensymphony.xwork2.Action的缺省实现,实现了execute()方法。我们开发的Action通常继承com.opensymphony.xwork2.ActionSupport

1.简单的action配置

 <action name="logon" class="tutorial.Logon">
  <result type="redirect-action">Menu</result>
  <result name="input">/tutorial/Logon.jsp</result>
</action>

   前台发送调用logon.action的请求,截听器调用默认的execute()方法

2.在开发中通常将多个方法写在一个action中,对于这样action可以采用集中配置方式
2.1.一个方法一个action配制

 <action name="delete" class="example.CrudAction" method="delete">


2.2通配符方式
2.2.1 *

 <action name="*Crud" class="example.Crud" method="{1}">

  method="{1}"表示,第一个通配符是方法.

  action调用的例子:addCrud.action, deleteCrud.action, updateCrud.action, viewCrud.action


2.2.2 分割符加上*,分割符如:下划线_, 惊叹号!

 <action name="crud_*" class="example.Crud" method="{1}">

   调用方式:crud_add.action, crud_delete.action

 <action name="crud!*" class="example.Crud" method="{1}">

      调用方式:crud!add.action, crud!delete.action

2.3 url pattern: /{model}/{method}.action
“/User/add.action” 调用User的add方法

<action name=”*/*” method=”{2}”
class=”com.infoq.actions.{1}Action”>
<result type=”redirect”>/{1}/view.action</result>
<result name=”view”>/{1}/view.jsp</result>
<result name=”input”>/{1}/edit.jsp</result>
<result name=”home”>/{1}/home.jsp</result>
</action>

 

=========================================================

struts2的配置文件

struts2相关的配置文件有web.xml(必须的),struts.xml(必须的),struts.properties,struts-default.xml,velocity.properties,struts-default.vm。

web.xml: 包含所有必须的框架组件的web部署描述符;

struts.xml:配置包含result/view类型、action映射、拦截器等的struts2的主要配置文件。

struts.properties: 配置struts2的框架属性;

struts.properties 配置文件(此文件放在/WEB-INF/classes/)

此文件包含了一系列的key-value对象,每个key就是一个struts2的属性,value就是一个struts2的属性值。

此配置文件提供了一种改变框架默认行为的机制。其所包含的所有属性都可以在web.xml配置文件中使用"ini-param"标签进行配置,或者在struts.xml文件中使用"constant"标签进行配置。

****************************

struts.xml常用配置使用方法**

****************************

1、<include>标签重用配置文件

如果package,action,interceptor等配置较多时,都放到一个struts.xml中比较不容易维护。

所以需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用<include>标签引用这些配置文件。结构清晰,配置文件复用。

例子:

<struts>

   <include file="struts1.xml"/>

   <package name="" extends="/sturts-default">...</package>

<action name=>..</action>

</struts>

2、action配置

默认情况下,struts2会调用动作类的execute方法,但有时,好几个请求动作对应一个action类中不同的方法。

这种情况下,可以在<action>标签中通过method方法指定要执行的动作类的方法名,并且需要为不同的动作起不同的名字(也叫别名,即name值)。

<action name="my1" class="action2.method.Myaction">

   ......

</action>

<action name="my2" class="action2.method.Myaction" method="print">

   ......

</action>

  上面2个动作的class属性都指向同一个类,name为他起了2个动作别名,my1和my2.

在每个动作里又指定了要运行的方法名。

下来在action类里一定要有这1个方法print。

package ction2.method

public class Myaction extends ActionSupport{

  public String execute() throws Exception{

    ........这是一般的方法,配合第一个action

          }

  public String print() throws Exception{

    ....... 这是第2个action的方法

   }

}

除了 在struts.xml中配置别名外,还可以不用修改struts.xml而直接用请求参数来描述指定动作,格式如下:

http://localhost:8080/contextPath/actionName!method.action

通过请求指定动作的详细内容:   actionName!method.action

如这个,后面可以这样写:/my2!print.action 即可访问之。

3、请求参数设置

<action name="" class="">

<param name="name">zhengsha</param>

<param name="age">26</param>

<result name="save">/result.jsp</result>

</action>

4、action类中定义相应的setter方法读取此参数,一般不用设置getter方法

public class Myaction extends ActionSupport

{

private String name;

private String age;

public void setName(String name)

{

this.name= name;

}

public void setAge(String age)

{

this.age= age;

}

public String execute() throws Exception

{System.out.println("name is"+name+";age is"+age);}

}

5、result 配置

默认状态下,<result>标签的type属性是"dispatcher",即转发。

如果result的type属性没有定义,struts2会自动将其定义为success。

用户也可以自己设置

<result name="save" type="redirect">/result.jsp</result>

如有一个result被多个<action>使用,这时可以使用<global-results>标签来定义全局的<result>,代码如下:

<struts>

<package name="demo" extends="struts-default">

<global-results>

<result name="print">/result.jsp</result>

</global-results>

<action name="submit" class="...">

 如果action里没有相应的result,那struts2就会使用全局的<result>

</action>

</package>

</struts>

6、拦截器配置

struts2拦截器如同servlet里的过滤器,struts2执行action的execute()方法前先执行在struts.xml中配置的拦截器,执行完所有的intercepor方法后,会执行execute方法。

注意:在action里面最后必须一定要引用struts2自带的拦截器缺省堆栈defaltStack,否则出错。

如:

<interceptor-ref name="defaultStack"/>(必须加,否则出错!)

7、package配置

package 可以将逻辑上相关的一组action,result,interceptor等组件分为一组。

package 属性有:

name(必须的)       package的表示,为了让其他的package引用

extends(可选的)  从哪个package继承的

namespace(可选的)  下面讲

abstract(可选的)  定义这个package为抽象的,这个package中不需要定义action

namespace 讲解

"/" 表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个package下查找。

""表示默认的namespace。当所有的namespace中都找不到的时候,就在这里找。

例如:

<package name="default">

<action name="bar" class="">...</action>

</package>

<package name="mypack1" namespace="/barspace">

<action name="bar" class="">...</action>

</package>

<package name="mypack2" namespace="/">

<action name="no" class="">...</action>

</package>

a、 如果请求为 /barspace/bar.action ,则查找 “/barspace”,如果找到"bar",则执行相应的    action;如果没找到,就执行默认的namespace。

b、     如果请求为“/no.action”则namespace(“/”)被查找,找到了则执行对应的action,否则执行默认的namespace。

8、action配置

result默认的name为success.

action中的方法通配符

例子:

<action name="*curd" class="" method="{1}"></action>

editcurd action 将调用edit方法,

deletecurd action将调用delete方法。

默认的action

当没有指定action的class属性的时候,默认使用com.opensymphiony.xwork.ActionSupport。

ActionSupport下有2个方法,input 和 execute,每个方法都是简单的返回success。

当请求的action不存在的时候,struts2会返回404错误页面,但我们也可以定义自己的默认页面,使用如下方法:

<package name="hello" extends="action-default">

<default-action-ref name="Under">

<action name="Under">

<result>/error.jsp</result>

</action>

<action name="*">

<result>/{1}.jsp</result>

</action>//每个action将会被映射到以自己名字 命名的 jsp上。

</package>