SpringMVC学习日志三

Posted kklb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC学习日志三相关的知识,希望对你有一定的参考价值。

一、回顾

1.1 如果接受的参数为日期时间类型,需要在controller中进行处理。

     @InitBinder

     使用实体类封装时间类型 @DateTimeFormat

1.2 如何保存数据让网页获取该数据。

  ModelAndView:

  Model: 默认为request作用域

  Map:

  HttpServletRequest:

  HttpSession:

  @SessionAttributes(name=)

1.3 处理静态资源。

    如果DispatcherServlet处理的请求地址为/,那么它也会处理静态资源。

  在配置文件中使用<mvc:default-servlet-handler> 不处理静态资源。

1.4 如何使用重定向。Redirect

1.5 Springmvc 完成ajax功能。

    Ajax时服务器响应的数据类型。 html, json

    响应的结果是html @ResponseBody 但是它会出现乱码。StringHttpMessageConvert.

    响应的结果是Json类型。需要借助jackson的jar包以及@ResponseBody 

二、文件上传

  1.导入jar包

技术图片

  2.网页。

  表单必须是post提交,编码必须是multipart/form-data  文件上传文本框必须起名。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="addStudent" method="post" enctype="multipart/form-data" >
        姓名:<input type="text" name="name"><br/> 
        年龄:<input type="text" name="age"><br/> 
        请选择上传的文件:<input type="file" name="myfile" /><br /> 
        <input type="submit" value="上传">
    </form>
</body>
</html>

  3.springmvc中配置文件上传解析器。

  <!-- 配置文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置文件上传的大小 -->
        <property name="maxUploadSize" value="20971520"></property>
    </bean>

  4.在控制层处理代码

package com.zhiyou100.klb.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class UploadController 

    @RequestMapping("upload")
    public String upload(MultipartFile myfile,HttpServletRequest request) 
        //1.获取文件上传的真实保存路径
        String path = request.getServletContext().getRealPath("/upload");
        System.out.println(path);
        //2.创建一个文件对象
        File file = new File(path);
        if(!file.exists()) 
            file.mkdirs();
        
        
        //3.获取文件名
        String name = myfile.getOriginalFilename();
        System.out.println(name);
        File targetFile = new File(path + "/" + name);
        
        try 
            FileUtils.writeByteArrayToFile(targetFile, myfile.getBytes());
         catch (IOException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
        return "redirect:index.jsp";
    

三、拦截器(拦截都是控制层的地址。 filter: )

  1.创建一个类实现接口 HandlerInterceptor

  2.重写接口的中方法

package com.zhiyou100.klb.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 MyInterceptor implements HandlerInterceptor 

    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception 
        System.out.println("请求处理完成后执行的方法");

    

    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception 
        System.out.println("==========");

    

    @Override
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception 
        // TODO Auto-generated method stub
        System.out.println("起始点");
        return true;//如果返回true表示允许通过
    

  3.把创建的类配置到springmvc文件中。

  <!-- 配置拦截器 -->
    <mvc:interceptors>
        <!-- 可配置多个拦截器 -->
        <mvc:interceptor>
            <!-- **表示user下所有的子目录以及请求地址 -->
            <mvc:mapping path="/user/**"/>
            <mvc:exclude-mapping path="/user/list.do"/>
            <bean class="com.zhiyou100.klb.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

 四、数据校验

  1.导入jar包

技术图片

  2.在相应的实体类中加入注解

技术图片

   3.在控制层接受参数时。

    @RequestMapping("register")    //requestMapping:表示的就是你的访问地址
    public String register(@Valid Users user,BindingResult br,Model model) 
        if(br.hasErrors()) 
            List<FieldError> fieldErrors = br.getFieldErrors();
            Map<String,Object> errorMsg = new HashMap<>();
            for(FieldError f:fieldErrors) 
                errorMsg.put(f.getField(), f.getDefaultMessage());
            
            model.addAttribute("errorMsg", errorMsg);
            return "register";
         else 
            list.add(user);
            return "forward:list";
        
    

  4.在.jsp文件中接收错误信息

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    欢迎注册
    <form action="/SpringMVC-user/user/register" method="post">
        账号:<input type="text" name="name" >$errorMsg.name <br/>
        密码:<input type="text" name="password">$errorMsg.password <br/>
        电话:<input type="text" name="phone">$errorMsg.phone <br/>
        <input type="submit" value="注册">
        <input onclick="location.href=‘javascript:history.go(-1)‘" type="button" value="返回">
    </form>
</body>
</html>

  5.常见注解

技术图片

 

以上是关于SpringMVC学习日志三的主要内容,如果未能解决你的问题,请参考以下文章

2023/2/14 大数据实习日志

SpringMVC学习日志三

2023/2/10 大数据实习日志

Spring学习日志二

实习总结日志

2023.4.3学习日志