spring-mvc
model 模型 - 数据和操作数据的逻辑(狭义的就是数据) 包括了实体类和业务类(例如 User,UserService)
view 视图 - 数据展现, 包括(jsp, jstl, el)
controller 控制器 把模型和视图关联在一起, 包括servlet
作用 : 让程序的各个部分分工清晰,各司其职。让程序的可维护性提高。
使用步骤 :
1. pom.xml文件中添加spring-webmvc等依赖
<!--决定了是maven的web项目-->
<packaging>war</packaging>
<!-- spring 对mvc的支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.17.RELEASE</version>
</dependency>
<!-- 添加servlet相关依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope> <!-- tomcat已经提供了该jar包,此jar包只工作在编译环境 -->
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope> <!-- tomcat已经提供了该jar包,此jar包只工作在编译环境 -->
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 文件上传(可选) -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<!-- 加入json转换的jar包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.1</version>
</dependency>
2. 在spring-mvc.xml中添加mvc的xml命名空间
3. 手动补充一个src/main/webapp目录
src/main/webapp/WEB-INF/web.xml
在配置tomcat时选择 项目名:war exploded
web-xml :
<!-- 职责:
1.作为统一入口
2.创建spring容器
3.在tomcat启动时,就把spring容器创建好
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指明了spring配置文件的位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 在tomcat启动时,就创建这个servlet,并初始化该servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
<!-- 给 DispatcherServlet 指定路径
假设浏览器 /hello 没有,会找 / 这个路径
/s1 没有,会找 / 这个路径
只要没有其他servlet能够精确匹配这个请求路径,这个请求都会被 / 的这个servlet来处理
-->
</servlet-mapping>
<!-- spring 提供的字符编码过滤器 -->
<filter>
<filter-name>encoding</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>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4. 控制器
@Controller
public class 控制器类{
@RequestMapping("/请求路径")
public String 控制器方法(){
}
}
// 控制器类要交给spring容器管理
<bean id="helloController" class="com.westos.controller.HelloController"/>
并spring-mvc中加入:`<mvc:annotation-driven/>` 来启用mvc的相关功能
5. 处理视图
控制器方法返回值为视图名,加上前缀后缀便构成视图路径
<mvc:view-resolvers>
<mvc:jsp prefix="/" suffix=".jsp"/>
</mvc:view-resolvers>
控制器根据路径用请求转发跳转
请求被处理的流程 :
1) 请求从浏览器发送到tomcat, 地址为:http://localhost:8080/hello
2) tomcat先将该路径与servlet进行匹配,结果没有精确的地址与之匹配,就找到了 / 这个地址
/ 地址对应的是DispatcherServlet,由它来处理请求
3) DispatcherServlet 再到spring容器中找控制器类
把每个控制器中带有@RequestMapping的方法路径与请求路径进行匹配,
4) 匹配到了就执行该方法, 如果匹配不到报404错误
5) 根据方法的返回结果找到jsp视图
6) 由jsp视图生成html代码作为响应返回给浏览器
6. 接收请求参数
1) 把方法参数和请求参数直接对应
2) 写一个实体类型,把实体的属性与请求参数对应
3) 路径参数(把参数值不是写在?之后,而是包含在路径当中)
/deleteUser?id=1 传统写法
/deleteUser/1 路径参数 要删除1号用户
/deleteUser/2 要删除2号用户
路径参数可以通过@PathVariable 与方法参数一一对应
@RequestMapping("/deleteUser/{x}")
public String 控制器方法(@PathVarible("x") int id) {}
7. 使用模型数据
Model 接口, 代表了模型数据, 它也是加在控制器方法之上 可以直接使用它的实现类ModelMap或Map
public String 控制器方法(请求参数, Model model) {}
向模型添加数据: model.addAttribute("变量名", 值);
model中的数据在转发之前,都会被存入request作用域
springmvc中常见错误
400 错误 :
1) 发生在请求参数赋值给方法参数时,发生了类型转换问题
例如:字符串转整数错误,可以用Integer包装类
字符串转日期 对于日期需要加 @DateTimeFormat(pattern="日期格式")2) 中文乱码 : 可以配置spring提供的字符编码过滤器
静态资源的404错误:
静态资源是指 图片、css、html、js
原因是DispatcherServlet的路径是/ 跟tomcat中处理图片的Servlet路径冲突了
所以所有图片的请求被DispatcherServlet所处理,把图片的路径当做了控制器路径
解决办法:
在spring配置文件中加入:`<mvc:default-servlet-handler/>`
<filter>
<filter-name>encoding</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>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/ *</url-pattern>
</filter-mapping>
8. json格式的响应
json: javascript object notation (javascript对象标记)
响应格式 : 文本格式,类似于javascript的对象写法
{
"username":"张三",
"age":18
}
步骤 :
1) pom文件中加入相应的依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.1</version>
</dependency>
2) 控制器方法上添加 @ResponseBody注解, 可以把方法的返回值(可以是集合,数组,实体类)转换为json字符
java中 map以及实体类 会被转换为json中的对象 {属性名:属性值}
java中 list或数组 会被转换为json中的数组 [元素1, 元素2, ...]
json常见注解 :
1) @JsonFormat 可以对日期类型进行格式化
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 注意加8小时才是北京时间
2) @JsonIgnore 可以在转换时忽略加了@JsonIgnore的属性
3) @JsonProperty("新的属性名") 可以在转换时改变属性的名字
Spring MVC是一个用于构建Web应用程序的全面框架,它将模型、视图和控制器分离,提高了程序的可维护性。本文详细介绍了Spring MVC的使用步骤,包括添加依赖、配置web.xml、创建控制器、处理视图、接收请求参数、使用模型数据、处理JSON响应以及解决常见错误。通过这些步骤,你可以更好地理解和应用Spring MVC。
1899

被折叠的 条评论
为什么被折叠?



