SpringMvc学习笔记(三)

发布时间:2024-03-12 13:01

SpringMvc学习笔记(三)_第1张图片

转发的地址永远也不会改变,不管转发的是action还是什么其他的,关键字是在return的返回参数前面去放置forword:

重定向以及转发的四种方式

第一种:默认的转发

第二种:带action的转发

第三种:重定向

第四种:带action的重定向

前端代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


第一种请求方法
第二种请求方法
第三种请求方法
第四种请求方法
​ ​ ​

后端代码:

主要是forward和redirect这两个参数,总结就是转发的路径是不会改变的,但是重定向给的是第一个案例

package com.wsy.controller;
​
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
​
@Controller
public class MvcServelet {
    @RequestMapping("/one")
    public String one(){
        System.out.println("这是第一种方式");
        return "main";
    }
    @RequestMapping("/by")
    public String by(){
        System.out.println("这是by的方式");
        return "main";
    }
    @RequestMapping("two")
    public String two(){
        System.out.println("这是第二种方式");
        return "forward:/by.action";
    }
    @RequestMapping("three")
    public String three(){
        System.out.println("这是第三种方式");
        return "redirect:/admin/main.jsp";
    }
    @RequestMapping("four")
    public String four(){
        System.out.println("这是第四种方式");
        return "redirect:/by.action";
    }
}

效果展示

第一种

SpringMvc学习笔记(三)_第2张图片

第二种

SpringMvc学习笔记(三)_第3张图片

第三种

SpringMvc学习笔记(三)_第4张图片

第四种

SpringMvc学习笔记(三)_第5张图片

SpringMvc的默认参数类型

1)HttpServeletRequest

2)HttpServeletResponse

3)HttpSession

4)Model

5)Map

6)ModelMap

Map,Model,ModelMap和Request都使用请求作用域进行数据的传递,所以服务器的跳转必须是请求转发

进行数据传递的方式:

后端代码:

 @RequestMapping("/data")
    public String data(HttpServletRequest request, HttpServletResponse response, HttpSession httpSession, Map map, Model model, ModelMap modelMap){
        User user = new User("zhangsan",18);
        request.setAttribute("RequestUser", user);
        httpSession.setAttribute("SessionUser", user);
        map.put("MapUser", user);
        model.addAttribute("ModelUser", user);
        modelMap.addAttribute("ModelMapUser", user);
        System.out.println("进行数据的传输");
        return "main";
    }

前端代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


it is so amazing

<%--@RequestMapping("/data")--%> <%--public String data(HttpServletRequest request, HttpServletResponse response, HttpSession httpSession, Map map, Model model, ModelMap modelMap){--%> <%--User user = new User("zhangsan",18);--%> <%--request.setAttribute("RequestUser", user);--%> <%--httpSession.setAttribute("SessionUser", user);--%> <%--map.put("MapUser", user);--%> <%--model.addAttribute("ModelUser", user);--%> <%--modelMap.addAttribute("ModelMapUser", user);--%> <%--System.out.println("进行数据的传输");--%> <%--return "main";--%> <%--}--%> RequestUser:${RequestUser}
SessionUser:${SessionUser}
MapUser:${MapUser}
ModelUser:${ModelUser}
ModelMapUser:${ModelMapUser}
name:${param.name}

日期处理:

1)前端的界面里面的日期传参到后台当中是没有办法直接去注入的,提交处理

A单个日期处理,要使用注解@DateTimeFormat必须搭配springmvc.xml文件当中的mvc:annotationdriven

前端代码一般都限制了输入的格式,这样就不会出现其他的输入的问题


后端代码首先利用注解先将String类型的数据进行一个格式的转化为Date类型,但是默认的Date类型比较丑,然后调用SimpleDateFormat的format来进行格式的转化就可以在后台进行展示

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
    @RequestMapping("/dateTime")
    public String dateTime(
            @DateTimeFormat(pattern = "yyyy-MM-dd")
            Date dateTime){
        System.out.println(dateTime);
        System.out.println(sf.format(dateTime));
        return "show";
    }

展示的效果如下

SpringMvc学习笔记(三)_第6张图片

 

B类中全局的日期处理,多个Date类型的数据注入的时候就会比较麻烦

注册一个注解,将整个类中的进行处理

@InitBinder
    public void initBinder(WebDataBinder webDataBinder){
        webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(sf, true));
    }

2)将后台的日期格式的数据Date映射到前端会非常的不美观,显示处理

SpringMvc学习笔记(三)_第7张图片

 执行流程:HandlerMapping地址映射器:会解析.action的url来进行处理:

 SpringMvc学习笔记(三)_第8张图片

 SpringMvc学习笔记(三)_第9张图片

 

项目一搬都放在WEB-INF的目录下面,此目录下的动态资源不可以直接访问,只能通过请求转发的方式来进行访问

SpringMvc的拦截器:针对请求和相应进行额外的处理,在请求和响应的过程中去添加预处理、后处理和最终处理

SpringMvc学习笔记(三)_第10张图片

 拦截器执行的时机:

SpringMvc学习笔记(三)_第11张图片

SpringMvc学习笔记(三)_第12张图片

 

实现拦截器的功能:

1)改造登陆的方法,在session当中存储用户的信息,用于权限的验证

2)开发拦截器的功能,实现HanderInerceptor的接口,重写preHandle()的方法

3)在springmvc的配置文件当中注册拦截器

拦截器总体还是感觉很好用的,

controller:

package com.wsy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.http.HTTPBinding;

@Controller
public class MvcController {
    @RequestMapping("/showmain")
    public String showMain(){
        return "main";
    }
    @RequestMapping("/showindex")
    public String showIndex(){
        return "login";
    }
    @RequestMapping("/login")
    public String login(String username, String pwd, HttpServletRequest request){
        System.out.println(username+pwd);
        if ("wsy".equalsIgnoreCase(username)&&"123".equalsIgnoreCase(pwd)) {
            System.out.println("登陆成功");
            request.getSession().setAttribute("username", username);
            return "main";
        }else {
            request.setAttribute("error", "您的账号或者是密码是有问题的");
        }
        return null;
    }
}

interceptor:

package com.wsy.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getSession().getAttribute("username")==null) {
            request.setAttribute("error", "您还没有登录请先去登录!");
            request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
            return false;
        }
        return true;
    }
}

 springmvc拦截器的配置:



    
    
        
        
    
    
        
            
            
            
            
        
    

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号