(2019.7)能让springMVC跑起来的条件
springMVC是用来负责管理页面和后台的交互的。他就像是一个管家一样。什么事先经过我,我我虽然不能处理,但是我能给你找人处理。这里我把springMVC称为是老管家。
# # 老管家都干了什么事呢?
首先是将前端的请求页面拦截下来,因为我们在前端URL地址栏输入请求地址,是希望后台给我们处理的。不使用框架的话,就直接处理,但是处理起来过程有点麻烦。
- 1. 想要让老管家来管这件事,就要找老管家来:(引入springMVC的相关jar包,或者使用Maven的话,就引入相关的依赖)。于是老管家来了。
老管家干的第一件事是拦截请求,这要怎么做呢?
- 2. 在web.xml文件中加入配置,这样请求就可以给老管家管理了
[code] <!-- 配置springmvc的前端控制器 指向spring-mvc.xml 程序在启动的时候就加载springmvc 可以接受所有请求 load-on-startup:表示启动容器时初始化该Servlet; --> <servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 可以自定义servlet.xml配置文件的位置和名称, 默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml --> <!-- 这个就是用来加载springMVC的配置文件的,在配置文件中开启包扫描,扫描可以发现控制器,发现请求映射--> <init-param> <param-name>contextConfigLocation</param-name> <!-- 这个是SSM整合后的配置文件的路径,如果单独只是使用springMVC的话,就单独弄一个配置文件就可以了 --> <param-value> classpath:spring/applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 将前端URL请求和后台处理方法controller建立对应关系--> <servlet-mapping> <servlet-name>springServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
- 上边的配置文件提到了springMVC的配置文件。这个配置文件是要加载进去的。
[code] <!-- ①:对com.angus包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --> <context:component-scan base-package="com.angus"/> <mvc:annotation-driven /> <!-- 静态资源访问 --> <!--如果webapp下你新建了文件夹,想访问里面的静态资源,那么就要在这配置一下--> <mvc:resources location="/images/" mapping="/images/**"/> <mvc:resources location="/css/" mapping="/css/**"/> <!-- <mvc:resources location="/styles/" mapping="/styles/**"/> --> <mvc:resources location="/js/" mapping="/js/**"/> <!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter"/> </list> </property> </bean> <!-- 编码格式 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <!-- 配置视图解析器,把控制器的逻辑视频映射为真正的视图 --> <!-- /WEB-INF/jsp/start.jsp --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 请求前缀 --> <property name="prefix" value="/WEB-INF/views/" /> <!-- 请求后缀 --> <property name="suffix" value=".jsp" /> </bean>
下边再讲 视图解析器是干什么用的。
以上工作做完,老管家能干活了。
至于怎么干活,我举个栗子
请求可以当做是上家,老管家是中间人,真正干活的服务器是下家。请求过来,被老管家发现,然后就要替上家找联系人。
这个过程是通过 控制器完成的:也就是controller类
[code]import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //这个@Controller相当于是暗号,有了这个暗号,才知道这是干什么的。而这个暗号就是说这是 //controller @Controller //下边的是明确自己是干什么活处理什么请求的 首先这是包路径 @RequestMapping("user") public class LoginController { //下边的是明确自己是干什么活处理什么请求的 首先这也会一个路径。 //到这里为止,可以和上边提到的视图解析器对应起来了 //比方说来了一个请求,老管家是怎么精准的找到下家又不犯错误的呢 // 请求是这样的http://localhost:8080/user/login // @RequestMapping("login") public String login(){ System.out.println("000"); //这个会被老管家拼装起来,这就是视图解析器的作用了,/WEB-INF/views/success.jsp //要找的就是这个返回页面,经过一些列的操作后,比方说数据的处理呀,完了将这个页面返回去。 //上边说的数据的处理是指一些复杂的服务层调用,服务层再调用数据访问层,最后将数据塞给页面 return "success"; } }
最后再补充一下执行流程把。我觉得这个有帮助我们自己搭环境,也有助于帮助我们理解springMVC,有助于帮助我们排错。
OK我根据框来讲解一下,可以看到四个颜色不同的框,这四个框包括了整个springMVC的流程。
首先,绿色代表的是前端页面,前端请求,和这部分相关的就是返回页面。
然后,红色代表的是控制器,这个是和web.xml配置有关系的,请求能被拦下来,完全是通过web.xml配置来做到的。这部分还和后边的蓝色框有关系,因为在web.xml文件里边加载了和蓝色框相关的配置文件。
然后,蓝色框通过web.xml加载了自己配置文件,配置文件里边包括开启扫描。蓝色框里边完成的是让请求和处理形成以一个一个的映射。蓝色框处理完了将处理结果返回给前端控制器,也就是红色框,红色框知道请求处理完了。
最后,黄色框,里边是返回的页面,蓝色框处理完了以后,会告诉红色框,我处理完了,你去找哪个哪个页面把。这个是由视图解析器来完成的。最后红色框将最终绿色框想要的结果返回,然后由浏览器渲染结果页面。整个结果完成。
更加具体的执行流程,基于组件来讲解:
- 为什么springMVC和Mybatis逐渐流行起来了?
- springMVC,spring,mybatis全注解搭建框架--第一步,让框架跑起来
- springmvc 带查询条件的分页,form的控制范围,怎么包裹条件提交给后台
- SpringMVC中Controller进行页面跳转的条件
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- springmvc 带查询条件的分页,form的控制范围,怎么包裹条件提交给后台
- shiro-入门,快速与springmvc整合,全注解,最简单让项目运行起来
- springmvc 带查询条件的分页,form的控制范围,怎么包裹条件提交给后台
- sql 去掉(几个条件加起来唯一)重复数据
- MySQL索引使用:字段为varchar类型时,条件要使用''包起来
- springmvc是如何和前端页面联系起来的
- SpringMVC(14):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询用户列表功能实现)
- springmvc如何和前端页面联系起来
- SpringMVC(16):使用springmvc+spring+jdbc 优化订单管理系统的示例(多条件查询供应商列表功能实现)
- #if,#ifdef和#if defined对于条件编译#if,#ifdef和#if defined这些,深究起来还是有些意思 #if要求是一个表达式,为真则执行以下代码, #ifdef则只要求是
- springmvc 有查询条件的数据 下载到excel
- 并发条件下springmvc的@RequestBody获取数据异常问题处理
- 规则 2.12:if后的条件要用括号括起来。
- Union all的使用实现一条sql把不同表里面的数据查出来,或者按照不同的查询条件查出来的sql累加起来
- iOS - 设置视图间用segue连接起来,满足一定条件才跳转到新视图