前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习笔记-全栈-web开发-16-SpringMVC

Java学习笔记-全栈-web开发-16-SpringMVC

作者头像
devi
发布2021-08-18 15:44:46
6210
发布2021-08-18 15:44:46
举报
文章被收录于专栏:搬砖记录

1. 入门

1.1 简介

MVC

  • M:Model
  • V:View
  • C:Controller - servlet/action/controller

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

Spring MVC组成:

  • DispatcherServlet
  • 处理器映射【找控制器】
  • 适配器【调用控制器的方法】
  • 控制器【业务】
  • 视图解析器
  • 视图

1.2 入门案例

  1. 导入SpringMVC 依赖
  2. web.xml配置DispatcherServlet
代码语言:javascript
复制
 <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

3. WEB-INF目录下创建DispatcherServlet-servlet.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
		
</beans>

4. 配置DispatcherServlet-servlet.xml

代码语言:javascript
复制
<!-- 1. 配置处理器映射,springmvc默认的处理器映射器
			 BeanNameUrlHandlerMapping:根据bean的name属性的url去找handlerController -->
		<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
		<!-- 2. 配置处理器适配置器执行Controller -->
		<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
		<!-- 3.配置一个控制器 -->
		<bean name="/user.do" class="com.gyf.backoffice.web.controller.UserController"/>
		<!-- 4.配置springmvc视图解析器
			视图解析器解析的视频路径为:前缀 + 后缀 -->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<property name="prefix" value="/WEB-INF/views"/>
			<property name="suffix" value=".jsp"/>
		</bean>

5. 创建Controller

在这里插入图片描述
在这里插入图片描述

6. 创建页面

在这里插入图片描述
在这里插入图片描述

7. 运行项目,访问localhost:8080

1.3 SpringMVC执行流程

在这里插入图片描述
在这里插入图片描述

1.3.1 控制器映射

BeanNameUrlHandlerMapping 根据url请求去匹配bean的name属性,从而获取Controller

在这里插入图片描述
在这里插入图片描述

SimpleUrlHandlerMapping 根据浏览器url匹配简单url的key,key就是Controller的id找到Controller

在这里插入图片描述
在这里插入图片描述

ControllerClassNameHandlerMapping 根据类名(MyController)类名.do来访问,类名首字母小写

在这里插入图片描述
在这里插入图片描述
小结
在这里插入图片描述
在这里插入图片描述

1.3.2 处理器适配器

SimpleControllerHandlerAdapter

在这里插入图片描述
在这里插入图片描述

调用controller里面方法,返回modelAndView

在这里插入图片描述
在这里插入图片描述

HttpRequestHandlerAdapter 与上面的最大区别在于它没有返回值。 编码麻烦 执行控制器 负责调用实现HttpRequestHandler接口的控制器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

两种处理器适配器可以共存。

1.3.3 命令控制器(了解)

Springmvc通过命令设计模式接受页面参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果bean中配置name,都要加上/斜杠

在这里插入图片描述
在这里插入图片描述

1.4 解决乱码

POST乱码

代码语言:javascript
复制
<!-- 配置编码过滤器  -->
  	<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>
  	</filter>
	
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

GET乱码(Tomcat7才会)

在这里插入图片描述
在这里插入图片描述

2. SpringMVC注解开发(精髓)

2.1 尝试

  1. 修改DispatchServlet-Servlet.xml
代码语言:javascript
复制
 <!-- 1.配置注解扫描位置 -->
<context:component-scan base-package="com.gyf.backoffice.web.controller"/>
		
<!-- 2. 配置处理器映射,通过注解来查找 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 3.配置注解处理适配器来执行控制器的方法 -->	
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
		
<!-- 配置springmvc视图解析器
			视图解析器解析的视频路径为:前缀 + 后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views"/>
	<property name="suffix" value=".jsp"/>
</bean>
  1. 更改controller
在这里插入图片描述
在这里插入图片描述

2. 访问测试

3. 简化xml文件

在这里插入图片描述
在这里插入图片描述

2.2 RequestMapping(重点)

写法:

在这里插入图片描述
在这里插入图片描述

在类上面也可以写RequestMapping,表示所有方法访问的根路径

2.2.1 数据接收

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 小结

控制器中传参的类型,在表单中直接使用传参类型的属性即可。

比如: 传参为User,直接使用User中的username、 传参为UserExt,直接使用UserExt中的map(infos[‘key’])、list(userList[0])

2.3 RequestParam

用于获取前端传来的数据,相当于request.getparameter()

在这里插入图片描述
在这里插入图片描述

2.4 RequestBody 和 ResponseBody

@ResponseBody把后台pojo转换json对象,返回到页面。(用于java对象–>json) @RequestBody接受前台json数据,把json数据自动封装javaBean(用于json–>java对象

注意,使用上述注解之后,就不能跳转到模板引擎,所有的return值都封装到HTTPbody中传输。

@ResponseBody用的多,后台给前端json数据 但是@RequestBody用的少,前端不一定给后台json

3. SpringMVC拦截器

Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理

3.1 登录拦截器

代码语言:javascript
复制
public class LoginInterceptor implements HandlerInterceptor{
	//controller执行后且视图返回后调用此方法
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("返回视图前  后处理");
	}
	//controller执行后但未返回视图前调用此方法
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		System.out.println("未返回视图前 后处理....");
	}

	// controller执行前调用此方法
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("预处理....");
		//如果是登录页面则放行
		if(request.getRequestURI().indexOf("login.do")>=0){
			return true;
		}
		HttpSession session = request.getSession();
		//如果用户已登录也放行
		if(session.getAttribute("user")!=null){
			return true;
		}
		//用户没有登录挑战到登录页面
		request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
		
		return false;
	}
}

控制器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拦截所有的请求,使用/**, 如果拦截的路径在项目不存在,直接报错

前后端数据交互重要注解总结(重点)

@RequestMapping (包括GetMapping等衍生注解)

  • 控制器访问路由

@RequestParam

  • 参数传递

@PathVariable

  • 获取路径参数

@RequestBody

  • 获得json到javabean中

@ResponseBody

  • 将javabean传递为json
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 入门
    • 1.1 简介
      • 1.2 入门案例
        • 1.3 SpringMVC执行流程
          • 1.3.1 控制器映射
          • 1.3.2 处理器适配器
          • 1.3.3 命令控制器(了解)
        • 1.4 解决乱码
        • 2. SpringMVC注解开发(精髓)
          • 2.1 尝试
            • 2.2 RequestMapping(重点)
              • 2.2.1 数据接收
              • 2.2.2 小结
            • 2.3 RequestParam
              • 2.4 RequestBody 和 ResponseBody
              • 3. SpringMVC拦截器
                • 3.1 登录拦截器
                • 前后端数据交互重要注解总结(重点)
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档