SpringMVC学习笔记2

一、日期赋值

目标:在springMVC中日期赋值兼容性更广泛

不能直接处理,必须使用转换器
1、定义转换器,实现接口Converter<From,To>

package com.zy.converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
                                                    //从字符串转日期
public class MyDateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String value) {//参数就是传入的字符串日期
             //1999年6月6日
                //1999-6-6
                //1999.6.6     
                //1999/6/6 默认支持
            // 第一种为例
                //1创建相对应的日期格式化对象
               SimpleDateFormat simpleDateFormat = null;            
               try {
                   if(value.contains("年")){
                       simpleDateFormat= new SimpleDateFormat("yyyy年MM月dd日");
                   }else if(value.contains("-")){
                       simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd");
                   }else if(value.contains(".")){
                       simpleDateFormat= new SimpleDateFormat("yyyy.MM.dd");
                   }else if(value.contains("/")){
                       simpleDateFormat= new SimpleDateFormat("yyyy/MM/dd");
                   }
                  
                   //2把字符串解析成一个日期对象
                Date parse = simpleDateFormat.parse(value);
                   //3返回结果
                return parse;
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                return null;
        }
        
}

2、配置

spring.xml中

 <!-- 2配置日期转换器 -->
   <bean id="formattingConversion" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
   <property name="converters">
   <list>
   <!-- 配置自己的转换器     一个bean就是一个类-->
   <bean class="com.zy.converter.MyDateConverter"></bean>
   </list>
   </property>   
   </bean>
  <!-- 3引用上文的转换器 -->
  <mvc:annotation-driven conversion-service="formattingConversion"></mvc:annotation-driven>

3、Upload上传

1)导包

2)多功能表单

<form action="file/up" method="post" enctype="multipart/form-data"><!-- 多功能表单 -->
头像:<input type="file" name="myfile"/><input type="submit"/>
</form>

3)文件上传解析器

spring.xml

<!-- 4文件上传解析器     id名为multipartResolver,不然可能会报错-->
   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
   <property name="maxUploadSize">
   <value>5242880</value> 
   </property>
   </bean>

4)辅助方法+上传文件

@Controller
@RequestMapping("/file")
public class FileController {
//辅助方法
//1根据逻辑路径得到真实路径
    
    
    //过期的
    //@SuppressWarnings(“deprecation”)表示不检测过期的方法
    @SuppressWarnings("deprecation")
    public String myGetRealPath(String path,HttpServletRequest request){
        String realPath = request.getRealPath(path);
        System.out.println("真实路径:"+realPath);
        File file = new File(realPath);
        if(!file.exists()){
            file.mkdirs();
        }
        
        
        return realPath;
    }
    
    //2更改文件名
    public String newFileName(MultipartFile file){
        String originalFilename = file.getOriginalFilename();
        //abc.jpg
        //截取后缀,拼接新的文件名
        //后缀
        String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
        //新文件名要求:上传中防止文件名重复,发生覆盖
        String uu = UUID.randomUUID().toString();
        
        String newName=uu+substring;
        return newName;
    
    }
    
//    @Test
//  public void test(){
//      System.out.println(UUID.randomUUID());
//  }
    
    //上传--//如果controller只需要跳转页面的话,可以把返回值写成String 不用写成ModelAndView
    @SuppressWarnings("resource")
    @RequestMapping("/up")
    public String up(MultipartFile myfile,HttpServletRequest request)  throws Exception{
        //得到真实路径                                                                 <!--tomcat服务器来给该request赋值-->
        String path="/img";//逻辑路径
        String myGetRealPath = myGetRealPath(path, request);
        //得到新的文件名
        String newFileName = newFileName(myfile);
        
        //上传----把本地文件按流的方式copy到服务器上
        
            //输入流
            InputStream is = myfile.getInputStream();
            //输出流
            FileOutputStream os = new FileOutputStream(myGetRealPath+"/"+newFileName);
            //copy
            IOUtils.copy(is, os);
            request.setAttribute("img",path+"/"+newFileName);
            os.close();
            is.close();
            return "/index.jsp";    
    }

4、下载

//图片下载
    @SuppressWarnings("resource")
    @RequestMapping("/down")
    public void down(HttpServletResponse response,String fileName,HttpServletRequest request) throws Exception {
        //设置头--[下载attachment/预览]
        response.setHeader("Content-Disposition", "attachment;fileName="+fileName);
        //下载的本质--文件按流的方式从服务器copy到本地
        //得到资源在服务器的真实路径
        String path="/aaa/"+fileName;
        String myGetRealPath = myGetRealPath(path, request);
        FileInputStream fileInputStream = new FileInputStream(myGetRealPath);
        ServletOutputStream outputStream = response.getOutputStream();
        
        IOUtils.copy(fileInputStream, outputStream);
        fileInputStream.close();
        outputStream.close();
        //下载以后不要跳页面
    }
    

5、ModeAndView

@RequestMapping("/go")
    public ModelAndView go(){
        ModelAndView modelAndView = new ModelAndView();
        //modelAndView分为两个功能-----我们以前见过的
        //model 数据
        //view 视图
        //------
        //存域
        modelAndView.addObject("mydata","880");
        //跳转
        modelAndView.setViewName("/abc.jsp");
        return modelAndView;
    
    
    }

6、视图解析器(便利性)

spring.xml

<!-- 5视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

  <!-- 前缀 --> <property name="prefix" value="/WEB-INF/view/"/> <!-- 后缀 -->
<property name="suffix" value=".jsp"/> </bean>

 

@RequestMapping("/show")
    public String show(){
        //带视图解析器的跳转
        // /WEB-INF/view/
        //  .jsp
        return "aaa";
    }
    
    @RequestMapping("/mmm")
    public String mmm(){
        
        return "forward:/WEB-INF/mmm/bbb.jsp";//指定响应方式可以摆脱视图解析器
    }

    //----
    ///WEB-INF下的页面不能通过重定向到
    //return "forward:/WEB-INF/mmm/bbb.jsp"   转发
    //return "redirect:bbb.jsp"    重定向

 

<hr>
文件上传
<form action="${pageContext.request.contextPath}/file/up.action" method="post" enctype="multipart/form-data"><!-- 多功能表单 -->
头像:<input type="file" name="myfile"/><input type="submit"/>
</form>
<img alt="" src="${pageContext.request.contextPath}${img}">
</body>
文件下载
<a href="${pageContext.request.contextPath}/file/down.action?fileName=110.jpg">下载</a>

<a href="${pageContext.request.contextPath}/file/go.action?">跳转</a>

<a href="${pageContext.request.contextPath}/file/show.action?">带视图解析器跳转</a>

<a href="${pageContext.request.contextPath}/file/mmm.action?">带视图解析器跳转2</a>

 6、url-pattern

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <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>
  
  <!-- 配置前端控制器 -->
  <servlet>
  <servlet-name>aaa</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <!-- 加载配置文件 -->
  <init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring.xml</param-value><!-- 配置文件的位置   classpath代表src -->
  </init-param>
  <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>aaa</servlet-name>
  <url-pattern>*.action</url-pattern><!-- 拦截规则 --><!-- 后缀拦截  拦截以action结尾的请求-->
  </servlet-mapping>
  
  <!-- / /*    /*范围更广,包括jsp的拦截 -->
  
  
  
  <!-- 配置编码过滤器 -->
  <filter>  
        <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
  
  
</web-app>

 

posted @ 2019-07-30 19:53  勤奋的园  阅读(150)  评论(0编辑  收藏  举报