• 重新学习struts


    这就是所谓的一边工作一边学习。

    今天准备把给公司写个管理页面,按照之前的路数,写起来应该挺快,但是不太规范。也就沉下心来学习一下了。

    第一个学习的是,之前,在学校,听师兄说过,对页面编码可用interceptor去统一拦截处理。百度了一下,看来看去只有一份代码,试了一下,对响应的内容不生效,只对请求参数生效。

    第二个学习的是,异常处理。

    也是在学校的时候,听老师说过,struts2有提供一个异常处理机制。

    平常我们有些异常处理,会在代码中写try catch。

    public String login(){
        try{
           //do something
        }catch(SQLException e){
             return "SQLError";    //去struts.xml中找对就"SQLError"这个视图
        }
        return SUCCESS;
    }
    View Code

    而现在struts2中,在action的方法中,直接抛出异常,代码如下(如果是runtime异常,可以不用抛出)

    public String login() throws SQLException{
        
        //do something
    
        return SUCCESS;
    }
    View Code

    两份代码,效果是一样的,如果出现sql异常,都会跳转到SQLError对应的视图。但是后者代码不用写一些try catch代码,使代码更加简洁。而异常处理也可以统一使用(复用)。

    但是,后者要配置一下struts.xml文件。(看到这里,我又想起,struts.xml可以有多个,所以又再去学了这个知识点,而之前所有配置都写在一个struts.xml文件中)

    struts.xml文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    
        <constant name="struts.multipart.saveDir" value="tem"></constant>
        <constant name="struts.i18n.encoding" value="utf-8"></constant>
        <constant name="struts.devMode" value="true" />
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.multipart.maxSize" value="52428800000" />
        <constant name="struts.action.extension" value="action,do,webwork" />
        
        <include file="struts-user.xml"></include>
        <include file="struts-error.xml"></include>
        
    </struts>   
    View Code

    struts-user.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    
        <constant name="struts.multipart.saveDir" value="tem"></constant>
        <constant name="struts.i18n.encoding" value="utf-8"></constant>
        <constant name="struts.devMode" value="true" />
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.multipart.maxSize" value="52428800000" />
        <constant name="struts.action.extension" value="action,do,webwork" />
        
        <package name="web" extends="exception">
            
            <action name="user_*" class="UserAction" method="{1}">
                <result name="input">/index.jsp</result>
                <result name="success">/WEB-INF/view/management.jsp</result>
            </action>
        </package>
    </struts>   
    View Code

    struts-error.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    
        <constant name="struts.multipart.saveDir" value="tem"></constant>
        <constant name="struts.i18n.encoding" value="utf-8"></constant>
        <constant name="struts.devMode" value="true" />
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.multipart.maxSize" value="52428800000" />
        <constant name="struts.action.extension" value="action,do,webwork" />
        
        
        <!-- 错误、异常相关的 -->
        <package name="exception" extends="struts-default">
            <global-results>
                <result name="error">/WEB-INF/view/error/error.jsp</result>
                <result name="sql">/WEB-INF/view/error/sql_error.jsp</result>
            </global-results>
            <global-exception-mappings>
                <exception-mapping result="sql" 
                exception="java.sql.SQLException"></exception-mapping>
            </global-exception-mappings>
            
            
        </package>
    </struts>    
    View Code

    从上面的xml的代码可以看出,我又学了一个知识点。

    之前一直没注意struts.xml里面的package里面name 和 extends这个作用。

    今天通过这个学习又发现了。

    一开始,直接抛出异常,照理说,应该跳转到sqlerror对应的视图上去的,但是,提示,UserAction这个action没有对应的视图。

    后来再看看,试了一下继承,让struts-user.xml里的web那个package继承struts-error.xml里面的exception这个package,代码就调通了。

    之前完全对package这个节点里面的name属性乱起名。现在明白了。

    后来又查了一下,package是可以多继承的。

  • 相关阅读:
    MyBatis基础面试题
    MyBatis面试题
    Spring MVC @RequestBody自动转JSON HTTP415错误解决方法
    【GDKOI 2016】地图 map 类插头DP
    【Codechef FRBSUM】【FJOI2016】【BZOJ4299】【BZOJ 4408】 可持久化线段树
    【NOI2005】聪聪和可可 概率与期望 记忆化搜索
    【bzoj 1076】【SCOI2008】奖励关
    BZOJ 1009 HNOI 2008 GT考试 递推+矩乘
    BZOJ 3809 Gty的二逼妹子序列
    BZOJ 2821作诗(Poetize) 分块
  • 原文地址:https://www.cnblogs.com/baron89/p/3225841.html
Copyright © 2020-2023  润新知