struts2-第一章-基础用法2
一,回顾
struts2框架搭建步骤
(1)创建maven项目
(2)web.xml配置struts2的核心过滤器(filter)
(3)pom.xml配置servlet,struts的依赖
(4)把自定义action类配置struts.xml中
action类中默认执行的方法:
execute(),若要修改默认方法:;struts.xml中action节点配置method,action中默认方法的返回值:
"success"若要修改的返回值:struts.xml中result节点name属性
表单数据的提交:
使用成员变量
注意:
(1) action类中成员变量名称必须和表单中元素name一样
(2) action类中成员变量必须有set和get方法,利用反射来访问成员变量
(3) action类中成员变量名称前两个字母必须小写开头
二,配置默认的action
当我们访问项目根路径,会显示index.jsp原因是我们在web.xml中配置了默认的欢迎页面
在struts2框架目录中,访问的路径不存在,抛404异常,此时我们可以使用默认action,当访问路径不存在时,可以显示一个友好的提示页面
1、新建DefaultAction
public class DefaultAction extends ActionSupport {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
2、配置struts.xml
<package name="default" namespace="/" extends="struts-default">
<!-- 配置默认action,当访问的路径不存在时,会执行此action -->
<default-action-ref name="defaultAction"></default-action-ref>
<action name="defaultAction" class="com.yujun.maven.action.DefaultAction">
<result>/default.jsp</result>
</action>
</package>
3、默认页面

三.package模块化
当项目比较庞大,通常是按照模块进行开发,比如用户模块,部门模块......,
如果我们吧所有的模块的action都配置在同一个package节点中,
显然不合适,此时我们可以按照模块进行划分,为每个模块配置一个单独的package节点
注意:
(1)多个package节点,节点的name属性必须唯一
(2)为了访问多个package中同名的action,我们应该为每一个package节点配置相应的namespace属性
以此作为模块化
namespace:
指定package中action所在的命名空间,取值哟三种:
(1)"": 默认值,表示当其他命名空间都不能匹配时,来次命名空间查询action
(2)"/":表示根路径
(3):"/xxx":项目根路径/xxx,访问此命名空间中的action时,需要加上/xxx作为前缀路径
比如:
<package name="p1" namespace="/user" extends="struts-default">
<action name="/demo1Action" class="com.liwenzheng.maven.action.Demo1Action">
<result>/demo.jsp</result>
</action>
</package>
四,struts.xml模块化
前面我们使用package作为模块化划分,还是会存在一些缺陷,比如模块很多,我们的配置都在同一个struts.xml文件中,那么此时配置文件就比较庞大,不利于管理和维护,此时使用include指令,把别的struts.xml配置包含在总配置文件中
比如有一个模块user,我们可以新建struts-user.xml配置,然后在strut.xml总配置文件中使用include包含
(1)struts-user.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> <!-- 访问此包中的所有action时,都需要在actionName前加上/user前缀 -->
<package name="p1" namespace="/user" extends="struts-default">
<action name="demo1Action" class="com.yujun.maven.action.Demo1Action">
<result>/demo1.jsp</result>
</action>
</package> </struts>
(2)struts.xml
<!-- 包含struts-user.xml文件 -->
<include file="struts-user.xml"></include>
五,常量配置
struts2框架中有两个比较重要的配置文件
一个struts.xml主要负责应用的action映射和物理资源之间的映射关系
另一个struts.properties,包含struts2框架的常量配置
我们可以在struts.xml中更改struts.properties中的默认属性配置

若要修改properties中默认配置,可以在struts.xml中使用下面方式更改
<!-- 常量配置 -->
<!-- 动态方法调用:true-开启,false-不开启 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- 是否开启调试模式:true-是,false-否 -->
<constant name="struts.devMode" value="true" />
六,异常配置
开发中,必不可少的就是异常处理,如果在struts2框架的每个action的每个方法中都进行异常处理,很繁琐:
此时我们可以使用异常配置,来减少代码量的开发
struts2中异常配置有两种:
(1) 全局异常:同一个package中所有的action有效
(2)局部异常:对某一个特定的action有效
例如,我们的方法中需要自己手动try-catch处理异常
public String chufa(){
try{
int a = 1 / 0;
return SUCCESS; //成功时的返回值
}catch(Exception e){
e.printStackTrace();
}
return INPUT; //发生异常时的返回值
}
然后在struts.xml中针对两种返回值进行页面跳转
<action name="demo2Action" class="com.yujun.maven.action.Demo2Action">
<result name="success">/demo2.jsp</result>
<result name="input">/error.jsp</result>
</action>
如果方法太多,这样就很繁琐,所以可以采用异常配置
1.全局异常
针对同一个package节点中的action生效
(1)action类
public String chufa2(){
int a = 1 / 0;
return SUCCESS;
}
(2)struts.xml
<package name="default" namespace="/" extends="struts-default">
<!-- 配置默认action,当访问的路径不存在时,会执行此action -->
<default-action-ref name="defaultAction"></default-action-ref>
<!-- 全局异常配置 -->
<!-- 全局异常的返回值和对应的页面 -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<!-- 全局异常的映射 -->
<global-exception-mappings>
<!-- 异常映射:result-发生异常类型的返回值 exception:异常类型,这里使用Excepiton来匹配所有的异常 -->
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="defaultAction" class="com.yujun.maven.action.DefaultAction">
<result>/default.jsp</result>
</action>
<action name="demo2Action" class="com.yujun.maven.action.Demo2Action">
<result name="success">/demo2.jsp</result>
<result name="input">/error.jsp</result>
</action>
</package>
(3)错误页面
<h3>
sorry,发生未知错误,返回首页
</h3>
若想在错误页面输出异常信息,可以使用struts提供的标签

2、局部异常
针对某个package中某个特定的action生效
<action name="demo2Action" class="com.yujun.maven.action.Demo2Action">
<result name="success">/demo2.jsp</result>
<result name="input">/error.jsp</result>
<!-- 局部异常配置 -->
<!-- 异常映射,result:发生异常类型的错误的返回值,exception:异常类型 -->
<exception-mapping result="input" exception="java.lang.Exception"></exception-mapping>
</action>
3、注意
当同时配置局部异常和全局异常,局部异常优先
struts2-第一章-基础用法2的更多相关文章
- struts2第一章-基本用法
一.struts简介 1.回顾 MVC M-model模型层 V-view 视图层 前端界面 C-controller 控制层 struts2: Apache提供的开源的控制层框架,相当于servl ...
- .net架构设计读书笔记--第一章 基础
第一章 基础 第一节 软件架构与软件架构师 简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...
- Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考
第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...
- Linux系统shell编程自学_第一章基础
第一章 基础shell的优势在于处理操作系统底层的业务,Python,php的优势在于开发运维工具,web界面的管理工具以及web业务开发.处理一键安装.优化.报警脚本shell又叫命令解释器,它能识 ...
- wpf(第一章 基础知识)
wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案 ...
- 《openssl编程》:第一章基础知识
第一章 基础知识 1.1 对称算法 对称算法使用一个密钥.给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同.解密时,使用读密钥与加密密钥相同. 对称算法主要有四种加密模式: (1) 电子密码 ...
- Python第一章-基础知识
第一章:基础知识 1.1 安装python. 直接官网下载最新的python然后默认安装就可以了,然后开始菜单里找到pyhton *.*.* Shell.exe运行python的交互shell ...
- 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划
今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...
- 《Python基础教程(第二版)》学习笔记 -> 第一章 基础知识
写笔记的原因:书也看了一遍,视频也看了,但总是感觉效果不好,一段时间忘记了,再看又觉得有心无力,都是PDF的书籍,打开了就没有心情了,上班一天了,回家看这些东西,真的没多大精力了,所以,我觉得还是把p ...
- TypeScript学习指南第一章--基础数据类型(Basic Types)
基础数据类型(Basic Types) 为了搭建应用程序,我们需要使用一些基础数据类型比如:numbers,strings,structures,boolean等等. 在TypeScript中除了Ja ...
随机推荐
- chrome常用扩展程序汇总(程序员版)
chrome常用扩展程序之程序员版 1.chrome扩展程序 Chrome插件是一个由Web技术开发.用来增强浏览器功能的小程序,其实就是一个由HTML.CSS.JS.图片等静态资源组成的一个.crx ...
- Python 练习——计算1-2+3-4...+99
# 求1-99的所有数的和 count = 1 s = 0 while count < 100: s += count count += 1 print(s) 当都为正数时,即1+2+3+... ...
- 仿照selalchemy实现简单的mongo查询
首先这是一个很奇葩的需求,时间紧迫顺手胡写了一个,以后看看有没有好的思路 def and_(item_list): return "%s:[%s]" % ("$and&q ...
- Outlook 2013 日历/任务本地备份与还原
1.日历: 备份日历:切换到日历项,按如下步骤备份.文件 --> 保存日历 --> 其它选项: 日期范围:指定日期(开始日期:2018/1/1,结束日期:2018/12/31) 详细信息: ...
- 函数内部还是不要使用 strtok()
今天在调试程序的时候,遇到一个奇怪的事情,一开始担心是代码存在内存溢出引起的,花了半个小时没找到原因. 在吃饭的时候,突然想起可能是 strtok() 引起的,查找调用的函数,果然发现在函数中使用了 ...
- python __call__或者说func()()的理解
__call__ 对象后面加括号,触发执行. 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()() ...
- 最大似然估计与期望最大化(EM)算法
一.最大似然估计与最大后验概率 1.概率与统计 概率与统计是两个不同的概念. 概率是指:模型参数已知,X未知,p(x1) ... p(xn) 都是对应的xi的概率 统计是指:模型参数未知,X已知,根据 ...
- 原型模式-Prototype(Java实现)
原型模式-Prototype 通过复制(克隆.拷贝)一个指定类型的对象来创建更多同类型的对象. 就像去蛋糕店买蛋糕一样. 柜台里的蛋糕都是非卖品. 只是为顾客提供一种参照. 当顾客看上某一个样式的蛋糕 ...
- RPC-dubbo基本使用
22.本地存根 消费者通过创建实现一个服务接口的实例,可以在执行远程调用前拿到远程调用的代理实例,进而可以在远程调用前.后添加一些操作,在出现异常后进行一些容错处理. 这个使用场景,可以调用前作数 ...
- 第一节. .Net Core环境的安装和常用指令
一. 环境介绍和安装 1. 环境介绍 .Net FrameWork框架:BCL(基础类库 system.dll).CLR(运行时 仅支持:Windows).FCL(一些框架,比如:MVC.WPF) . ...