本文用于记录本人学习springMVC的过程参考教程,感谢Sunnier大大的博客,这里基本借鉴他的教程完成每个步骤:
https://www.cnblogs.com/sunniest/p/4555801.html
本章的源代码地址是:https://download.youkuaiyun.com/download/romulusla01/11251738
一、创建一个SpringMvcHelloWorld
1、创建Maven project
(由于当中报错Unsupported major.minor version 52.0:,名字改为SpringMvcHelloWorld,与图片不一致)

生成项目如下

2、修改pom.xml,增加如下代码
进入https://mvnrepository.com/,找到想要的jar,复制其dependency代码


org.springframework
spring-web
4.1.2.RELEASE
compile
org.springframework
spring-webmvc
4.1.2.RELEASE
compile
3、配置web.xml
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:**/springmvc-servlet.xml</param-value>
</init-param>
<!-- <load-on-startup>1</load-on-startup> -->
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
4、在src下添加springmvc-servlet.xml配置文件 <?xml version="1.0" encoding="UTF-8"?>
<!-- scan the package and the sub package -->
<context:component-scan base-package="test.SpringMVC.*"/>
<!-- don't handle the static resource -->
<mvc:default-servlet-handler />
<!-- if you use annotation you must configure following setting -->
<mvc:annotation-driven />
<!-- configure the InternalResourceViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
5、在WEB-INF文件夹下创建名为jsp的文件夹,用来存放jsp视图。创建一个hello.jsp,在body中添加“Hello World

6、建立包及Controller

7、编写Controller代码
package test.SpringMVC.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/mvc")
public class MvcController {
@RequestMapping("/sayhello “)
public String sayhello (){
return “hello”;
}
}
当请求sayhello时会映射到此方法中,返回的字符串 hello会被配置拼接为 WEB-INF/jsp/hello.jsp,并展示出来。
8、启动服务器,键入
http://localhost:8080/SpringMvcHelloWorld/mvc/sayhello

二、配置解析
1.Dispatcherservlet
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。
2.InternalResourceViewResolver
视图名称解析器
3.以上出现的注解
@Controller 负责注册一个bean 到spring 上下文中
@RequestMapping 注解为控制器指定可以处理哪些 URL 请求
三、SpringMVC常用注解
@Controller
负责注册一个bean 到spring 上下文中
@RequestMapping
注解为控制器指定可以处理哪些 URL 请求
@RequestBody
该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上
@ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
@ModelAttribute
在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法
在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中
@RequestParam
在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法
@PathVariable
绑定 URL 占位符到入参
@ExceptionHandler
注解到方法上,出现异常时会执行该方法
@ControllerAdvice
使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常
四、传递参数,修改MvcController,新增sayhellotoRome.jsp
//请求mvc/sayhellotoRome
@RequestMapping(value=”/sayhellotoRome",method=RequestMethod.GET)
public String sayhellotoRome(ModelMap model){
model.addAttribute(“name”, “rome”);
return “sayhellotoRome”;//映射sayhellotoRome.jsp
}
//sayhellotoRome.jsp内容
<%@ page contentType=“text/html; charset=UTF-8” %>
Hello ${name}
http://localhost:8080/SpringMvcHelloWorld/mvc/sayhellotoRome  五、自动装箱 1、创建User类   2、修改mvcController  浏览器中输入: http://localhost:8080/SpringMvcHelloWorld/mvc/toUser?user.name=rome&user.age=1 成功打印出  六、使用InitBinder来处理Date类型的参数

七、向前台传递参数



八、使用ajax调用





九、在mvcController中用redirect方式跳转




十、文件上传
1、修改pom.xml

(注意:这里添加后,我报错了,redeploy项目之后就好了)
2、在SpringMVC配置文件中加入

3、修改mvcController

4、修改user.jsp

5、http://localhost:8080/SpringMvcHelloWorld/mvc/showUser


上传成功
十一、使用@RequestParam注解指定参数的name

http://localhost:8080/SpringMvcHelloWorld/mvc/testRequestParam?id=1&name=rome


十二、RESTFul风格的SringMVC
1、新增RestController类


2、form表单发送put和delete请求
在web.xml中配置

在前台可以用以下代码产生请求

http://localhost:8080/SpringMvcHelloWorld/mvc/sayhello


十三、返回json格式的字符串
1、修改pom.xml




十四、异常的处理


3.另一种处理全局异常的方法


http://localhost:8080/SpringMvcHelloWorld/mvc/sayhello

十五、设置一个自定义拦截器
拦截器的作用
参考:https://blog.youkuaiyun.com/fd2025/article/details/80564584
1.创建一个MyInterceptor类,并实现HandlerInterceptor接口

2.在SpringMVC的配置文件中配置

十六、表单的验证(使用Hibernate-validate)及国际化
1、编辑pom.xml


此处不宜用过高版本的hibernate,笔者惨痛经历(我是jdk1.7的,用了hibernate6以上的版本,反复报错,Unsupported major.minor version 52.0:)最后才发现要降低hibernate版本
2.编写实体类User并加上验证注解

3.在jsp中使用SpringMVC的form表单

4、formController


http://localhost:8080/SpringMvcHelloWorld/form/addUser


5.错误信息自定义
在src目录下添加locale.properties

在SpringMVC配置文件中配置


6.国际化显示
在src下添加locale_zh_CN.properties




locale.jsp

http://localhost:8080/SpringMvcHelloWorld/locale

或者(参考:https://blog.youkuaiyun.com/xiatianlong_xtl/article/details/52610606)


http://localhost:8080/SpringMvcHelloWorld/locale/testLocaleChina

十七、压轴大戏–整合SpringIOC和SpringMVC

Menu

MenuService

MenuController

searchMenuList.jsp


http://localhost:8080/SpringMvcHelloWorld/menu/searchMenuList

十八、SpringMVC运行原理
- 客户端请求提交到DispatcherServlet
- 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
- DispatcherServlet将请求提交到Controller
- Controller调用业务逻辑处理后,返回ModelAndView
- DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
- 视图负责将结果显示到客户端
十九、SpringMVC与struts2的区别
1、springmvc基于方法开发的,struts2基于类开发的。springmvc将url和controller里的方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。方法执行结束,形参数据销毁。springmvc的controller开发类似web service开发。
2、springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。
3、经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。
本文记录了学习SpringMVC的过程,包括创建SpringMvcHelloWorld项目,修改pom.xml、配置web.xml等步骤。还介绍了SpringMVC的配置解析、常用注解、参数传递、文件上传、异常处理等内容,最后阐述了SpringMVC运行原理及与struts2的区别。
8835

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



