栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMvc学习笔记(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMvc学习笔记(三)

转发的地址永远也不会改变,不管转发的是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的默认参数类型

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";
    }

展示的效果如下

 

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

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

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

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

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

 

 

 

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

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

 拦截器执行的时机:

 

实现拦截器的功能:

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拦截器的配置:



    
    
        
        
    
    
        
            
            
            
            
        
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号