Struts2(三)
以下内容是基于导入struts2-2.3.32.jar包来讲的
1.全局视图配置
xml标签:
<global-results>
<result name="error">/error.jsp</result>
</global-results>
package com.ronng.web.action;
public class TwoAction {
public String show(){
return "error";
}
public String look(){
return "error";
}
}
<?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="com.rong.web.action" namespace="/" extends="struts-default">
<!-- 全局视图。当action标签里面不包含result标签时,就会寻找全局的global-results结果视图 -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<action name="error1" class="com.ronng.web.action.TwoAction" method="show">
</action>
<action name="error2" class="com.ronng.web.action.TwoAction" method="look">
</action>
</package> </struts>
访问路径:
http://localhost:8080/struts/error1
http://localhost:8080/struts/error2
返回的都是同一个error.jsp页面
2.全局的异常配置
package com.ronng.web.action;
public class TwoAction {
public String show() throws Exception{
//抛出异常,无法返回"error"字符串
int number=1/0;
return "error";
}
public String look()throws Exception{
return "error";
}
}
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="com.rong.web.action" namespace="/" extends="struts-default"> <!-- 全局视图。当action标签里面不包含result标签时,就会寻找全局的global-results结果视图 -->
<global-results>
<result name="error">/error.jsp</result>
<result name="exception">/exception.jsp</result>
</global-results>
<!-- 全局异常配置 。result对应全局视图的result的name-->
<global-exception-mappings>
<exception-mapping result="exception" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="error1" class="com.ronng.web.action.TwoAction" method="show">
</action>
<action name="error2" class="com.ronng.web.action.TwoAction" method="look">
</action>
</package> </struts>
以上的方法不能处理类似404的错误,若要处理404错误,则只需要修改web.xml配置文件
<error-page>标签配置
<?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>struts</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <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> <error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
</web-app>
3.最简单的action配置
<?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="com.rong.web.action" namespace="/" extends="struts-default">
<!-- 最简单的action
class 默认是struts-default.xml的
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
默认执行的method 是 execute
方法默认的返回值是什么 "success"
-->
<!-- 对于最简单的action也就是
没有配置class的action要执行的哪个action,
可以不使用默认的,重新配置 ,但是依然会使用默认的 execute方法-->
<default-class-ref class="com.ronng.web.action.OneAction"></default-class-ref>
<action name="simple">
<result>/index.jsp</result>
</action>
</package> </struts>
4.路径访问搜索顺序
<?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>
<!--
资源路径
http://localhost:8080/struts/search
http://localhost:8080/struts/aa/bb/cc/search
以上两种方式均可访问到同一页面
其中http://localhost:8080/struts是服务器以及项目信息
主要看这段:/aa/bb/cc/search
搜索顺序:没找到时继续往前找,由于search是action里面的name路径,所以最后才判断
先判断package,最后才判断action
namespace是/aa/bb/cc
namespace是/aa/bb
namespace是/aa
namespace是/
有这个/的命名空间了
那就在这个命名空间的action里找search
-->
<!-- namespace命名空间不写时,默认是斜杠"/" -->
<package name="com.rong.web.action" namespace="/" extends="struts-default">
<action name="search" class="com.ronng.web.action.OneAction">
<result>/index.jsp</result>
</action>
</package> </struts>
5.获取域对象以及ActionContext上下文
A.第一种方式(通过ServletActionContext获取)
package com.ronng.web.action; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.PageContext; import org.apache.struts2.ServletActionContext; /**
* 普通类获取域对象
* 通过ServletActionContext获取
* @author Rong
*
*/
public class TwoAction {
public String show() throws Exception{
//使用原生API,耦合度高,很少使用
PageContext pageContext = ServletActionContext.getPageContext();
//可通过pageContext获取其余域对象
// ServletRequest request = pageContext.getRequest();
// HttpSession session = pageContext.getSession();
// ServletContext application = pageContext.getServletContext();
HttpServletRequest request = ServletActionContext.getRequest();
//获取前台传过来的值
String parameter = request.getParameter("name");
System.out.println(parameter);
HttpSession session = request.getSession();
ServletContext application = ServletActionContext.getServletContext();
request.setAttribute("name", "rong");
session.setAttribute("name", "jie");
application.setAttribute("name", "long");
return "success";
}
}
<body>
通用的域: ${name }<br/>
request域:${requestScope.name }<br/>
session域:${sessionScope.name }<br/>
application域:${applicationScope.name }<br/>
</body>
<?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="com.rong.web.action" namespace="/" extends="struts-default">
<action name="search" class="com.ronng.web.action.TwoAction" method="show">
<result>/two.jsp</result>
</action>
</package>
</struts>

