一、SpringMVC概述
1.SpringMVC是什么
Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。
Spring MVC 是结构最清晰的 Servlet+JSP+JavaBean 的实现。
2.SpringMVC框架的优点
- 基于MVC架构模式。
- 容易理解上手快,使用简单:可以开发一个注解的SpringMVC项目,SpringMVC也是轻量级的框架,jar包很小,不依赖特定的接口和类。
- 作为Spring的一部分,能够使用Spring框架的IOC容器和Aop编程。
二、SpringMVC的运行原理
三、访问自定义方法
方式一:去除之前的实现控制器接口,改为继承多方法控制器类
注意:如果想要使用多方法控制器,需要降低SpringMVC的版本
第一步:继承多方法控制器
public class MyController02 extends MultiActionController
第二步:配置方法解析器
<!--方法解析器-->
<bean id="paramMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="method"></property>
</bean>
第三步:访问
http://localhost:8080/MyController?method=delete
方式二:基于注解的请求映射
在需要访问的方法上边标明注解@RequestMapping("/add")
接下来在浏览器访问localhost:8080/add
四、参数接收
通过表单的方式接收
@RequestMapping("/add")
public void add(User user){
System.out.println(user);
}
参数通过json的方式 @RequestBody
将页面传递过来的JSON对象转换成Java对象,@RequestBody不能接收表单提交的数据
@RequestMapping("/add")
public void add(@RequestBody User user){
System.out.println(user);
}
接收多个指定的参数 @RequestParam
@RequestMapping("/login")
public void login(@RequestParam String name, @RequestParam String password, @RequestParm("code") String verifyCode){
System.out.println(name+" "+ password);
}
接收的参数为时间类型时,在接收时间参数的类中写一个初始化绑定方法
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // HH:mm:ss
binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true)); //true:允许输入空值,false:不能为空值
}
五、异常处理
在springmvc.xml的配置文件中配置全局异常解析器
<!-- 异常解析器 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">redirect:error.jsp</prop>
</props>
</property>
</bean>
六、静态资源问题
在springmvc.xml的配置文件中配置静态资源释放
<mvc:resources mapping="/static/**" location="/static/"/>
七、AJAX_JSON
1.导入依赖
<!-- json所需要的包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
2.在需要使用json的方法上边标注 @ResponseBody
@RequestMapping("/yuYueMeet")
@ResponseBody
public List<Dept> yuYueMeet(HttpServletRequest request){
User users = (User) request.getSession().getAttribute("users");
List<Dept> deptRy = deptService.selDeptRy(users.getDept());
return deptRy;
}
八、拦截器(过滤器----Filter)
1.创建拦截器类
继承HandlerInterceptorAdapter 或者实现 HandlerInterceptor
package com.xs.interceptor;
import com.xs.entity.User;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* @Author 杨 滢
* @CreateDate 2023-06-14 11:42
**/
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String s = request.getRequestURI() ;
User user = (User)request.getSession().getAttribute("users");
if (user!=null){
//已经登录
return true;
}else {
//未登录
if (s.contains("login") || s.contains("login.jsp") || s.contains("log")){
return true;
}else {
response.setContentType("text/html;character=utf-8");
PrintWriter writer = response.getWriter();
/*writer.write("<script>alert('会话信息已过期,请重新登录')</script>");*/
writer.write("<script>window.location.href='/static/front/login.jsp'</script>");
writer.close();
return false;
}
}
}
}
2.在.xml中配置拦截器
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.xs.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>