Struts2 属性驱动、模型驱动、异常机制
模型驱动使用单独的VO(值对象)来封装请求参数和处理结果,属性驱动则使用Action实例来封装请求参数和处理结果。
一、使用模型驱动
1、login.action采用模型驱动模式实现,采用模型驱动时必须提供对应的模型,该模型就是一个普通的javabean。
UserBean.java
1: package cc.openhome;2: public class UserBean {3: private String username;4: private String password;5: private String tip;//封装处理结果的tip属性6: public String getUsername() {7: return this.username;8: }9: public void setUsername(String username) {10: this.username = username;11: }12: public String getPassword() {13: return this.password;14: }15: public void setPassword(String password) {16: this.password = password;17: }18: public String getTip() {19: return tip;20: }21: public void setTip(String tip) {22: this.tip = tip;23: }24: }
2、对于采用模型驱动的Action而言,该Action必须实现ModelDriven接口。
LoginAction.java
1: package cc.openhome;2:3: import com.opensymphony.xwork2.Action;4: import com.opensymphony.xwork2.ModelDriven;5: public class LoginAction implements Action,ModelDriven<UserBean>{6: private UserBean model;7:8: public UserBean getModel() {9: return model;10: }11: public void setModel(UserBean model) {12: this.model = model;13: }14:15: //处理用户请求的execute方法16: public String execute() throws Exception{17: if(getModel().getUsername().equals("nihao") &&18: getModel().getPassword().equals("nihao")){19: getModel().setTip("哈哈,服务器提示");20: return SUCCESS;21: }22: else{23: System.out.println("转换失败、、");24: return ERROR;25: }26: }27: }28:
3、登录页面login.jsp
1: <%@ page language="java" contentType="text/html; charset=UTF-8"2: pageEncoding="UTF-8"%>3: <%@ taglib prefix="s" uri="/struts-tags" %>4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">5: <html>6: <head>7: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">8: <title><s:text name="login.title" /></title>9: </head>10: <body>11: <s:form action="login" align="center">12: <s:textfield name="username" key="user"/>13: <s:password name="password" key="pass"/>14: <s:submit value="登录" key="login"/>15: </s:form>16: </body>17: </html>
3、success.jsp
1: <%@ page language="java" contentType="text/html; charset=UTF-8"2: pageEncoding="UTF-8"%>3: <%@ taglib prefix="s" uri="/struts-tags"%>4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">5: <html>6: <head>7: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">8: <title>成功界面</title>9: </head>10: <body>11: <s:property value="model.tip"/>12: </body>13: </html>
二、异常处理
MVC框架异常处理的流程:
1、LoginAction.java
1: package cc.openhome;2:3: import java.sql.SQLException;4: import com.opensymphony.xwork2.Action;5: import com.opensymphony.xwork2.ActionContext;6: import com.opensymphony.xwork2.ActionSupport;7:8: public class LoginAction extends ActionSupport implements Action {9: private String username;10: private String password;11: public String getUsername() {12: return username;13: }14: public void setUsername(String username) {15: this.username = username;16: }17: public String getPassword() {18: return password;19: }20: public void setPassword(String password) {21: this.password = password;22: }23:24: public String execute() throws Exception {25: // TODO Auto-generated method stub26: ActionContext ctx=ActionContext.getContext();27: if(getUsername().equalsIgnoreCase("root")){28: throw new MyException("自定义异常");29: }30: if(getUsername().equalsIgnoreCase("sql")){31: throw new SQLException("用户名不能为sql");32: }33:34: if(getUsername().equals("nihao") && getPassword().equals("nihao")){35: ctx.getSession().put("user", getUsername());36: //ctx.put("tip", getText("succTip",new String[]{username}));37: return SUCCESS;38: }else{39: return ERROR;40: }41: }42: }
2、MyException.java
1: package cc.openhome;2:3: public class MyException extends Exception {4: public MyException (String eString){5: super(eString);6: }7: }8:
3、登录页面login.jsp
1: <%@ page language="java" contentType="text/html; charset=UTF-8"2: pageEncoding="UTF-8"%>3: <%@ taglib prefix="s" uri="/struts-tags" %>4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">5: <html>6: <head>7: <title><s:text name="login.title" /></title>8: </head>9: <body>10: <s:form action="login" align="center">11: <s:textfield name="username" key="user"/>12: <s:password name="password" key="pass"/>13: <s:submit value="登录" key="login"/>14: </s:form>15: </body>16: </html>
4、struts.xml配置如下:
1: <?xml version="1.0" encoding="UTF-8" ?>2: <!DOCTYPE struts PUBLIC3: "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"4: "http://struts.apache.org/dtds/struts-2.3.dtd">5: <struts>6: <global-results>7: <result name="sql">/exception.jsp</result>8: <result name="root">/exception.jsp</result>9: </global-results>10: <global-exception-mappings>11: <exception-mapping exception="SQLException" result="sql"/>12: <exception-mapping exception="Exception" result="root"/>13: </global-exception-mappings>14: <action name="login" class="cc.openhome.LoginAction">15: <result name="success">/success.jsp</result>16: <result name="error">/error.jsp</result>17: <result name="input">/denglu.jsp</result>18: </action>19: </struts>
5、exception.jsp(输出异常界面)
1: <%@ page language="java" contentType="text/html; charset=UTF-8"2: pageEncoding="UTF-8"%>3: <%@ taglib prefix="s" uri="/struts-tags"%>4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">5: <html>6: <head>7: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">8: <title>异常界面</title>9: </head>10: <body>11: 出现的问题是:<s:property value="exception.message"/><br>12: <s:property value="exception"/>13: <!--<s:property value="exception"/>-->14: </body>15: </html>
6、运行结果
输出异常信息有两种方式:
<s:property value=”exception” />输出异常对象本身
<s:property value=”exceptionStack” />输出异常堆栈信息


Struts2 属性驱动、模型驱动、异常机制的更多相关文章
- 深入 Struts2 的配置 - 处理多个请求-处理请求结果-模型驱动-异常机制
转:http://www.java3z.com/cwbwebhome/article/article2/2938.html?id=1631 本部分主要介绍struts.xml的常用配置. 1.1. ...
- Struts2属性驱动与模型驱动
为什么要使用属性驱动和模型驱动 struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和HttpServletResponse方法在获 ...
- struts2属性驱动模型
属性驱动模型的作用: 因为struts2与servlet API 实现了解耦,无法直接使用HttpServlet Request对象获取表单提交的参数,但Struts2提供了属性驱动模型机制来解决这个 ...
- 2015年传智播客JavaEE 第168期就业班视频教程16-框架结构测试(加载全spring配置文件)+struts2属性驱动测试
模块的规范化我们已经做完了,下面我们要做我们的功能了. 如果是模型驱动就是name="对应model的name" 如果用属性驱动的话,必须得把表现层(Action类)里面映射的用于 ...
- Struts2的属性驱动与模型驱动的区别
1.Struts2的属性驱动. Struts2的属性驱动指的是在action中JSP页面的每一个form中的name都对应在action中有一个属性与之对应.看下面代码片段: <form act ...
- struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式
1.属性驱动 a\ 一般的set public class UserAction extends ActionSupport { private String username; private S ...
- Struts2中属性驱动与模型驱动
属性驱动: 1.概念 能够利用属性驱动获取页面表单元素的内容 2.步骤 1.在action中声明属性,属性的名称和页面元素中name属性的值保持一致 2.action中的属性必须有set和get方法 ...
- Struts2(二)— Result结果配置、Servlet的API的访问、模型驱动、属性驱动
一.Result结果配置 1.全局和局部结果 平常我们设置跳转页面,是在action标签里面加上 result标签来控制,这种设置的页面跳转,称之为局部结果页面但是我们有时候在很多个action里 ...
- (九)Struts2模型驱动和属性驱动
出于结构清晰的考虑,应该采用单独的Model实例来封装请求参数和处理结果,这就是所谓的模型驱动, 所谓模型驱动,就是使用单独的JavaBean来贯穿整个MVC流程. 所谓属性驱动,就是使用属性来作为贯 ...
随机推荐
- (转)多个MapReduce作业相互依赖时,使用JobControl进行管理
原文地址:http://mntms.iteye.com/blog/2086990 要处理复杂关系的数据,一个工程里面绝对不止一个MapReduce作业,当有多个MapReduce作业时, ...
- HDU 1882 Strange Billboard(状态压缩+转置优化)
状态压缩,我们枚举第一行的所有状态,然后根据第一行去转变下面的行,枚举或者深搜直到最后最后一行,可以判断是不是所有的1都可以全部转换为0,记录所有的解,输出最小的一个就可以. 这里有一个很重要的优化, ...
- USACO Section 1.2 Dual Palindromes 解题报告
题目 题目描述 有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是回文数. 编一个程序,从文件读入两个十进制数N.S.然后找出前 N 个满足大于 S 且在两种以 ...
- mysql distinct、group_concat
mysql distinct语句用于查询多条不重复记录值(去重.过滤多余的重复记录) distinct同时作用了两个字段或者两个以上的字段,必须得作用了的字段都相同的才被排除.如果想让单个列" ...
- mknod用法以及主次设备号【转】
转自:http://www.cnblogs.com/hnrainll/archive/2011/06/10/2077583.html mknod 用途 创建特殊文件. mknod Name { b | ...
- 树列复选框Extjs
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- JAVA基础-多态
多态 polymophism: 动态绑定, 迟绑定, 指在执行期间(java), 而不是编译期间(javac), 判断所引用对象的实际类型, 根据实际类型调用响应的方法. 3个条件: 1. 继承 2. ...
- PHP学习笔记--1,不总结,不掌握,不明白!
不总结,不掌握,不明白! 前言: 学php一开始就是语法,变量,数组,函数,OOP(面向对象[封装,继承,多态,抽象]) 这些都是最基础的东西,但你还要懂一些在实际开发中要用的东西,比如基本的HTML ...
- acm--统计错误数
题目描述 题目地址:http://www.nowcoder.com/practice/67df1d7889cf4c529576383c2e647c48?tpId=49&tqId=29276&a ...
- Windows Azure Table Storage 解决 Guid 查询问题
在使用 Windows Azure Table Storage 的 CloudTableClient 对Azure 进行数据查询时,会发现在自定义类的Guid类型始终无法去成功查询出数据,对比发现 G ...