B.第二种方式(ActionContext上下文的get方式)
package com.ronng.web.action; import org.apache.struts2.dispatcher.ApplicationMap;
import org.apache.struts2.dispatcher.RequestMap;
import org.apache.struts2.dispatcher.SessionMap; import com.opensymphony.xwork2.ActionContext; /**
* 普通类获取域对象
* 通过ActionContext上下文get方式获取
* 松耦合
* @author Rong
*/
public class TwoAction {
public String show() throws Exception{
//获取ActionContext上下文。ActionContext在请求最开始的时候封装了所有数据。
ActionContext actionContext = ActionContext.getContext();
//通过get方法获取域对象。其中get里面的字符串是唯一指定的。
RequestMap requestMap = (RequestMap) actionContext.get("request");
SessionMap<String, Object> sessionMap = (SessionMap<String, Object>) actionContext.get("session");
ApplicationMap applicationMap = (ApplicationMap) actionContext.get("application");
requestMap.put("name", "rong");
sessionMap.put("name", "jie");
applicationMap.put("name", "long");
return "success";
}
}
C.第三种方式(ActionContext上下文的getXxx方式)
package com.ronng.web.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; /**
* 普通类获取域对象
* 通过ActionContext上下文getXxx方式获取
* 松耦合
* @author Rong
*/
public class TwoAction {
public String show() throws Exception{
//获取ActionContext上下文。ActionContext在请求最开始的时候封装了所有数据。
ActionContext actionContext = ActionContext.getContext();
Map<String, Object> request = actionContext.getContextMap();
Map<String, Object> session = actionContext.getSession();
Map<String, Object> application = actionContext.getApplication();
request.put("name", "rong");
session.put("name", "jie");
application.put("name", "long");
return "success";
}
}
D.第四种方式(实现XxxAware接口)
根据需要实现不同域的接口
package com.ronng.web.action; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; /**
* 实现接口方式获取域对象
* 松耦合
* @author Rong
* 这里列举了实现多种域接口,实际根据自己需要实现接口
*/
public class TwoAction implements RequestAware,SessionAware,ApplicationAware{
//需要自己去声明成员变量(域对象)
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> applicaton;
public String show() throws Exception{
request.put("name", "r");
session.put("name", "j");
applicaton.put("name", "l");
return "success";
}
//域对象赋值
@Override
public void setApplication(Map<String, Object> arg0) {
this.applicaton=arg0;
} @Override
public void setSession(Map<String, Object> arg0) {
this.session=arg0;
} @Override
public void setRequest(Map<String, Object> arg0) {
this.request=arg0;
}
}
Struts2(三)的更多相关文章
- Struts2(三)——数据在框架中的数据流转问题
一款软件,无在乎对数据的处理.而B/S软件,一般都是用户通过浏览器客户端输入数据,传递到服务器,服务器进行相关处理,然后返回到指定的页面,进行相关显示,完成相关功能.这篇博客重点简述一下Struts2 ...
- Struts2 (三)
1 Struts2的拦截器 Struts2拦截器在访问某个Action方法之前或之后实施拦截,拦截器是可插拔的,拦截器是AOP的一种实现. Struts2拦截器栈:将拦截器按一定顺序联结成一条链,在访 ...
- 框架学习之Struts2(三)---OGNL和值栈
一.OGNL概述 1.1OGNL是对象图导航语言(Object-Graph Navigation Languaged)的缩写,他是一种功能强大的表达式语言,通过简单一致的表达式语法,可以存取Java对 ...
- struts2(三) 输入校验和拦截器
前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器, --WH 一.输入校验 在以前我们写一个登录页面时,并 ...
- Struts2(三)配置详解
一.概述 Struts2提供了多种可选的配置文件形式. 其中,struts-default.xml和default.properties是框架级别的配置文件,这两个文件在Struts的核心JAR包中, ...
- Struts2 (三) — OGNL与值栈
一.OGNL表达式 1.概述 1.1什么是OGNL OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...
- Struts2(三):新建Struts2工程
下载的struts2xx-all.zip包对搭建项目的作用 一般情况下,我们下载一个Struts2的full包时,并不知道新建过程中需要哪些包,那么这时我们可以从下载的包中解压出的目录\apps\st ...
- Struts2 三、指定Struts2处理的请求后缀
Action的请求通常情况下默认为以.action结尾,例如:http://localhost:9000/Struts2/hello/helloAction_sayHello.action .a ...
- 浅谈Struts2(三)
一.Struts2收集client的参数 核心思路: <form method="post" action="XXXX"> <input ty ...
- 深入struts2(三)---工作机制和运行流程图
1 工作原理 1.1 体系架构 图2.1 struts2.0体系架构图 1.2 工作机制 针对上节体系架构图,以下分步说明运行流程 Ø client初始化一个指向Servle ...
随机推荐
- mysql-5.7.24 在centos7安装
搭建环境:mysql5.7.24 CentOS-7-x86_64-DVD-1804.iso 桌面版 1. 进入官网:https://dev.mysql.com/downloads/mysql/ 该 ...
- 电竞大数据平台 FunData 的系统架构演进
电竞大数据时代,数据对比赛的观赏性和专业性都起到了至关重要的作用.同样的,这也对电竞数据的丰富性与实时性提出了越来越高的要求. 电竞数据的丰富性从受众角度来看,可分为赛事.战队和玩家数据:从游戏角 ...
- 数构与算法 | 什么是大 O 表示算法时间复杂度
正文: 开篇我们先思考这么一个问题:一台老式的 CPU 的计算机运行 O(n) 的程序,和一台速度提高的新式 CPU 的计算机运 O(n2) 的程序.谁的程运行效率高呢? 答案是前者优于后者.为什么呢 ...
- 使用HtmlAgilityPack将HtmlTable填入DataTable
HtmlAgilityPack.HtmlWeb hw = new HtmlAgilityPack.HtmlWeb(); HtmlAgilityPack.HtmlDocument doc = hw.Lo ...
- 20155217 《Java程序设计》第三次实验报告
20155217 <Java程序设计>第三次实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...
- [BZOJ4444][SCOI2015]国旗计划-[ST表]
Description 传送门 Solution 说真的这道题在场上没做出来的我必定是脑子有洞.. 我们用st表记录以某个位置开始,派了1<<j个战士能到达的最远位置. 由于边境线是一圈, ...
- 【BZOJ4698】[SDOI2008]Sandy的卡片
[BZOJ4698][SDOI2008]Sandy的卡片 题面 flag倒了. bzoj 洛谷 题解 首先题目的区间加很丑对吧, 将每个串差分一下,就可以转化为 求: 给定\(N\)个串,求他们的最长 ...
- 【BZOJ4016】[FJOI2014]最短路径树问题
[BZOJ4016][FJOI2014]最短路径树问题 题面 bzoj 洛谷 题解 虽然调了蛮久,但是思路还是蛮简单的2333 把最短路径树构出来,然后点分治就好啦 ps:如果树构萎了,这组数据可以卡 ...
- 【NOIP2018】提高组题解
[NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕
- OpenStack入门篇(五)之KVM性能优化及IO缓存介绍
1.KVM的性能优化,介绍CPU,内存,IO性能优化 KVM CPU-->qemu进行模拟ring 3-->用户应用 (用户态,用户空间)ring 0-->操作系统 (内核态,内核空 ...