ExceptionHandling
1. 在Actoin中進行異常映射
2. 在package中進行全局異常映射
3. 使用繼承共用異常映射
4. Struts2中異常處理由攔截器實現(觀察struts-default.xml)
a) 實際上Struts2的大多數功能都由攔截器實現
- <exception-mapping result="error" exception="java.sql.SQLException"/>
- <result name="error">/error.jsp</result>
- public List<Category> list()throws SQLException {
- Connection conn = DB.createConnection();
- String sql = "select * from _category_"; //測試聲明事異常 表名錯
- PreparedStatement pstm = DB.prepare(conn, sql);
- List<Category> list = new ArrayList<Category>();
- try {
- ResultSet rs = pstm.executeQuery();
- Category c = null;
- while(rs.next()) {
- c = new Category();
- c.setId(rs.getInt("id"));
- c.setName(rs.getString("name"));
- c.setDescription(rs.getString("description"));
- list.add(c);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- throw(e);
- }
- DB.close(pstm);
- DB.close(conn);
- return list;
- }
- public String list() throws Exception {
- categories = categoryService.list();
- return SUCCESS;
- }
- <package name="front" namespace="/" extends="struts-default" >
- <action name="Category_list" class="com.gz.bbs2011.action.CategoryAction" method="list">
- <result>/admin/Category_list.jsp</result>
- <exception-mapping result="error" exception="java.sql.SQLException"/>
- <result name="error">/error.jsp</result>
- </action>
- </package>
- <global-exception-mappings>
- <exception-mapping result="exception_handle" exception="Exception"></exception-mapping>
- </global-exception-mappings>
- 常用方式
- <constant name="struts.devMode" value="true"/>
- <package name="bbs2011_default" extends="struts-default">
- <global-results>
- <result name="error">/error.jsp</result>
- </global-results>
- <global-exception-mappings>
- <exception-mapping result="error" exception="java.lang.Exception"/>
- </global-exception-mappings>
- </package>
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.devMode" value="true"/>
- <package name="bbs2011_default" extends="struts-default">
- <global-results>
- <result name="error">/error.jsp</result>
- </global-results>
- <global-exception-mappings>
- <exception-mapping result="error" exception="java.lang.Exception"/>
- </global-exception-mappings>
- </package>
- <package name="admin" namespace="/admin" extends="struts-default" >
- <action name="index">
- <result>/admin/index.html</result>
- </action>
- <action name="*_*" class="com.gz.bbs2011.action.{1}Action" method="{2}">
- <result>/admin/{1}_{2}.jsp</result>
- <result name="input">/admin/{1}_{2}.jsp</result>
- </action>
- <!--
- <action name="category" class="com.gz.bbs2011.action.{1}Action">
- <result name="add_input">/admin/Category_add_input.jsp</result>
- <result name="update_input">/admin/Category_update_input.jsp</result>
- </action>
- -->
- </package>
- <package name="front" namespace="/" extends="bbs2011_default" >
- <action name="Category_list" class="com.gz.bbs2011.action.CategoryAction" method="list">
- <result>/admin/Category_list.jsp</result>
- <!-- <exception-mapping result="error" exception="java.sql.SQLException"/>
- <result name="error">/error.jsp</result> -->
- </action>
- </package>
- </struts>
- <default-action-ref name="Category_list"/>
- <action name="*_*" class="com.gz.bbs2011.action.{1}Action" method="{2}">
- <result>/admin/{1}_{2}.jsp</result>
- <result name="input">/admin/{1}_{2}.jsp</result>
- </action>
- <default-action-ref name="Category_list"/> 如果裏面action裏面有class不可執行 不能執行
- action (慎用此方法,儘量用其他方式解決)
- 解決默認執行方法如下
- web.xml
- <welcome-file>index</welcome-file>
- struts.xml
- <package name="front" namespace="/" extends="bbs2011_default" >
- <default-action-ref name="Category_list"/> <!-- bug -->
- <action name="index" class="com.gz.bbs2011.action.CategoryAction" method="list">
- <result>/admin/Category_list.jsp</result>
- </action>
- </package>