zoukankan      html  css  js  c++  java
  • java:Springmvc框架2(Ajax,Json,Interceptor,Upload,Exception)

    1.springmvcAjax:

      

      springmvc.xml:

    <?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:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
          http://www.springframework.org/schema/mvc
          http://www.springframework.org/schema/mvc/spring-mvc.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
         
         
     
         <!-- 注解扫描!!!-->
          <context:component-scan base-package="cn.zzsxt"></context:component-scan>
          
          
          
          <!-- 配置视图解析器 -->
        <!-- InternalResourceViewResolver:支持JSP视图解析 -->
        <!-- viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar包; -->
        <!-- prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为: -->
        <!-- 前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,-->
        <!-- 则最终返回的jsp视图地址 "WEB-INF/view/hello.jsp" -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
        
      
      
           <!-- 注解映射器
            说明 :对类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配
            ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method
        -->
        <!--
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
        -->
        <!-- 注解适配器
             说明:注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
        -->
        <!--
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
        -->
        <!-- springmvc使用<mvc:annotation-driven> -->
        <!-- 自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter, -->
        <!-- 可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。 -->
        <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
       
       
        
        <!-- 自定义类型转换器 -->
        <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <property name="converters">
                <list>
                    <bean class="cn.zzsxt.converter.CustomDateConverter"></bean>
                </list>
            </property>
        </bean>
        
        
        
         <!-- 处理静态资源 让静态资源可以直接访问-->
        <!--<mvc:resources mapping="/js/**" location="/js/"/> -->
        <!-- 当在web.xml 中 DispatcherServlet使用 <url-pattern>/</url-pattern> 映射时,能映射静态资源  -->
         <mvc:default-servlet-handler/>
    </beans>

      

      web.xml:

    <?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_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>springmvc01</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    
    
      <!-- 解决post提交乱码问题 -->
      <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>
     
     
     
      <!-- spring mvc的前端控制器,类似struts2的核心过滤器 -->
      <servlet>
          <servlet-name>springmvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      
      
      
          <!-- 通过contextConfigLocation参数指定配置文件的位置,默认在WEB-INF/查找名称为 [servlet-name]-servlet.xml -->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
          </init-param>
      
      
      
          <!-- servlet随web容器而启动 -->
          <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>

        UserController.java:

    package cn.zzsxt.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import cn.zzsxt.model.Userinfo;
    import cn.zzsxt.service.UserService;
    import cn.zzsxt.service.impl.UserServiceImpl;
    import cn.zzsxt.vo.ResultMessage;
    
    @Controller
    @RequestMapping("/user")
    public class UserController {
        private UserService userService = new UserServiceImpl();
        
        @RequestMapping(value="login",method=RequestMethod.GET)
        public String login(){
            return "login";
        }
        
        @RequestMapping(value="register",method=RequestMethod.GET)
        public String register(){
            return "register";
        }
        /**
         * @ResponseBody:将java对象转换为json对象
         * @RequestBody:将json对象转换为java对象
         * @param userName
         * @return
         */
        @RequestMapping(value="check",method=RequestMethod.GET)
        @ResponseBody
        public Map<String,Object> check(@RequestBody String userName){
            boolean isExist = userService.checkUserName(userName);
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("isExist", isExist);
            return map;
        }
        
        
        @RequestMapping(value="register",method=RequestMethod.POST)
        @ResponseBody
        public ResultMessage register(@RequestBody Userinfo user){  //此处@RequestBody出错的话不加?
            boolean success = userService.add(user);
            String message=success?"添加成功!":"添加失败!";
            ResultMessage rm = new ResultMessage();
            rm.setSuccess(success);
            rm.setMessage(message);
            return rm;
        }
    
    }

      CustomDateConverter.java:

    package cn.zzsxt.converter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.springframework.core.convert.converter.Converter;
    /**
     * 自定义类型转换器
     * @author Think
     *
     */
    public class CustomDateConverter implements Converter<String, Date> {
    
        @Override
        public Date convert(String source) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date date = sdf.parse(source);
                return date;
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }

      ResultMessage.java:

    package cn.zzsxt.vo;
    
    public class ResultMessage {
        private boolean success;//是否新增成功
        private String message;//操作完成后的提升消息
        
        public boolean isSuccess() {
            return success;
        }
        public void setSuccess(boolean success) {
            this.success = success;
        }
        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
        
    }

      login.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>My JSP 'login.jsp' starting page</title>
        <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
        <script type="text/javascript">
            $(function(){
                $("#userName").blur(function(){
                    var userName = $("#userName").val();
                    $.get("user/check?userName="+userName,function(data){
                        if(data.isExist==true){
                            $("#msg").html("<font color=red>用户名已存在!</font>");
                            $("#submitBtn").attr("disabled",true);
                        }else{
                            $("#msg").html("<font color=green>用户名可用!</font>");
                            $("#submitBtn").attr("disabled",false);
                        }
                    });
                    
                });
            })
        </script>
      </head>
      
      <body>
          <form action="" method="post">
              用户名:<input type="text" name="userName" id="userName"/><span id="msg"></span> <br>
              密码:<input type="text" name="userPass"/><br>
              <input type="submit" value="登录" id="submitBtn">
          </form>
      </body>
    </html>

      register.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>My JSP 'login.jsp' starting page</title>
        <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
        <script type="text/javascript">
            $(function(){
                //单机注册按钮
                $("#submitBtn").click(function(){
                    //获取表单元素的值
                    var userName = $("#userName").val();
                    var userPass = $("#userPass").val();
                    var address = $("#address").val();
                    var birthday = $("#birthday").val();
                    var jsonData = '{"userName":"'+userName+'","userPass":"'+userPass+'","address":"'+address+'","birthday":"'+birthday+'"}'; 
    //                 alert(jsonData);
                    $.ajax({
                             type:"POST",
                             url:"user/register",
                             contentType:"application/json",
                             data:jsonData,
                             success: function(msg){
    //                              alert( "Data Saved: " + msg );
                                alert(msg.message);
                             }
                        });
                });
            })
        </script>
      </head>
      
      <body>
          <form action="" method="post">
              用户名:<input type="text" name="userName" id="userName"/><span id="msg"></span> <br>
              密码:<input type="text" name="userPass" id="userPass"/><br>
              地址:<input type="text" name="address" id="address"><br>
              生日:<input type="text" name="birthday" id="birthday"><br>
              <input type="button" value="注册" id="submitBtn">
          </form>
      </body>
    </html>

    2.springmvcInterceptor:

      

      

      springmvc.xml:

    <?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:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
          http://www.springframework.org/schema/mvc
          http://www.springframework.org/schema/mvc/spring-mvc.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
         
         
         <!-- 注解扫描!!!-->
          <context:component-scan base-package="cn.zzsxt.controller"></context:component-scan>
          
          
          
          <!-- 配置视图解析器 -->
        <!-- InternalResourceViewResolver:支持JSP视图解析 -->
        <!-- viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar包; -->
        <!-- prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为: -->
        <!-- 前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,-->
        <!-- 则最终返回的jsp视图地址 "WEB-INF/view/hello.jsp" -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
        
          
          
           <!-- 注解映射器
            说明 :对类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配
            ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method
        -->
        <!--
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
        -->
        <!-- 注解适配器
             说明:注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
        -->
        <!--
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
        -->
        <!-- springmvc使用<mvc:annotation-driven> -->
        <!-- 自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter, -->
        <!-- 可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。 -->
        <mvc:annotation-driven></mvc:annotation-driven>
        
        
        
        
         <!-- 处理静态资源 让静态资源可以直接访问-->
        <!--<mvc:resources mapping="/jquery-ui-1.12.1.custom/**" location="/jquery-ui-1.12.1.custom/"/> -->
        <!-- 当在web.xml 中 DispatcherServlet使用 <url-pattern>/</url-pattern> 映射时,能映射静态资源  -->
         <mvc:default-servlet-handler/>
        
        
        
        <!--配置拦截器, 多个拦截器,顺序执行 -->
        <mvc:interceptors>
    
            <mvc:interceptor>
               <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->
                <mvc:mapping path="/**"/>
                <bean class="cn.zzsxt.interceptor.MyCustomInterceptor"></bean>
            </mvc:interceptor>
    
    
    
             <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->        
            <mvc:interceptor>
                <!-- 配置拦截的匹配路径 -->
                <mvc:mapping path="/**"/>
                <!-- 配置放行的匹配路径 -->
                <mvc:exclude-mapping path="/user/login"/>
                <bean class="cn.zzsxt.interceptor.LoginInterceptor"></bean>
            </mvc:interceptor>
    
        </mvc:interceptors>
    </beans>

      web.xml:

    <?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_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>springmvc01</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
     
     
     
      <!-- 解决post提交乱码问题 -->
      <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>
     
     
     
      <!-- spring mvc的前端控制器,类似struts2的核心过滤器 -->
      <servlet>
          <servlet-name>springmvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      
     
          <!-- 通过contextConfigLocation参数指定配置文件的位置,默认在WEB-INF/查找名称为 [servlet-name]-servlet.xml -->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
          </init-param>
     
     
          <!-- servlet随web容器而启动 -->
          <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>

      

      TestController.java:

    package cn.zzsxt.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    @RequestMapping("/t")
    public class TestController {
        
        @RequestMapping("/hello")
        public String hello(){
            System.out.println("TestController中hello()方法被执行了....");
            return "success";
        }
    }

      UserController.java:

    package cn.zzsxt.controller;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.servlet.http.HttpSession;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import cn.zzsxt.model.Userinfo;
    
    @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping(value="/login",method=RequestMethod.GET)
        public String login(){
            return "login";
        }
        @RequestMapping(value="/login",method=RequestMethod.POST)
        public String login(Userinfo user,HttpSession session){
            if("admin".equals(user.getUserName())&&"admin".equals(user.getUserPass())){
                //将用户信息保持到sesssion中
                session.setAttribute("loginUser", user);
                return "redirect:/user/list";
            }
            return "login";
        }
        
        @RequestMapping(value="/list")
        public String list(Model model){
            //从数据库中查询用户信息
            List<Userinfo> list = new ArrayList<Userinfo>();
            for (int i = 1; i <=5; i++) {
                Userinfo user = new Userinfo(i,"zhang"+i,"zhang"+i);
                list.add(user);
            }
            model.addAttribute("list", list);
            return "list";
        }
        
    }

      LoginInterceptor.java:

    package cn.zzsxt.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import cn.zzsxt.model.Userinfo;
    
    public class LoginInterceptor implements HandlerInterceptor {
    
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
            HttpSession session = request.getSession();//获取session
            //从session中获取用户信息
            Userinfo user=(Userinfo)session.getAttribute("loginUser");
            if(user!=null){
                return true;
            }else{
                response.sendRedirect("login");
                return false;
            }
        }
    
        @Override
        public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
                throws Exception {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
                throws Exception {
            // TODO Auto-generated method stub
    
        }
    
    }

      MyCustomInterceptor.java:

    package cn.zzsxt.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class MyCustomInterceptor implements HandlerInterceptor {
        /**
         * 在控制器方法调用前执行
         * 返回值为是否中断
         * true,表示继续执行(下一个拦截器或处理器)
         * false则会中断后续的所有操作,所以我们需要使用response来继续响应后续请求
    
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
            System.out.println("preHandle()方法被执行了.......");
            return true;
        }
        
        /**
         * 在控制器方法调用后,解析视图前调用,我们可以对视图和模型做进一步渲染或修改
         * 可在modelAndView中加入数据,比如当前时间
    
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView modelAndView)
                throws Exception {
            System.out.println("postHandle()方法被执行了.....");
    
        }
        /**
         * 整个请求完成,即视图渲染结束后调用,这个时候可以做些资源清理工作,或日志记录
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception)
                throws Exception {
            System.out.println("afterCompletion方法被执行了....");
        }
    
    
    }

      

    3.springmvcUpload And Exception:

      

      

      springmvc.xml:

    <?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:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
          http://www.springframework.org/schema/mvc
          http://www.springframework.org/schema/mvc/spring-mvc.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
     
     
     
         <!-- 注解扫描!!!-->
          <context:component-scan base-package="cn.zzsxt.controller"></context:component-scan>
          
        
        
        
        <!-- 配置视图解析器 -->
        <!-- InternalResourceViewResolver:支持JSP视图解析 -->
        <!-- viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar包; -->
        <!-- prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为: -->
        <!-- 前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,-->
        <!-- 则最终返回的jsp视图地址 "WEB-INF/view/hello.jsp" -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
            <property name="prefix" value="/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
        
        
        
        <!--文件上传视图解析器 ,其中此处ID必须给,并且ID名字固定写法-->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
             <!--允许上传的文件最大大小  单位是byte-->
            <property name="maxUploadSize" value="100000000"></property>
        </bean>
        
        
        
        <!--自定义异常的解析器(处理器) -->
        <bean id="handerExceptionResolver" class="cn.zzsxt.resolver.CustomResolver"></bean>    
      
      
      
           <!-- 注解映射器
            说明 :对类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配
            ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method
        -->
        <!--
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
        -->
        <!-- 注解适配器
             说明:注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
        -->
        <!--
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
        -->
        <!-- springmvc使用<mvc:annotation-driven> -->
        <!-- 自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter, -->
        <!-- 可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。 -->
        <mvc:annotation-driven></mvc:annotation-driven>
        
        
        
         <!-- 处理静态资源 让静态资源可以直接访问-->
        <!-- <mvc:resources mapping="/jquery-ui-1.12.1.custom/**" location="/jquery-ui-1.12.1.custom/"/> -->
        <!-- 当在web.xml 中 DispatcherServlet使用 <url-pattern>/</url-pattern> 映射时,能映射静态资源  -->
         <mvc:default-servlet-handler/>
        
    </beans>

      web.xml:

    <?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_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>springmvc01</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
     
     
     
      <!-- 解决post提交乱码问题 -->
      <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>
     
     
     
      <!-- spring mvc的前端控制器,类似struts2的核心过滤器 -->
      <servlet>
          <servlet-name>springmvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      
      
          <!-- 通过contextConfigLocation参数指定配置文件的位置,默认在WEB-INF/查找名称为 [servlet-name]-servlet.xml -->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
          </init-param>
     
     
          <!-- servlet随web容器而启动 -->
          <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>

      TestException.java:

    package cn.zzsxt.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import cn.zzsxt.exception.CustomException;
    
    @Controller
    public class TestException {
        
        @RequestMapping("/login")
        public String login(String userName) throws CustomException{
            if(userName.length()<6){
                throw new CustomException("用户名长度不小于6位!");
            }
            return "success";
        }
    }

      UploadController.java:

    package cn.zzsxt.controller;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.multipart.MultipartFile;
    
    @Controller
    public class UploadController {
        
        
        @RequestMapping(value="/upload",method=RequestMethod.POST)
        public String upload(@RequestParam("uploadFile")MultipartFile uploadFile){
            String fileName = uploadFile.getOriginalFilename();//获取上传文件的文件名称
            File filePath = new File("D:\upload");
            if(!filePath.exists())
                filePath.mkdirs();
            try {
                uploadFile.transferTo(new File(filePath,fileName));//上传
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "success";
         }
        
        /**
         * 多文件上传
         * @param uploadFile
         * @return
         */
        @RequestMapping(value="/upload2",method=RequestMethod.POST)
        public String upload2(@RequestParam("uploadFile")MultipartFile[] uploadFile){
            File filePath = new File("D:\upload");
            if(!filePath.exists())
                filePath.mkdirs();
            try {
                //循环变量上传
                for (MultipartFile multipartFile : uploadFile) {
                    String fileName = multipartFile.getOriginalFilename();//获取上传文件的文件名称
                    multipartFile.transferTo(new File(filePath,fileName));
                }
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            return "success";
         }
    }

      CustomException.java:

    package cn.zzsxt.exception;
    
    public class CustomException extends Exception {
        public CustomException(){
        }
        public CustomException(String message){
            super(message);
        }
        
    }

      CustomResolver.java:

    package cn.zzsxt.resolver;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    import cn.zzsxt.exception.CustomException;
    
    public class CustomResolver implements HandlerExceptionResolver {
    
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object object,
                Exception exception) {
            CustomException customException = null;
            if(exception instanceof CustomException){
                customException = (CustomException) exception;
            }else{
                customException = new CustomException("系统出现未知错误,请与管理员联系!");
            }
            ModelAndView mv = new ModelAndView();
            mv.addObject("message", customException.getMessage());
            mv.setViewName("error");
            return mv;
        }
    
    }

      upload.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>单文件上传</title>
      </head>
      
      <body>
          <form action="upload" method="post" enctype="multipart/form-data">       // 固定enctype="multipart/form-data"
     文件:<input type="file" name="uploadFile"/><br> <input type="submit" value="上传"/> </form> </body> </html>

      upload2.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>多文件上传</title>
      </head>
      
      <body>
          <form action="upload2" method="post" enctype="multipart/form-data">
              文件1:<input type="file" name="uploadFile"/><br>
              文件2:<input type="file" name="uploadFile"/><br>
              文件3:<input type="file" name="uploadFile"/><br>
              <input type="submit" value="上传"/>
          </form>
      </body>
    </html>
  • 相关阅读:
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Linux下的iwpriv(iwlist、iwconfig)的简单应用
    OCX控件的注册卸载,以及判断是否注册
    .OCX、.dll文件注册命令Regsvr32的使用
  • 原文地址:https://www.cnblogs.com/kuangzhisen/p/7450600.html
Copyright © 2011-2022 走看看