SpringMVC是一个基于MVC模式的WEB框架,它解决WEB开发中常见的问题(参数接收、文件上传/下载、表单验证、国际化、等等),使用非常简单,SpringMVC作为Spring中的一个模块,可以与Spring无缝集成。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
spring mvc 执行流程:
导入jar包:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
新建一个spring mvc 的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--配置bean-->
<bean id="/hello" class="cn.mesmile.springmvc.demo.ControllerDemo1">
</bean>
<!--扫描包-->
<context:component-scan base-package="cn.mesmile.springmvc.demo">
</context:component-scan>
<!--spring mvc 注解支持-->
<mvc:annotation-driven/>
<!--spring mvc 静态资源放行-->
<mvc:default-servlet-handler/>
<!--解决 后台到前台 的中文乱码问题-->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
</beans>
配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<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"
metadata-complete="false">
<servlet>
<!--①配置springmvc核心控制器 DispatcherServlet-->
<servlet-name>core</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--②服务器启动的时候,去加载springmvc配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!-- 配置拦截请求的路径 / 符合RESTful风格编程 -->
<servlet-name>core</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--设置spring自带的过滤器中文乱码解决 解决前台到后台的乱码问题-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
用mvc的方式一,实现controller接口:
public class ControllerDemo1 implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
// ①跳转路径
// httpServletResponse.sendRedirect("https://www.baidu.com/");
Employee employee = new Employee();
employee.setUsername("姓名");
ModelAndView modelAndView = new ModelAndView();
// 设置值
modelAndView.addObject("data", "数据");
// 设置对象
modelAndView.addObject(employee);
// ②转发
modelAndView.setViewName("/WEB-INF/test.jsp");
return modelAndView;
}
}
实体类:
public class Employee {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Employee{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
测试:
用mvc的方式二,注解方式:
spring mvc 默认是转发:转发时候地址栏不会发生变化。
三、在spring mvc 中配置视图解析器
在spring mvc的配置文件中配置 视图解析器:
在返回值中,用到了 forward的时候会让视图解析器失效。
在返回值中,用到了 redirect的时候会让视图解析器失效。