2.SpringMVC框架快速入门
- SpringMVC
- 原理
![](../../../我的坚果云/基于Java/Java学习路线/阶段4 Java开发框架/assert/SpringMVC1.JPG)
- 开发步骤
- 导入SpringMVC相关坐标
- 配置SpringMV核心控制器·DispatherSerclet
- 创建Controller类和视图页面
- 使用注解配置Controller类中业务方法的映射地址
- 配置SpringMVC核心文件spring-mvc.xml
- web.xml配置
1 |
|
- spring-mvc配置
1 |
|
- 注解说明
注解 | 说明 |
---|---|
@Controller | 使用在web层实例化Bean |
@RequestMapping | 用于映射url到控制器类或一个特定的处理方法程序,可用于类或方法上;在类上表示所有响应请求的方法都是以该地址作为父路径 |
@RequestParam(“username”) | 限定前端参数的name为username |
@ResponseBody | 不会走视图解析器,会直接返回字符串,作用在方法上搭配@Controller使用 |
@RestController | 作用在类上,不走视图解析器,可代替@ResponseBody使用,其所作用的类下所有方法都只会返回字符串 |
- 重定向和转发
1 | package com.controller; |
- 接受请求参数和数据回显
- usercontroller
1 |
|
- index.jsp
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
- JSON
导入json
乱码解决(在spring-mvc中导入)
1 | <!--Json乱码问题解决--> |
Jackson使用
1 | package com.controller; |
- 拦截器配置
自定义配置
web.xml中配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!--前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--只不匹配jsp-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>Springmvc.xml中配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="cn.justweb"/>
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--注解驱动,自动注入mvc里面的组件-->
<mvc:annotation-driven/>
<!--自定义拦截器的配置-->
<!--先配谁先执行谁-->
<mvc:interceptors>
<!--配置对哪些资源进行拦截操作-->
<mvc:mapping path="/**"/>
<!--配置对哪些资源排除拦截操作,例如登陆和注册-->
<mvc:exclude-mapping path="/user/login"/>
<mvc:exculde-mapping path="/user/regist"/>
<!--拦截器类-->
<bean class="cn.justweb.interceptor.FirstInterceptor"></bean>
<bean class="cn.justweb.interceptor.SecInterceptor"/>
</mvc:interceptors>
</beans>定义一个拦截器
FirstInterceptor
,实现HandlerInterceptor
接口,并重写其中的三个方法第一个拦截器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26//配置的第一个拦截器
public class FirstInterceptor implements HandlerInterceptor {
/**
* 执行流程:
* 拦截器的preHandle方法执行了
* controller中的testInterceptor方法
* 拦截器postHandle方法执行了
* 拦截器的afterCompletion执行了
* */
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器的preHandle方法执行了");
//此处为true的时候才执行下面的事情
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截器postHandle方法执行了");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("拦截器的afterCompletion执行了");
}
}第二个拦截器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30//配置的第二个拦截器
public class SecInterceptor implements HandlerInterceptor {
/**
* 执行流程:
* 拦截器的preHandle方法执行了
* 拦截器2的preHandle方法执行了
* controller中的testInterceptor方法
* 拦截器2的postHandle方法执行了
* 拦截器postHandle方法执行了
* 拦截器2的afterCompletion方法执行了
* 拦截器的afterCompletion执行了
* */
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器2的preHandle方法执行了");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截器2的postHandle方法执行了");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("拦截器2的afterCompletion方法执行了");
}
}测试
1
2
3
4
5
6
7
8
public class SpringMVCHandler {
//拦截器
public String testInterceptor(){
System.out.println("controller中的testInterceptor方法");
return "success";
}
}
- 异常处理
* 处理异常的两种处理方式
简单异常处理器(在springmvc.xml中配置)
自定义异常处理类( 实现HandlerExceptionResolver 接口)
1
2
3
4
5
6
7
8
9
10
11<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--默认错误视图-->
<property name="defaultErrorView" value="error"></property>
<property name="exceptionMappings">
<map>
<entry key="也可以是自定义异常类" value="错误视图"></entry>
<entry key="java.lang.ClassCastException" value="error"></entry>
</map>
</property>
</bean>使用@ExceptionHandler注解实现异常处理(在controller中使用)。
1
2
3
4
5
6
7
public String exception(MyException e){
System.out.printrl(e.getMessage());
e.printStackTrance();
return "exception";
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jilfoyle!