struct2复习、梳理
作者:互联网
构建
1、Maven
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.2</version>
</dependency>
Web.xml
<filter>
<filter-name>Struts2</fileter-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>
2配置文件
<package name="user" extends="struts-default">
<action name="login" class="com.loginAction" method="login">
<result name="ERROR">error.jsp</result>
<result name="SUCCESS">result.jsp</result>
</action>
<action name="test" class="com.StorageAction" method="storage">
<result name="storage">/index.jsp</result>
</action>
<action name="{前台名称} " class="类地址 " method="方法名(可默认) ">
<result name="{后台返回字符串} ">/{页面}</result>
</action>
</package>
3类
继承
extends ActionSupport
返回字符串
**********************************************************
--其他
在struts2值栈中存储数据的三种方式
1用值栈对象中的set方法
public String execute() throws Exception {
//1 获取值栈对象
ActionContext context = ActionContext.getContext();
ValueStack stack = context.getValueStack();
//2 调用值栈对象中的set方法
stack.set("demo", "DemoData");
return "success";
}
2用值栈对象中的push方法
public
String
execute()
throws
Exception
{
//1 获取值栈对象
ActionContext
context
=ActionContext.getContext();
ValueStack
stack
=context
.getValueStack();
//2 调用值栈对象中的push方法
stack
.push("abcd");
return
"success";
}
3在action中定义变量(或对象),使用相应的get方法
//1. 声明变量
public
String
name
;
//2. 生成变量的get方法
public
String
getName(){
return
name
;
}
//3. 在执行方法中为变量赋值
public
String
execute()
throws
Exception
{
name
="DemoData";
return
"success";
}
补充:list集合的示例
// 1. 定义list变量
private
List<
User
>list
=
new
ArrayList<
User
>();
// 2. 生成get方法
public
List<
User
>getList()
{
return
list;
}
public
String
execute()throws Exception
{
//3 向list中设置值
User user1
=new
User();
user1
.setUsername("小奥");
user1
.setPassword("123");
user1
.setAddress("美国");
User user2
=new
User();
user2
.setUsername("小王");
user2
.setPassword("250");
user2
.setAddress("越南");
list.add(
user1
);
list.add(
user2
);
return
"success";
}
整体总结
一、 概述
Struts2轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。
二、 Action
action属性 :
动态方法调用:
<package name="user" namespace="/user" extends="struts-default">
<action name="userAction" class="action.UserAction">
<result name="success">/list.jsp</result>
<result name="update">/update.jsp</result>
<result name="add">/add.jsp</result>
</action>
<!-- <action name="add" class="action.UserAction" method="add">
<result>/add.jsp</result>
</action>
<action name="delete" class="action.UserAction" method="delete">
<result>/delete.jsp</result>
</action>
<action name="update" class="action.UserAction" method="update">
<result>/update.jsp</result>
</action> -->
</package>
默认action配置:
默认的action是在访问一个不存在的action的时候访问的action,配置默认action,只需要在package中添加如下配置:
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="hello"/>
<!-- HelloWorld演示程序 -->
<action name="hello" class="example.HelloWorld">
<result>/index.jsp</result>
</action>
</package>
通配符映射:
使用通配符映射的方式可以大大减少action的数量,所谓通配符就是使用*,用于匹配0个或多个字符。在action的配置中,可以为name属性使用*来匹配任意的字符。比如下面的配置:
<action name="edit*" class="action.Edit{1}Action">
<result>/{1}.jsp</result>
</action>
{1}会被name属性中的*的内容填充,比如在浏览器中访问/editUser,会映射到action.EditUserAction类,返回到User.jsp页面中。其中的{1}实际上就是作为占位符的,大括号的值可以是0-9,其中{0}代表整个请求URL。比如下面的配置:
<action name="*_*" class="action.{1}Action" method="{2}">
<result>/{1}_{2}.jsp</result>
</action>
三、 拦截器
(1)创建拦截器组件(创建一个类,实现Interceptor接口,并实现intercept方法;也可以继承MethodFilterInterceptor,这种方式可以使action中某个方法不进行拦截)
public String intercept(ActionInvocation invocation){
//拦截器--前部分处理
invocation.invoke();
//拦截器--后续处理
}
(2)注册拦截器
<package>
<interceptors>
<interceptor name="别名" class="实现类"/>
<!--其他拦截器-->
</interceptors>
</package>
(3)引用拦截器(哪个Action希望被拦截器扩展,需要在此action配置下,引用拦截器)
<action>
<!--手动的使用一次系统默认的拦截器-->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="拦截器别名"/>
<!--可以写多个-->
<!--可以使用excludeMethods参数属性,设置不过滤的方法-->
</action>
拦截器栈
<interceptor-stack name="myStack">
<interceptor-ref name="拦截器别名1"/>
<interceptor-ref name="拦截器别名2"/>
</interceptor-stack>
GF ✡ 2020/5/3
标签:拦截器,复习,list,public,jsp,action,struct2,梳理,String 来源: https://www.cnblogs.com/gwf2020/p/12823401.html