转发的地址永远也不会改变,不管转发的是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拦截器的配置: