struts2的配置
Posted java学习过程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2的配置相关的知识,希望对你有一定的参考价值。
查看Struts2的源代码:
过滤器(filter)是在服务器启动时就创建,创建过滤器时执行init ( ) 方法,在init方法中加载配置文件(自己创建的配置文件和Struts2自带的配置文件),struts.xml、web.xml。
1.名称和位置固定
2.配置文件中三个重要的标签:
package、action、result和里面的属性。
Package标签:类似于代码的包,主要用于区分不同的action。要配置action,必须要写package标签,在package里面才能写action。
Package标签属性:
(1) name:name属性与功能没有关系,一个<struts></struts>中可以包含多个package,但是package中的name属性值不能相同。
(2) extends: extends="struts-default"(表示写了这个属性,在package里面配置的类有了action的功能。)
(3) namespace:namespace的属性值和action标签里面的name属性值构成访问路径,namespace可以省略。Eg:namespace="/"
<package name="p2" extends="struts-default" namespace="/">
<action name="hello" class="com.limuzi.struts2.HelloAction" method="execute">
浏览器访问路径:/hello
action:
(1) action标签配置action路径
(2) action的属性
Name:
name属性:
namespace属性值和action标签里面的name属性值构成访问路径。Package里面写多个action标签,但是action和name的属性值不能相同。
class属性:action的全路径。
method属性:比如在action里面默认执行的execute方法,但是action里面想要执行别的方法就需要method进行配置。
result:根据action方法的返回值配置到不同的路径里面。
Result标签属性:
name属性:与方法返回值相同。<result name="ok">/index.jsp</result>
type属性:配置如何到路径中去。Type属性默认进行转发。
3.修改Struts2默认的常量
在Struts.xml中配置,name="struts.i18n.encoding" value="utf-8"></constant>
最常用的常量:
表单提交数据到action,在action里面获取表单数据。
表单提交数据的乱码问题,post提交直接设置编码,get提交做编码转换;如果在action获取表单通过post提交中文,可以解决乱码问题。
4.分模块开发
单独写配置文件,将配置文件引入到核心的配置文件中。<include file="被引入的文件路径"></include>
5.action的编写方式
(1) 创建普通类,这个类不继承任何类,不实现任何接口。
public class HelloAction
(2) 创建类实现接口action。
import com.opensymphony.xwork2.Action;
public class UserAction implements Action{
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
(3) 创建类,继承ActionSupport类。
public class AnimalAction extends ActionSupport{
@Override
public String execute() throws Exception {
return super.execute();
}
}
6.访问action的方法:
(1) 使用action标签的method属性,属性里面写执行action的方法。
(2) 使用通配符方式。
(3) 动态访问来实现。
注:如果action中有返回值,在配置文件中没有配置,会出现404错误;在action的方法里面有返回值,如果有返回值,返回值类型必须是String;action的方法中可以没有返回值,没有返回值的时候,在result标签中不需要配置,把方法写成void,让返回值返回none。
public String execute() {
return NONE;
}
7.使用action标签的method属性进行:
(1) 创建action,再在action中创建多个方法
Eg:使用method进行配置
package com.limuzi.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class BookAction extends ActionSupport {
public String add(){
System.out.println("add……");
return NONE;
}
public String update(){
System.out.println("update……");
return NONE;
}
}
struts.xml
<?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>
<package name="methoddemo" extends="struts-default" namespace="/">
<action name="addAction" class="com.limuzi.struts2.BookAction" method="add"></action>
<action name="updateAction" class="com.limuzi.struts2.BookAction" method="update"></action>
</package>
</struts>
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>struts2exerise</display-name>
<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>
</web-app>
浏览器访问http://localhost:8080/struts2exerise/updateAction,控制台输出update……
8.使用通配符实现
(1)action标签里面的name属性,name的值中加了*号(匹配任意内容)。
Eg:
<action name="book_*" class="com.limuzi.struts2.BookAction" method="{1}"></action>
9.结果页面的配置
(1)result的标签配置action的返回值到不同的路径中去。
如果多个action,方法里面的返回值相同,到的页面也是相同的,这时候可以使用全局页面配置。
普通配置:
<struts>
<package name="demo1" extends="struts-default" namespace="/">
<action name="book" class="com.limuzi.action.BookAction">
<result name="success">/index.jsp</result>
</action>
<action name="order" class="com.limuzi.action.OrderAction">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
全局配置:
<global-results>
<result name="success">/index.jsp</result>
</global-results>
(2)既配置了全局页面又配置了局部页面,最终以局部为主。
(3)result标签的type属性
Result标签中除了name属性还包括了type属性,type表示的是以何种方式到路径中去。
Type的属性值:
Eg:<result name="success" type="dispatcher">/jsp名/result>
Eg:<result name="success" type="redirect">/jsp名/result>
配置到其他action
(3)chain:转发到action
Eg:<result name="success" type="chain">action的访问名称(也就是浏览器输的)/result>
(4)redirectAction:重定向到action
Eg:<result name="success" type="redirectAction">action的访问名称(也就是浏览器输的)/result>
以上是关于struts2的配置的主要内容,如果未能解决你的问题,请参考以下文章
struts2 之 struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程