目录
- 目录
- 简介
- Struts2中的Action
- Action类的配置
- webxml中Struts2的过滤器
- Struts2的核心配置文件
- 标签package
- 标签action
- 标签result
- 分模块开发
- Struts2常量配置
- Action的编写方式
- 修改访问Action时执行的方法
简介
- Struts2框架应用于JavaEE三层结构中Web层的框架;
- Struts2框架在Structs1和WebWork基础之上发展的全新的框架;
- Web层常见框架:(1)struts2;(2)Spring MVC。
Struts2中的Action
Action类的配置
配置action类访问路径的步骤如下:
(1)创建struts2核心配置文件
- 核心配置文件的名称和位置是固定的,位置必须在src下面,名称为struts.xml
(2)为struts.xml引入dtd约束
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
(3)在struts.xml中进行action配置
<struts>
<package name="hellodemo" extends="struts-default" namespace="/">
<action name="hello" class="com.wm103.action.HelloAction">
<result name="ok">/hello.jsp</result>
</action>
</package>
</struts>
(4)在web.xml中配置struts2的过滤器
<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>
(5)访问地址:http://localhost:8080/Web应用的名称/hello.action
或者 http://localhost:8080/Web应用的名称/hello
web.xml中Struts2的过滤器
在web.xml中配置的Struts2过滤器在服务器启动时候创建,创建过滤器时执行init方法。在init方法中主要加载配置文件,包含自己创建的配置文件和Struts2自带的配置文件。
注:过滤器在我们启动服务器时创建,而Servlet默认在第一次访问时创建。
Struts2的核心配置文件
Struts2的核心配置文件固定放置在Web应用src目录下,名称为struts.xml。在配置文件中主要有3个标签以及其属性,分别为 package、action、result标签。
标签package
类似于代码中的包,用于区分不同的action。要配置action,必须首先写package标签,在package标签内才能配置action标签。
标签package的属性
(1)name属性
name属性值跟功能本身并没有什么关系。同时,在一个配置文件中,我们可以写多个package标签,但是package标签的属性name值不能相同。
(2)extends属性
extends属性的属性值是固定的,如:extends=”struts-default”。
配置了extends属性后,在package里面配置的类就具有了action的功能。
(3)namespace属性
namespace属性的默认值为“/”。namespace属性值同action标签中的name属性值构成访问路径。如:
<package name="hellodemo" extends="struts-default" namespace="/web">
<action name="hello" class="com.wm103.action.HelloAction">
<result name="ok">/hello.jsp</result>
</action>
</package>
则访问:http://localhost:8080/Web应用名称/web/hello
。
标签action
action标签配置action的访问路径。
标签action的属性
(1)name属性
namespace属性的默认值为“/”。namespace属性值同action标签中的name属性值构成访问路径。
在package标签里面可以写多个action标签,但是action的name属性值不能相同。
(2)class属性
配置action的全路径。
(3)method属性
在action里面默认执行execute方法,可以通过method属性配置其他方法执行。
标签result
根据action的方法(默认为execute方法)的返回值,配置到不同的路径里面。
标签result的属性
(1)name属性
和方法返回值一样,如:
<result name="ok">/hello.jsp</result>
(2)type属性
配置如何到路径中去(转发或重定向),type属性默认值是转发的操作。详情请看:result标签的type属性。
分模块开发
单独写配置文件,并把配置文件引入到核心配置文件struts.xml,如:
<include file="com/wm103/action/hello.xml"></include>
如果直接在src目录下,则
<include file="hello.xml"></include>
Struts2常量配置
Struts2默认的常量存放位置在项目struts2 jar包中的org.apache.struts2
下的default.properties
中。
修改Struts2默认常量值
(1)常用的方式
- 在struts.xml中进行配置,如:
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
(2)在src下面创建struts.properties
,进行修改。
(3)在web.xml中通过<init-param>
元素配置常量。
常用常量
struts.i18n.encoding=UTF-8
(1)表单提交数据到action中,在action中可以获取表单提交的数据。
(2)表单提交的数据中有中文,乱码问题的解决:
- post提交,直接设置编码;
- get提交,做编码转换。
参考:http://blog.csdn.net/qq_15096707/article/details/70953444#request接收中文数据乱码问题
(3)如果在action获取表单通过post方式提交的中文数据,那么中文乱码问题就已经被解决,不需要我们自己处理。
Action的编写方式
Action的编写有3中方式:
1. 创建简单类,不实现任何接口,也不继承任何类;
public class HelloAction {
public String execute() {
return "ok";
}
}
2. 创建一个实现Action接口的类;
import com.opensymphony.xwork2.Action;
/**
* Created by DreamBoy on 2017/5/16.
* 实现接口
*/
public class UserAction implements Action {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
3. 创建一个继承ActionSupport类的类。(最常用的方式)
import com.opensymphony.xwork2.ActionSupport;
/**
* Created by DreamBoy on 2017/5/16.
* 继承类
*/
public class PersonAction extends ActionSupport {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
修改访问Action时执行的方法
有3种实现的方式:
1. 修改struts.xml配置文件中action标签的method属性,该属性的值设置为访问Action时执行的方法名。
2. 使用通配符实现(重点)
设置action标签name属性的值包含符号“*
”。*
表示匹配任意内容。如:
struts.xml中配置:
<package name="demo" extends="struts-default" namespace="/">
<action name="book_*" class="com.wm103.action.BookActon" method="{1}"></action>
</package>
这样配置后,表示访问URL路径 /book_add 时,将会调用BookAction中的add方法执行;访问URL路径 /book_update 时,则会调用BookAction中update方法执行,以此类推。因为 *
号表示匹配任意字符。其中 {1}
则表示第一个匹配到*
号的内容,如 book_add
则匹配 book_*
,那么{1}
的值为add。
注:book_
并不匹配 book_*
。
3. 动态访问实现(一般不使用)
注:1. 访问Action时执行的方法(默认为execute方法),有返回值,那么返回值类型必须为String类型。2. 该方法也可以没有返回值,在没有返回值的时候,在struts.xml中result标签不需要配置。并将方法的返回值设置为void或者让返回值,返回“none”字符串(一般我们返回“none”)。
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
public String execute() {
return NONE;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)