• Unit06: Spring对JDBC的 整合支持 、 Spring+JDBC Template、Spring异常处理


    Unit06: Spring对JDBC的 整合支持 、 Spring+JDBC Template 、Spring异常处理

    1. springmvc提供的异常处理机制

    我们可以将异常抛给spring框架,让spring来帮我们处理异常。

    (1)使用简单异常处理器

    step1. 配置简单异常处理器。

    step2. 添加对应的异常处理页面。
    注:该方式只适合处理简单异常的处理,如果要对异常做复杂处理,比如 记录日志等,则不合适了。

    (2)使用@ExceptionHandler注解

    step1. 在处理器类当中,添加一个异常处理方法, 该方法要使用@ExceptionHandler注解来标注。

    step2.添加对应的异常处理页面。

    2. SpringJdbc

    (1)SpringJdbc是什么?

    是spring框架中的一个模块,对jdbc api做了封装,简化了 jdbc的代码(比如,不用考虑获取连接与关闭连接了)

    (2)编程步骤

    step1. 导包。

    step2. 添加spring配置文件。
    step3. 添加JdbcTemplate配置。

    注:JdbcTemplate对jdbc的api做了封装。
    step4. 调用JdbcTemplate提供的方法。
    注:通常将JdbcTemplate注入到DAO。

    • springmvc提供的异常处理机制代码

    src/main/java

    controller

    package controller;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class HelloController {
        @ExceptionHandler
        public String handler(Exception ex,
                HttpServletRequest request){
            System.out.println("handler()");
            /*
             * 依据异常类型,分别进行相应的处理。
             * ex:就是方法所抛出的异常。
             */
            if(ex instanceof NumberFormatException){
                request.setAttribute("msg",
                        "亲,请输入正确的数字");
                return "error";
            }else if(ex instanceof 
                    StringIndexOutOfBoundsException){
                request.setAttribute("msg",
                        "下标越界了");
                return "error";
            }else{
                //其它异常
                return "sys_error";
            }
        }
        
        @RequestMapping("/toHello.do")
        public String toHello(){
            System.out.println("toHello()");
            String str = "123a";
            Integer.parseInt(str);
            return "hello";
        }
        
        @RequestMapping("/toHello2.do")
        public String toHello2(){
            System.out.println("toHello2()");
            String str = "abcd";
            str.charAt(10);
            return "hello";
        }
    }
    HelloController.java

    interceptors

    package interceptors;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class SomeInterceptor implements 
    HandlerInterceptor{
    
        /**
         * 最后执行的方法。
         * ex:处理器所抛出的异常。
         */
        public void afterCompletion(
                HttpServletRequest request, 
                HttpServletResponse response, 
                Object arg2, Exception ex)
                throws Exception {
            System.out.println("afterCompletion()");
        }
    
        /**
         * 在处理器已经执行完毕,正准备将处理结果
         * (ModelAndView)返回给前端控制器之前,执行
         * postHandle方法。
         * 注:可以在该方法里面,修改处理结果。
         */
        public void postHandle(
                HttpServletRequest request, 
                HttpServletResponse response, 
                Object arg2, ModelAndView mav)
                throws Exception {
            System.out.println("postHandle()");
        }
    
        /**
         * 如果该方法返回值为true,表示继续向后
         * 调用(即调用后面的拦截器和处理器);
         * 如果该方法的返回值为false,则不再向后
         * 调用,返回处理结果。
         * arg2: 处理器方法对象。
         */
        public boolean preHandle(
                HttpServletRequest request, 
                HttpServletResponse response,
                Object arg2) throws Exception {
            System.out.println("preHandle()");
            return true;
        }
        
    }
    SomeInterceptor.java

    src/main/resources

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context" 
        xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
        xmlns:jee="http://www.springframework.org/schema/jee" 
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:util="http://www.springframework.org/schema/util"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
            http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
        <!-- 配置组件扫描 -->
        <context:component-scan 
        base-package="controller"/>
        <!-- 配置视图解析器 -->
        <bean
         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/> 
        <property name="suffix" value=".jsp"/> 
        </bean> 
        
        <!-- 配置拦截器 -->
        <!--  
        <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/**"/>
                <bean 
                class="interceptors.SomeInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
        -->
        
        <!-- 配置简单异常处理器 -->
        <!-- 
        <bean 
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props>
                    <prop key="java.lang.NumberFormatException">ex1</prop>
                    <prop key="java.lang.StringIndexOutOfBoundsException">ex2</prop>
                </props>
            </property>
        </bean>
         -->
    </beans>
    spring-mvc.xml

    WEB-INF

    <%@page pageEncoding="utf-8" 
    contentType="text/html; charset=utf-8" %>
    <html>
        <head></head>
        <body style="font-size:30px;">
            ${msg}        
        </body>
    </html>
    error.jsp
    <%@page pageEncoding="utf-8" 
    contentType="text/html; charset=utf-8" %>
    <html>
        <head></head>
        <body style="font-size:30px;">
            请输入正确的数字
        </body>
    </html>
    ex1.jsp
    <%@page pageEncoding="utf-8" 
    contentType="text/html; charset=utf-8" %>
    <html>
        <head></head>
        <body style="font-size:30px;">
            下标越界
        </body>
    </html>
    ex2.jsp
    <h1>Hello,SpringMVC</h1>
    hello.jsp
    <%@page pageEncoding="utf-8" 
    contentType="text/html; charset=utf-8" %>
    <html>
        <head></head>
        <body style="font-size:30px;">
            系统繁忙,稍后重试
        </body>
    </html>
    sys_error.jsp
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 
             DispatcherServlet的初始化方法在执行时,
             会启动spring容器。
             contextConfigLocation负责指定spring
             配置文件的位置。
         -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
      
    </web-app>
    web.xml
      <dependencies>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-webmvc</artifactId>
              <version>3.2.8.RELEASE</version>
          </dependency>
      </dependencies>
    pom.xml

     

    SQL语句:

    CREATE table emp_fre(
    id number(8) primary key,
    name varchar2(50),
    age number(3)
    );
    
    CREATE sequence emp_seq_fre;
    oracle_create_emp.sql

    src/main/java

    com.tarena.netctoss.controller

    package com.tarena.netctoss.controller;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.tarena.netctoss.dao.AdminDAO;
    import com.tarena.netctoss.entity.Admin;
    
    @Controller
    public class LoginController {
        
        @Resource(name="adminDAO")
        private AdminDAO dao;
        
        @RequestMapping("/toLogin.do")
        public String toLogin(){
            System.out.println("toLogin()");
            return "login";
        }
        
        
        @RequestMapping("/login.do")
        public String login(
                HttpServletRequest request){
            System.out.println("login()");
            String adminCode = 
                request.getParameter("adminCode");
            String pwd = 
                request.getParameter("pwd");
            System.out.println("adminCode:"
                + adminCode + " pwd:" + pwd);
            //使用DAO来访问数据库
            Admin admin = null;
            try{
                admin = 
                    dao.findByAdminCode(adminCode);
            }catch(Exception e){
                e.printStackTrace();
                //系统异常,需要提示用户稍后重试
                return "error";
            }
            if(admin == null){
                //帐号错误
                request.setAttribute(
                        "login_failed", "帐号错误");
                return "login";
            }else{
                if(admin.getPassword().equals(pwd)){
                    //登录成功
                    return "redirect:toIndex.do";
                }else{
                    //密码错误
                    request.setAttribute(
                            "login_failed", "密码错误");
                    return "login";
                }
            }
        }
        
        @RequestMapping("/toIndex.do")
        public String toIndex(){
            return "index";
        }
        
    }
    LoginController.java

    com.tarena.netctoss.dao

    package com.tarena.netctoss.dao;
    
    import com.tarena.netctoss.entity.Admin;
    
    public interface AdminDAO {
        public Admin findByAdminCode(String 
                adminCode);
        
    }
    AdminDAO.java
    package com.tarena.netctoss.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import javax.annotation.Resource;
    import javax.sql.DataSource;
    
    import org.springframework.stereotype.Repository;
    
    import com.tarena.netctoss.entity.Admin;
    
    @Repository("adminDAO") 
    public class AdminDAOJdbcImpl implements 
        AdminDAO{
        
        @Resource(name="ds")
        private DataSource ds;
        
        public Admin findByAdminCode(
                String adminCode) {
            Admin admin = null;
            Connection conn = null;
            try {
                conn = ds.getConnection();
                String sql = 
                    "select * from admin_info_lhh "
                        + "where admin_code=?";
                PreparedStatement ps = 
                        conn.prepareStatement(sql);
                ps.setString(1, adminCode);
                ResultSet rs = 
                        ps.executeQuery();
                if(rs.next()){
                    admin = new Admin();
                    admin.setAdminId(rs.getInt("admin_id"));
                    admin.setAdminCode(rs.getString("admin_code"));
                    admin.setPassword(rs.getString("password"));
                    admin.setName(rs.getString("name"));
                    admin.setTelephone(rs.getString("telephone"));
                    admin.setEmail(rs.getString("email"));
                    admin.setEnrolldate(rs.getTimestamp("enrolldate"));
                }
            } catch (SQLException e) {
                //记日志
                e.printStackTrace();
                /*
                 * 要看异常能否恢复,如果能够恢复,
                 * 则立即恢复,如果不能够恢复(
                 * 比如,数据库服务停止,一般称这样
                 * 的异常为系统异常),则提示用户稍后
                 * 重试。
                 */
                throw new RuntimeException(e);
            }finally{
                if(conn != null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                        throw new RuntimeException(e);
                    }
                }
            }
            return admin;
        }
    
    }
    AdminDAOJdbcImpl.java

    com.tarena.netctoss.entity

    package com.tarena.netctoss.entity;
    
    import java.io.Serializable;
    import java.sql.Timestamp;
    
    public class Admin implements Serializable {
    
        private Integer adminId;
        private String adminCode;
        private String password;
        private String name;
        private String telephone;
        private String email;
        private Timestamp enrolldate;
        
        @Override
        public String toString() {
            return "Admin [adminId=" + adminId + ", adminCode=" + adminCode + ", password=" + password + ", name=" + name
                    + ", telephone=" + telephone + ", email=" + email + ", enrolldate=" + enrolldate + "]";
        }
        
        public Integer getAdminId() {
            return adminId;
        }
        public void setAdminId(Integer adminId) {
            this.adminId = adminId;
        }
        public String getAdminCode() {
            return adminCode;
        }
        public void setAdminCode(String adminCode) {
            this.adminCode = adminCode;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getTelephone() {
            return telephone;
        }
        public void setTelephone(String telephone) {
            this.telephone = telephone;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public Timestamp getEnrolldate() {
            return enrolldate;
        }
        public void setEnrolldate(Timestamp enrolldate) {
            this.enrolldate = enrolldate;
        }
        
    }
    Admin.java

    src/main/resources

    # db connection parameters
    # key=value
    driver=oracle.jdbc.driver.OracleDriver
    url=jdbc:oracle:thin:@192.168.201.227:1521:orcl
    user=openlab
    pwd=open123
    # datasource parameters
    initSize=1
    maxSize=1
    db.properties
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context" 
        xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
        xmlns:jee="http://www.springframework.org/schema/jee" 
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:util="http://www.springframework.org/schema/util"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
            http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
        <!-- 配置组件扫描 -->
        <context:component-scan 
        base-package="com.tarena.netctoss"/>
        <!-- 配置视图解析器 -->
        <bean
         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/> 
        <property name="suffix" value=".jsp"/> 
        </bean> 
        
        <!-- 读取properties文件的内容 -->
        <util:properties id="db" 
        location="classpath:db.properties"/>
        
        <!-- 配置连接池 -->
        <bean id="ds" 
        class="org.apache.commons.dbcp.BasicDataSource"       
           destroy-method="close">       
      <property name="driverClassName" 
      value="#{db.driver}" />      
      <property name="url" 
      value="#{db.url}" />      
      <property name="username" 
      value="#{db.user}" />      
      <property name="password" 
      value="#{db.pwd}" />      
    </bean> 
        
    </beans>
    spring-mvc.xml

    src/test/java

    test

    package test;
    
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.tarena.netctoss.dao.AdminDAO;
    import com.tarena.netctoss.entity.Admin;
    
    public class TestCase {
        @Test
        public void test1() throws SQLException{
            ApplicationContext ac = 
            new ClassPathXmlApplicationContext(
                    "spring-mvc.xml");
            DataSource ds = 
                    ac.getBean("ds",
                            DataSource.class);
            System.out.println(
                    ds.getConnection());
        }
        
        @Test
        //测试 DAO
        public void test2(){
            ApplicationContext ac = 
                new ClassPathXmlApplicationContext(
                        "spring-mvc.xml");    
            AdminDAO dao = 
                    ac.getBean("adminDAO",
                            AdminDAO.class);
            Admin admin = 
                    dao.findByAdminCode("caocao");
            System.out.println("admin:" + admin);
            
        }
    }
    TestCase.java

    WEB-INF

    <%@page pageEncoding="utf-8" 
    contentType="text/html; charset=utf-8" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>达内-NetCTOSS</title>
            <link type="text/css" rel="stylesheet" media="all" href="styles/global.css" />
            <link type="text/css" rel="stylesheet" media="all" href="styles/global_color.css" />
            <script language="javascript" type="text/javascript">
                var timer;
                //启动跳转的定时器
                function startTimes() {
                    timer = window.setInterval(showSecondes,1000);
                }
    
                var i = 5;
                function showSecondes() {
                    if (i > 0) {
                        i--;
                        document.getElementById("secondes").innerHTML = i;
                    }
                    else {
                        window.clearInterval(timer);
                        location.href = "toLogin.do";
                    }
                }
    
                //取消跳转
                function resetTimer() {
                    if (timer != null && timer != undefined) {
                        window.clearInterval(timer);
                        location.href = "toLogin.do";
                    }
                }
            </script> 
        </head>
        <body class="error_page" onload="startTimes();">
            <h1 id="error">
                遇到错误,&nbsp;<span id="secondes">5</span>&nbsp;秒后将自动跳转,立即跳转请点击&nbsp;
                <a  href="javascript:resetTimer();">返回</a>
            </h1>
        </body>
    </html>
    error.jsp
    <%@page pageEncoding="utf-8" 
    contentType="text/html; charset=utf-8" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>达内-NetCTOSS</title>
            <link type="text/css" rel="stylesheet" media="all" href="styles/global.css" />
            <link type="text/css" rel="stylesheet" media="all" href="styles/global_color.css" /> 
        </head>
        <body class="index">
            <!--导航区域开始-->
            <div id="index_navi">
                <ul id="menu">
                    <li><a href="index.html" class="index_on"></a></li>
                    <li><a href="role/role_list.html" class="role_off"></a></li>
                    <li><a href="admin/admin_list.html" class="admin_off"></a></li>
                    <li><a href="fee/fee_list.html" class="fee_off"></a></li>
                    <li><a href="account/account_list.html" class="account_off"></a></li>
                    <li><a href="service/service_list.html" class="service_off"></a></li>
                    <li><a href="bill/bill_list.html" class="bill_off"></a></li>
                    <li><a href="report/report_list.html" class="report_off"></a></li>
                    <li><a href="user/user_info.html" class="information_off"></a></li>
                    <li><a href="user/user_modi_pwd.html" class="password_off"></a></li>
                </ul>
            </div>
        </body>
    </html>
    index.jsp
    <%@page pageEncoding="utf-8" 
    contentType="text/html; charset=utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>达内-NetCTOSS</title>
            <link type="text/css" rel="stylesheet" media="all" href="styles/global.css" />
            <link type="text/css" rel="stylesheet" media="all" href="styles/global_color.css" /> 
        </head>
        <body class="index">
            <div class="login_box">
                    <form action="login.do" 
                        method="post">
                <table>
                    <tr>
                        <td class="login_info">账号:</td>
                        <td colspan="2"><input name="adminCode" type="text" class="width150" /></td>
                        <td class="login_error_info"><span class="required">30长度的字母、数字和下划线</span></td>
                    </tr>
                    <tr>
                        <td class="login_info">密码:</td>
                        <td colspan="2"><input name="pwd" type="password" class="width150" /></td>
                        <td><span class="required">30长度的字母、数字和下划线</span></td>
                    </tr>
                    <tr>
                        <td class="login_info">验证码:</td>
                        <td class="width70"><input name="" type="text" class="width70" /></td>
                        <td><img src="images/valicode.jpg" alt="验证码" title="点击更换" /></td>  
                        <td><span class="required">验证码错误</span></td>              
                    </tr>            
                    <tr>
                        <td></td>
                        <td class="login_button" colspan="2">
                            <a href="javascript:document.forms[0].submit();"><img src="images/login_btn.png" /></a>
                        </td>    
                        <td><span class="required">
                        ${login_failed}</span></td>                
                    </tr>
                </table>
                </form>
            </div>
        </body>
    </html>
    login.jsp
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 
             DispatcherServlet的初始化方法在执行时,
             会启动spring容器。
             contextConfigLocation负责指定spring
             配置文件的位置。
         -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
      
    </web-app>
    web.xml
      <dependencies>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-webmvc</artifactId>
              <version>3.2.8.RELEASE</version>
          </dependency>
          <dependency>
              <groupId>com.oracle</groupId>
              <artifactId>ojdbc14</artifactId>
              <version>10.2.0.4.0</version>
          </dependency>
          <dependency>
              <groupId>commons-dbcp</groupId>
              <artifactId>commons-dbcp</artifactId>
              <version>1.4</version>
          </dependency>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
          </dependency>
      </dependencies>
    pom.xml
  • 相关阅读:
    dpdk 连接错误
    strace 跟踪文件
    鲲鹏服务器 centos 升级gcc + 安装qemu
    centos 升级gcc
    undefined reference to `shm_open'
    Golang与C互用
    [ TIME ] Timed out waiting for device dev-ttyS0.device. [DEPEND] Dependency failed for Serial Getty on ttyS0.
    大型 Web 应用插件化架构探索
    网易游戏基于 Flink 的流式 ETL 建设
    基于WASM的无侵入式全链路A/B Test实践
  • 原文地址:https://www.cnblogs.com/tangshengwei/p/6517409.html
Copyright © 2020-2023  润新知