zoukankan      html  css  js  c++  java
  • 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框架异常处理的流程:

    2016-12-04_16-57-05     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 stub
    
     26:     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 PUBLIC
    
      3:   "-//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” />输出异常堆栈信息

                                                       2016-12-04_17-19-04        2016-12-04_17-09-53

    2016-12-04_17-18-15

  • 相关阅读:
    The Tamworth Two chapter 2.4
    USACO Controlling Companies chapter 2.3 已跪
    非递归快排
    链表二路归并
    Money Systems chapter 2.3 dp
    #pragma pack与sizeof union
    快慢指针
    12
    11
    10
  • 原文地址:https://www.cnblogs.com/liuzhongfeng/p/6131263.html
Copyright © 2011-2022 走看看