1.1.1.1 配置Struts2的前端控制器(核心过滤器)
在工程的web.xml中配置:
<!-- 配置Struts2的核心过滤器 -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
1.1.1 Struts.xml 配置文件 ( 设置开发者模 )
开启开发者模式
<constant name="struts.devMode" value="true"></constant>
1.1.2 Struts2的配置文件之 ( 指定URL后缀 拦截 ):
顺序 | 配置文件名 | 所在位置 | 说明 |
1 | default.properties | struts2-core-2.3.15.3.jar\org\apache\struts2 | 不能修改 |
2 | struts-default.xml | struts2-core-2.3.15.3.jar | 不能修改 |
3 | strtuts-plugin.xml | 在struts2提供的插件jar包中 | 不能修改 |
4 | struts.xml | 我们的应用中 | 我们修改的:推荐 |
5 | struts.properties | 我们的应用中 | 我们修改的 |
6 | web.xml | 我们的应用中 | 我们修改的,可以给过滤器配置参数 |
在struts.xml : 修改访问URL后缀 例如修改的后缀为 .do
涉及的标签:
<constant
name= "struts.action.extension" value="do">
</constant>
Struts.properties : 修改访问URL后缀
Struts.action.extension = do
Web.xml : 修改访问URL后缀
<init-param >
<param-name>struts.action.extension</param-name>
<param-value> do </param-value>
</init-param >
注意: 从上到下 后修改的配置文件, 会覆盖前面的文件,这由于加载顺序决定的
1.1.4 Struts.xml 配置文件 ( package 标签 )
作用: 把action的配置定义到用一个包里面,把配置文件按照面向对象的思想来管理。
属性:
name:指定包的名称。必须写。必须唯一。
extends:指定当前包的父包。子包自动具备父包定义的配置。这是面向对象思想的一种体现。我们自己配置文件中的包,一般都会继承struts-default这个 包。
如果不继承该包,则不能使用struts2的核心功能。struts-default包在struts-default.xml中定义着。该文件是struts2核心jar包中的配置文件。
abstract:把当前包声明为抽象包。抽象包一般都是用来被继承的。抽象包中可以定义写公共的配置。
只有没有action标签的包,才能声明为抽象包。
namespace:指定当前包的名称空间。把访问URL按照模块化来管理。当我们使用了名称空间之后,访问URL就变成了:
URL = 名称空间 + action标签name属性的取值
例如:URL= /user/hello
名称空间的写法:
必须是以:/开头,后面只能跟字母和数字的组合。但是必须以字母开头
名称空间有默认值:
默认值是:"" 不写默认就是空字符串 ,一般不写
<struts>
<package name ="p1" extends="struts-default" namespace="/n1">
<action name="hello" class="com.itheima.web.action.HelloAction" method="sayHello">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
</package>
<struts>
action标签:
作用:动作名称和动作类已经动作方法的对应关系。
属性:
name:指定的是动作名称。必须唯一。 默认的动作类是:com.opensymphony.xwork2.ActionSupport 是在struts-default.xml中定义的
( 也就是说不写默认就是这个)
class: 指定的是动作类的全限定类名。
method:指定的是动作方法名称。 动作类中的方法名称。默认是public String execute(){} ( 也就是说不写默认就是这个)
要求:
1.public的
2.返回值必须是String
3.没有参数
创建动作类的三种方式:
第一种方式:
1.无侵入式创建动作类。
例如:HelloAction
实际开发中不常用。
第二种方式:
2.实现接口的方式。实现Action接口。
例如:Hello2Action
Action接口中的常量:
SUCCESS:一般多用于成功。
ERROR:一般多用于动作方法执行时产生异常,前往错误页面
NONE:不返回任何结果视图时用此值。它也等同于return null;
INPUT:一般多用于数据回显。例如表单提交时,当有数据类型转换失败后,都会前往input视图。
LOGIN:一般多用于前往登录页面
默认动作方法:
execute();当执行此方法时,可以不指定method属性。
实际开发中不常用
第三种方式:
3.继承接口的实现类方式。继承ActionSupport
例如:Hello3Action
默认动作类:
ActionSupport
实际开发中采用的方式。以后我们的动作类都要求继承该类。 实际开发中采用的方式。以后我们的动作类都要求继承该类。
1.无侵入式的创建方式
public class HelloAction {
//我们的第一个动作方法:它的作用就是用于接收客户浏览器的请求,并响应
public String sayHello(){
System.out.println("HelloAction中的sayHello方法执行了"+this);
return "success";
}
}
2实现Action接口
Public class Hello2Action implements Action {
@Override
public String execute() throws Exception {
System.out.println("Hello2Action的execute方法执行了123abc。。。。。");
return SUCCESS;
}
}
3.继承接口的实现类方式。继承ActionSupport
public class Hello3Action extends ActionSupport {
public String execute() throws Exception {
System.out.println("Hello3Action的execute方法执行了aaaaa。。。。。");
return SUCCESS;
}
}
result标签:
作用:配置逻辑结果视图。
逻辑结果视图:它指的不是一个真正的jsp页面,而指的是当动作方法返回值和result标签name属性取值一致时,前往指定的页面。
属性:
name:指定的就是和动作方法返回值一样时,前往哪个页面。要求和动作方法返回值保持一致。
type:指定采用何种方式前往该页面
常用取值:
dispatcher:请求转发。默认值。
redirect:重定向。一般多用于重定向到指定的jsp,不用于重定向到另外的动作
转发和重定向的区别:
转发:服务器行为,一次请求,地址栏不变,请求域中数据不会丢失
重定向:浏览器行为,两次请求,地址栏改变,请求域中的数据会丢失。
redirectAction:重定向到指定的动作名称。
标签体中的内容:
指定前往哪个页面。
如下所示:
<package name="p1" extends="struts-default">
<action name="hello" class="com.itheima.web.action.HelloAction" method="sayHello">
<result name="success" > mydefault </result>
</action>
<action name="mydefault" >
<result name="success" type="redirect"></result>
</action>
</package>