金鞍玉勒寻芳客,未信我庐别有春。这篇文章主要讲述Spring MVC day01 请求参数问题及常用注解相关的知识,希望能为你提供帮助。
文章目录
- 一、Spring MVC基本概念
- 1-1 Spring MVC的优势
- 1-2 SpringMVC 和 Struts2 的优略分析
- 二、 SpringMVC 的入门
- 2-1 SpringMVC 的入门案例
- 2-2 入门程序执行流程
- 2-3 入门案例中涉及的组件
- 2-4 ``说明
- 2-5 RequestMapping 注解
- 三、请求参数
- 3-1 基本类型参数
- 3-2 POJO 类型参数
- 3-3 解决POST提交乱码问题
- 3-4 给集合属性数据封装
- 3-5 自定义类型转换器
- 3-6 获取Servlet原生api
- 四、 常用注解
- 4-1 RequestParam
- 4-2 RequestBody
- 4-3 PathVaribale
- 4-4 RequestHeader(不常用)
- 4-5 CookieValue(不常用)
- 4-6 ModelAttribute
- 4-7 SessionAttribute
一、Spring MVC基本概念 1-1 Spring MVC的优势 1-2 SpringMVC 和 Struts2 的优略分析 二、 SpringMVC 的入门 2-1 SpringMVC 的入门案例
- 创建WEB工程,引入开发的jar包
<
properties>
<
spring.version>
5.0.2.RELEASE<
/spring.version>
<
/properties>
<
dependencies>
<
dependency>
<
groupId>
org.springframework<
/groupId>
<
artifactId>
spring-context<
/artifactId>
<
version>
$spring.version<
/version>
<
/dependency>
<
dependency>
<
groupId>
org.springframework<
/groupId>
<
artifactId>
spring-web<
/artifactId>
<
version>
$spring.version<
/version>
<
/dependency>
<
dependency>
<
groupId>
org.springframework<
/groupId>
<
artifactId>
spring-webmvc<
/artifactId>
<
version>
$spring.version<
/version>
<
/dependency>
<
dependency>
<
groupId>
javax.servlet<
/groupId>
<
artifactId>
servlet-api<
/artifactId>
<
version>
2.5<
/version>
<
scope>
provided<
/scope>
<
/dependency>
<
dependency>
<
groupId>
javax.servlet.jsp<
/groupId>
<
artifactId>
jsp-api<
/artifactId>
<
version>
2.0<
/version>
<
scope>
provided<
/scope>
<
/dependency>
<
/dependencies>
- 配置web.xml配置文件
<
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启动时加载对象 -->
<
load-on-startup>
1<
/load-on-startup>
<
/servlet>
<
servlet-mapping>
<
servlet-name>
dispatcherServlet<
/servlet-name>
<
url-pattern>
/<
/url-pattern>
<
/servlet-mapping>
- 编写springmvc.xml的配置文件
<
?xml version="1.0" encoding="UTF-8"?>
<
beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<
!--配置Spring配置容器时要扫描的包-->
<
context:component-scan base-package="com.qgc">
<
/context:component-scan>
<
bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<
property name="prefix" value="https://www.songbingjia.com/WEB-INF/pages/"/>
<
property name="suffix" value="https://www.songbingjia.com/android/.jsp"/>
<
/bean>
<
!--Spring开启注解-->
<
mvc:annotation-driven>
<
/mvc:annotation-driven>
<
/beans>
- 编写HelloController控制器类
@Controller
public class HelloController
@RequestMapping(path = "/hello")
public String sayHello()
System.out.println("Spring配置成功");
return "success";
2-2 入门程序执行流程 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bNcnySHF-1581502120032)(https://raw.githubusercontent.com/1519059197/img_note/master/小书匠/1581488134957.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jN4S48bi-1581502120032)(https://raw.githubusercontent.com/1519059197/img_note/master/小书匠/springmvc执行流程原理.jpg)]
2-3 入门案例中涉及的组件
- DispatcherServlet:前端控制器
- HandlerMapping:处理器映射器
- Handler:处理器
- HandlAdapter:处理器适配器
- View Resolver:视图解析器
- View:视图
<
mvc:annotation-driven>
说明
<
!-- 上面的标签相当于 如下配置-->
<
!-- Begin -->
<
!-- HandlerMapping -->
<
bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<
/bean>
<
bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<
/bean>
<
!-- HandlerAdapter -->
<
bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<
/bean>
<
bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter">
<
/bean>
<
bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
<
/bean>
<
!-- HadnlerExceptionResolvers -->
<
bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
<
/bean>
<
bean class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver">
<
/bean>
<
bean class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver">
<
/bean>
<
!-- End -->
2-5 RequestMapping 注解
- RequestMapping可以放在类上,下面代码访问路径就为:项目名称/user/hello
@Controller
@RequestMapping(path = "/user")
public class HelloController
@RequestMapping(path = "/hello")
public String sayHello()
System.out.println("Spring配置成功");
return "success";
- RequestMapping的属性
@RequestMapping(path = "/hello")
public String getParam(String username)
System.out.println("用户名"+username);
return "success";
3-2 POJO 类型参数 直接写上实体类即可
@RequestMapping(path = "/form")
public String getParams(Account account)
System.out.println(account);
return "success";
3-3 解决POST提交乱码问题 在web.xml中加入以下代码即可
<
!--配置解决乱码的过滤器-->
<
filter>
<
filter-name>
characterEncodingFilter<
/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>
characterEncodingFilter<
/filter-name>
<
url-pattern>
/*<
/url-pattern>
<
/filter-mapping>
3-4 给集合属性数据封装 JSP页面编写方式:
list[0].属性
或者是map[key属性].value属性
3-5 自定义类型转换器
- 写一个自定义类型转换器实现Converter接口
public class StringToDate implements Converter<
String, Date>
/**
* 自定义类型转换器
*
* @param source 传入的参数
* @return
*/
@Override
public Date convert(String source)
if (source == null)
throw new RuntimeException("参数不能为空");
try
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// 解析字符串
Date date = df.parse(source);
return date;
catch (Exception e)
throw new RuntimeException("类型转换错误");
- 注册自定义类型转换器,在springmvc.xml配置文件中编写配置
<
!--配置自定义转换器-->
<
bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<
property name="converters">
<
set>
<
bean class="cn.itcast.utils.StringToDateConverter"/>
<
/set>
<
/property>
<
/bean>
<
!--Spring开启注解-->
<
mvc:annotation-driven conversion-service="conversionService">
<
/mvc:annotation-driven>
3-6 获取Servlet原生api
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request,
HttpServletResponse response,
HttpSession session)
System.out.println(request);
System.out.println(response);
System.out.println(session);
四、 常用注解 4-1 RequestParam 例:
//将前端的name值传给username
@RequestMapping("/useRequestParam")
public String useRequestParam(@RequestParam("name") String username)
4-2 RequestBody 例:
@RequestMapping("/useRequestBody")
public String useRequestBody(@RequestBody(required=false) String body)
4-3 PathVaribale 例:
@RequestMapping("/usePathVariable/id")
public String usePathVariable(@PathVariable("id") Integer id)
4-4 RequestHeader(不常用) 例:
@RequestMapping("/useRequestHeader")
public String useRequestHeader(@RequestHeader(value="https://www.songbingjia.com/android/Accept-Language",required=false)String requestHeader)
4-5 CookieValue(不常用)
@RequestMapping("/useCookieValue")
public String useCookieValue(@CookieValue(value="https://www.songbingjia.com/android/JSESSIONID",required=false) String cookieValue)
4-6 ModelAttribute
- 方式一:在方法名上加ModelAttribute
@RequestMapping(path = "/test2")
public String saveUser(User user)
System.out.println(user);
return "success";
@ModelAttribute
public User modelAttribute(String uname)
User user = new User();
user.setAge(99);
user.setBirthday(new Date());
user.setUname(uname);
return user;
- 方式二:不适用返回值
@RequestMapping(path = "/test3")
public String saveUser1(@ModelAttribute User user)
System.out.println(user);
return "success";
@ModelAttribute
public void modelAttribute(String uname, Map<
String,User>
map)
User user = new User();
user.setAge(99);
user.setBirthday(new Date());
user.setUname(uname);
map.put("abc",user);
4-7 SessionAttribute 例:
前端页面
<
a href="https://www.songbingjia.com/android/user/setSessionAttribute">
设置值<
/a>
<
a href="https://www.songbingjia.com/android/user/getSessionAttribute">
取出值<
/a>
<
a href="https://www.songbingjia.com/android/user/delSessionAttribute">
删除值<
/a>
后端
@SessionAttributes(value="https://www.songbingjia.com/android/abc",types = String.class)
public class HelloController
@RequestMapping("/setSessionAttribute")
public String setSessionAttribute(Model model)
model.addAttribute("abc","123e");
return "success";
@RequestMapping("/getSessionAttribute")
public String getSessionAttribute(ModelMap modelMap)
Object o = modelMap.get("abc");
System.out.println(o);
return "success";
@RequestMapping("/delSessionAttribute")
public String delSessionAttribute(SessionStatus status)
status.setComplete();
return "success";
推荐阅读
- Go 每日一库之 gorilla/securecookie
- 题解——冒泡+二分查找
- Go 每日一库之 colly
- 为 tunny 提交的一次 PR
- 如何禁用WordPress主题编辑器
- 如何自定义主题中的get_the_post_navigation
- 如何更改WordPress页面中的主页按钮图像()
- 如何控制WordPress Twenty Twelve主题中的响应式导航菜单()
- 如何在WordPress 3中将自定义字段添加到自定义帖子类型()