zoukankan      html  css  js  c++  java
  • springmvc

    SpringMVC

    1. 是一种代替servelt的一种框架所以需要导入相应的jar

    1spring-webmvc-4.1.2.RELEASE.jar

    spring-web-4.1.2.RELEASE.jar

    2核心控制器driver

     

    所以需要配置web.xml把以前的servelt换位该类

    <?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>2019_09_04_springmvc</display-name>
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <!-- 找到文件中的配置文件,和src下面的xml名称 -->
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:applicationContext.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <!-- 通配符处理 -->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        
        
    </web-app>
    View Code

    因为也是spring框架所以也要准备映射路径,在applicationContext.xml中

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 配置最简单的beans -->
    <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.xsd
    
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 配置最简单的context -->
    
        <!-- <bean name="/hello" class="cn.jiedada.controller.HelloController"></bean> -->
        
        <!-- 扫描@controller -->
        <context:component-scan base-package="cn.jiedada"></context:component-scan>
        <!-- 调用@requestMapping() -->
        <mvc:annotation-driven></mvc:annotation-driven>
        <!-- 放行静态资源 -->
        <mvc:default-servlet-handler/>
        <!-- 配置视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/"></property><!-- 加入前缀 -->
            <property name="suffix" value=".jsp"></property><!-- 加入后缀 -->
        </bean>
        <!-- 配置上传下载文件 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="1048576"></property>
        </bean>
    </beans> 

    这里我就把今天所以的映射写出来了,但是他默认的映射路径为

    /WEB-INF/springmvc-servlet.xml文件

    所以我们需要配置我们的映射路劲

    在web.xml配置

    <init-param>
       <!-- 找到文件中的配置文件,和src下面的xml名称 -->
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:applicationContext.xml</param-value>自己需要的配置文件
      </init-param>

    写mvc的三种方式

    1.实现Controller接口

    2实现h't't'prequestHander接口

    3.注解@controller

    package cn.jiedada.controller;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import cn.jiedada.domain.User;
    
    //开启注解
    @Controller
    //一级匹配
    @RequestMapping("/login")
    public class Controllet {
        //二级匹配
        @RequestMapping("/form2")
        public void f1(String name,String pwd){
            System.out.println(name+"--"+pwd);
        }
        @RequestMapping("/form3")
        public void f2(User user){
            System.out.println(user.getName()+"--"+user.getPwd());
        }
        @RequestMapping("/form5")
        public String f2(String name,String pwd,HttpServletRequest req,Model model){
            if(name.equals("tom")&&pwd.equals("123456")){
                model.addAttribute("name", name);
                return "jsp/success";
            }else{
                model.addAttribute("error5", "账号或者密码错误");
                model.addAttribute("name5", name);
                return "jsp/model2";
            }
        }
        
    }
    View Code

    这里我们需要开启applicationContex.xml中的注解

    <!-- 扫描@controller -->
     <context:component-scan base-package="cn.jiedada"></context:component-scan>
     <!-- 调用@requestMapping() -->
     <mvc:annotation-driven></mvc:annotation-driven>

    需要开启注解扫描(找到什么类中的包及子包看有没有打上注解)

    因为springmvc不能访问静态资源(不能更改的资源如:HTML,图片等)所以我们也需要开启注解访问静态资源

    <!-- 放行静态资源 -->
     <mvc:default-servlet-handler/>

    因为也存在编码问题,所以springmvc给我们配置了编码

    <!-- 配置utf-8 -->
     <filter>
      <filter-name>characterEncoding</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>characterEncoding</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>

    为过滤器

    向页面传值

    我们可以配置一个视图解析器(把我们返回的字符串前面加上什么,后面加上什么,然后去找相应的页面,如果有,则返回页面,没有返回404)

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/"></property><!-- 加入前缀 -->
      <property name="suffix" value=".jsp"></property><!-- 加入后缀 -->
     </bean>

    这里我们使用medol像页面传值

    @RequestMapping("/form5")
        public String f2(String name,String pwd,HttpServletRequest req,Model model){
            if(name.equals("tom")&&pwd.equals("123456")){
                model.addAttribute("name", name);
                return "jsp/success";
            }else{
                model.addAttribute("error5", "账号或者密码错误");
                model.addAttribute("name5", name);
                return "jsp/model2";
            }
        }
    View Code

    这样的跳转方式为forward,

    跳转方式,如果我们我们不需要使用视图解析器的话可以

    可以通过return "forword:index.jsp"

    "redirect:index.jsp"实现转发和重定向

    返回json

    因为前端页面使用的是json

    需要使用该注解@ResponseBody//将返回的数据自动转换成json格式的数据,而且是用了@ResponseBody,不会经过视图解析器

    (1) Json表示对象:{"name":"tom","age":18}

    (2) Json表示一个集合:[{"name":"tom","age":18},{"name":"jack","age":30}]

    所以我们需要的时返回一个json对象,这里我们

    <!-- 开启spring对MVC的支持 -->
    <mvc:annotation-driven>
        <!-- 避免在IE浏览器中返回JSON时出现下载文件的情况 -->
        <mvc:message-converters>
            <bean id="mappingJackson2HttpMessageConverter"
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    ie中测试,会弹出下载文件的窗口,可以在spring-mvc.xml<mvc:annotation-driven>中加入以下配置解决:

    做上传下载文件

    我们对上传文件进行下载也需要使用包

    Ø com.springsource.org.apache.commons.fileupload-1.2.0.jar

    Ø com.springsource.org.apache.commons.io-1.4.0.jar

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为1MB -->
        <property name="maxUploadSize">
            <!-- spring el写法:1MB -->
            <value>#{1024*1024}</value>
        </property>
         <!-- 效果同上 -->
    <property name="maxUploadSize" value="1048576" />
    </bean>

    所以也需要配置映射在applicationContext.xml

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
      <property name="maxUploadSize" value="1048576"></property>
     </bean>

    这样我们可以使用其中的方法,我们直接使用IOUtil.copy()的方法就能直接下载下来了这里为自己写的一个下载工具类

    package cn.jiedada.util;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.UUID;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.io.IOUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    public class UploadUtil {
        public static String upload(HttpServletRequest req,MultipartFile photo){
            if(!photo.isEmpty()){
                //创建一个文件
                //判断是否存在,存在就不创建文件夹,不存在就创建
                String path = req.getServletContext().getRealPath("/UploadFile");
                File file = new File(path);
                if(!file.exists()){
                    file.mkdir();
                }
                //获得上传文件的名字
                String orname = photo.getOriginalFilename();
                //在经行uuid加密
                String rename = UUID.randomUUID().toString().replace("-", "");
                String realname=rename+"_"+orname;
                InputStream in =null;
                FileOutputStream out=null;
                try {
                    //获得输入流
                    in = photo.getInputStream();
                    //获得输出流
                    out = new FileOutputStream(new File(file,realname));
                    //文件上传
                    IOUtils.copy(in, out);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }finally{
                    try {
                        //关闭流
                        out.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }finally{
                        try {
                            in.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    
                }
                return realname;
            }
            return null;
        }
    }
    @Controller
    public class UploadTest {
        @RequestMapping("/upload")
        public void upload(HttpServletRequest req,MultipartFile photo){
            String upload = UploadUtil.upload(req, photo);
            System.out.println(upload);
        }
    }
    View Code

    直接通过requestMapping()请求获得其中的值,并且添加进去简单的长传下载就完成了

    拦截器

    类似于过滤器,也需要配置

    <!-- 配置拦截器组 -->
    <mvc:interceptors>
        <!-- 拦截器 -->
        <mvc:interceptor>
            <!-- 要拦截的配置 -->
            <mvc:mapping path="/*"  />
            <!-- 设置不拦截的配置 -->
            <mvc:exclude-mapping path="/login"/>
            <!-- 配置拦截器 -->
            <bean class="cn.itsource.springmvc._06_interceptor.MyInterceptor" />  
        </mvc:interceptor>
    </mvc:interceptors>

     去实现就可以了implements HandlerInterceptor

  • 相关阅读:
    JVM理解
    ubuntu下Android反编译详细教程-apktool,dex2jar,jd-gui的使用
    Add Two Numbers
    Two Sum
    JS实现总价随数量变化而变化(顾客购买商品表单)
    族谱管理系统(孩子兄弟存储结构)
    Java登录界面的实现(注册、登录、背景图片)
    Java GUI记账本(基于Mysql&&文件存储两种版本)
    几种对栈操作的方法
    Java中的成员内部类
  • 原文地址:https://www.cnblogs.com/xiaoruirui/p/11470802.html
Copyright © 2011-2022 走看看