1.介绍
SpringMVC是实现MVC的轻量级Web框架,底层封装了servlet
2.特点
1.轻量级,简单易学
2.约定优于配置
3.与Spring兼容性好,无缝结合
5.支持直接一个方法对一个请求
6.支持数据的自动封装
7.自动支持JSON的转换
1.前端控制器(DispatcherServlet)
作用是将请求分发到不同的处理器,DispatcherServlet实际是一个Servlet(它继承自HttpServlet基类)。
2.三大组件(SpringMVC初始化是自动加载三大组件)
处理器映射器:HandlerMapping
负责根据URL寻找对应的处理器方法
* 处理器适配器:HandlerAdapter
负责真正的去调用某个处理器方法
* 视图解析器:ViewResolver
负责将逻辑视图转换成物理视图
3.SpringMVC执行流程(11步)
1.spring-mvc.xml
(1)、约束
<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">
</beans>
(2)、核心配置
<!--开启注解组件扫描-->
<context:component-scan base-package="com.itheima.web"/>
<!--开启mvc注解支持-->
<mvc:annotation-driven conversion-service="conversionService"/>
(3)、其他配置
<!--自定义视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/> <!--拼接的前缀-->
<property name="suffix" value=".jsp"/> <!--拼接的后缀-->
</bean>
<!--静态资源手动映射--> 【了解】
<mvc:resources mapping="/img/**" location="/img/"/>
<!--静态资源自动映射--> 【推荐】
<mvc:default-servlet-handler/>
2.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:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--乱码过滤器-->
<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>
1、@Controller 【常用】 :将controller交给ioc容器
2、@RequestMapping【常用】 : 建立url和方法映射
位置: 1.类上:一级路径
2.方法上:二级路径
常用属性:
value/path: 指定当前方法的url地址,一个方法可以绑定多个地址
params:限定前端请求,必须携带指定参数
method:限定请求方式:get、post、put、delete等等
3、@RestController 【常用】:相当于@Controller + @ResponseBody
4、@RequestBody【常用】 :将前端参数中json自动封装为对应对象
5、@ResponseBody :将对象转为指定格式json
6、@RequestParam【常用】 :接收前端请求参数
常用属性
required:默认值true,要求前端必须提供参数,否则报错
defaultValue:给参数提供默认值
name:接收指定前端的参数名(前端name和方法形参不同时可使用)
7、@RequestHeader【了解】 : 接收请求头数据
用法:@RequestHeader("请求头的key名称")
8、@DateTimeFormat 【了解】 : 日期格式化
参数:(pattern = "yyyy-MM-dd")
① 简单类型
② 对象类型
③ 数组类型
④ 集合类型【扩展】
(当后端以集合类型接收参数时,需搭配@RequestParam来使用)
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobbies){}
⑤日期类型
前端
<form action="/dateParam" method="post">
生日:<input type="text" name="birthday"> 【格式:1999-01-15】<br>
<input type="submit" value="日期类型">
</form>
controller
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday){}
⑥文件上传
<!--文件上传工具包-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!--
文件上传解析器 id="multipartResolver" 这个值是固定的
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 限制文件大小,单位B -->
<property name="maxUploadSize" value="10000000"/>
</bean>
<form action="" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="username"> <br>
头像:<input type="file" name="picFile"> <br>
</form>
@RequestMapping("/fileUpload")
public String fileUpload(String username, MultipartFile picFile){
picFile.transferTo(new File("E:\\"+picFile.getOriginalFilename())); // 文件io复制
return "success";
}
①.转发(不携带参数)
@RequestMapping("/requestApi")
public void requestApi(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws ServletException, IOException {
request.getRequestDispatcher("/success.jsp").forward(request,response);
}
(此方式一般用于:转发路径不需要配置的视图解析器的前后缀,用该方式确定明确的路径~~~)
@RequestMapping("/forwardApi")
public String forwardApi(){
//转发
return "forward:/index.jsp";
}
(配置了视图解析器情况下,只返回页面名称,自动拼接前后缀)
@RequestMapping("/quick")
public String quick(){
return "success";
}
②.转发时携带参数
@RequestMapping("/requestApi2")
public void requestApi2(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws ServletException, IOException {
request.setAttribute("message","这是动态信息--");
request.getRequestDispatcher("/success.jsp").forward(request,response);
}
@RequestMapping("/requestApi2")
public ModelAndView requestApi2(ModelAndView modelAndView){
modelAndView.addObject("message","------这是模拟数据----");
modelAndView.setViewName("success");
return modelAndView;
}
@RequestMapping("/requestApi2")
public String requestApi2(Model model){
model.addAttribute("message","这是模拟数据");
return "success";
}
③.重定向
@RequestMapping("/responseApi")
public void responseApi(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException {
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
@RequestMapping("/redirectApi")
public String redirectApi() throws IOException {
return "redirect:/index.jsp";
}
1.介绍
Restful是一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件,主要用于前后端分离的架构。
2.四个常用请求方式
1.介绍
SpringMVC的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理
2.编写拦截器(API)
public class MyIntercepter1 implements HandlerInterceptor {
/*
预处理方法:拦截请求
参数:
request
response
handler:用户访问的目标方法
返回结果:
true:放行
false:拦截
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
代码1
return true;
}
/*
后处理:可以获取处理器方法返回结果【ModelAndView】
参数:
request
response
handler:目标处理器方法
modelAndView:该目标方法执行后返回结果
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
代码2
}
/*
视图渲染完处理的:资源释放
参数:
request
response
handler
ex:异常
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
代码3
}
}
3.配置拦截器
<!--拦截器配置-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/target"/>
<bean class="com.itheima.web.intercepter.MyIntercepter1"></bean>
</mvc:interceptor>
</mvc:interceptors>
4.拦截器链
开发中拦截器可以单独使用,也可以同时使用多个拦截器形成一条拦截器链。
开发步骤和单个拦截器是一样的,只不过注册的时候注册多个,注意这里注册的顺序就代表拦截器执行的顺序。
<!--拦截器配置-->
<!--拦截器的执行顺序是先进后出-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/target"/>
<bean class="com.itheima.web.interceptor.MyIntercepter1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/target"/>
<bean class="com.itheima.web.interceptor.MyIntercepter2"></bean>
</mvc:interceptor>
</mvc:interceptors>
本文实例讲述了Laravel框架源码解析之反射的使用。分享给大家供大家参考,具体如...
工具:Eclipse,Oracle,smartupload.jar;语言:jsp,Java;数据存储:Oracle。...
复制代码 代码如下: % URL="http://news.163.com/special/00011K6L/rss_newstop....
项目中用到的一些特殊字符和图标 html代码 XML/HTML Code 复制内容到剪贴板 div ...
Elasticsearch 是通过 Lucene 的倒排索引技术实现比关系型数据库更快的过滤。特...
错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报...
上篇文章给大家介绍了 Java正则表达式匹配,替换,查找,切割的方法 ,接下来,...
4月11日20:30~22:00通过腾讯会议进行了第二次在线学习讨论我把学习笔记整理一下...
正则忽略大小写 – RegexOptions.IgnoreCase 例如: 复制代码 代码如下: Str = R...
DELETEFROMTablesWHEREIDNOTIN(SELECTMin(ID)FROMTablesGROUPBYName) Min的话保...