概述
2019独角兽企业重金招聘Python工程师标准>>>
1. 了解SpringMVC
1. springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合(比如Mybatis与Spring整合的时候需要借助单独的jar包)。springmvc是一个基于mvc模式的web框架。
2. SpringMVC对于从客户端发来的请求的处理流程:
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler,可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView,ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp、pdf等)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
3. SpringMVC中的重要组件:
- 前端控制器DispatcherServlet(不需要程序员开发):用于接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度。
- 处理器映射器HandlerMapping(不需要程序员开发):根据请求的url查找Handler
- 处理器适配器HandlerAdapter:按照特定规则(HandlerAdapter要求的规则)去执行Handler(或者说Controller)
- 处理器Handler(或者说Controller,需要程序员开发),注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
- 视图解析器View resolver(不需要程序员开发):进行视图解析,根据逻辑视图名解析成真正的视图(view)
- 视图View(需要程序员开发jsp),View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)
2. SpringMVC的简单使用
1. 准备环境:新建一个Maven项目,导入所需要的相关jar包
2. 首先配置前端解析器,修改项目的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SpringWebMVC</display-name>
<!-- 配置SpringMVC前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置SpringMVC加载的配置文件,该文件中会配置处理器映射器、处理器适配器、视图解析器等 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--
前端控制器的url-pattern有三种形式:
1.*.xx:即只会解析以".xx"结尾的路径
2./ :所有的访问地址都会被前端控制器解析,对于静态文件的路径访问需要特殊配置不被前端控制器解析,
因为依据静态文件的路径,前端控制器是无法找到对应的Handler的,所以会报错,
使用此形式的url-pattern可以实现RESTful路径风格
3./*:此种方式有错误,当最终转发到一个jsp页面时,仍会有前端控制器解析jsp页面路径,而依据此路径
前端控制器是无法找到对应的Handler的,所以会报错
-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- 配置SpringMVC的RESTful路径风格的前端控制器,两个前端控制器可以并存不会影响
-->
<!-- 关于RESTful风格的url-pattern所带来的无法解析静态资源(js,css)路径问题,将在SpringMVC
配置文件中进行特殊配置,避免只解析部分路径,即/js/**.js只解析/js路径而缺失了/**.js-->
<servlet>
<servlet-name>springmvc_RESTful</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc_RESTful</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2. 在上面指定的classpath:conf/springmvc.xml文件中配置SpringMVC的注解式处理器映射器和处理器适配器:
<?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:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<!-- 配置视图解析器,解析jsp,默认使用jstl标签,所以需要导入jstl的相关jar包 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前缀与后缀,这样Controller返回的视图名只用写视图文件的部分路径加视图文件名称即可 -->
<!-- 解析视图名时要添加的前缀 -->
<property name="prefix" value="/WEB-INF/"></property>
<!-- 解析视图名时要添加的后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 使用注解式 -->
<!-- 多个适配器或映射器可以共存 -->
<!-- 配置注解式处理器映射器
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
-->
<!-- 配置注解式处理器适配器
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
-->
<!-- 开启注解,使用mvc的注解驱动,适配器以及映射器配置可以取消,即删除上面的适配器以及映射器配置 -->
<!-- 开发时仅使用此配置即可,但需要开启注解扫描,用来扫描带有相关注解的类 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 开启注解扫描 -->
<context:component-scan base-package="test"></context:component-scan>
</beans>
3. 通过注解编写处理器(Controller):
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import cn.taotao.po.Items;
//通过@Controller注解标示该类是一个Controller处理器,括号内的字符串可以指定该类在Spring中作为bean的id
@Controller("controller2")
public class Controller2 {
//@RequestMapping该注解标示该方法用于映射处理/findItems.action路径传来的请求
@RequestMapping("/findItems")
public ModelAndView findItems(){
List<Items> itemsList=new ArrayList<Items>();
//向list中填充数据
Items i1=new Items();
i1.setName("华为手机");
i1.setPrice(3000f);
i1.setDetail("mate10");
i1.setId(1);
Items i2=new Items();
i2.setName("苹果手机");
i2.setPrice(8888f);
i2.setDetail("苹果10");
i2.setId(2);
itemsList.add(i1);
itemsList.add(i2);
//生成返回值
ModelAndView mav=new ModelAndView();
//相当于request.setAttribute(),在jsp页面中通过itemsList获取数据
mav.addObject("itemsList", itemsList);
//指定视图
//原本的视图文件路径应写为mav.setViewName("/WEB-INF/jsp/itemsList.jsp");但在视图解析器中配置了前缀和后缀,所以可以简写为
mav.setViewName("jsp/itemsList");
return mav;
}
}
4. 编写视图文件:需要在对应的路径下编写jsp文件,并对传来的Model数据进行处理
5. 调试跟踪:在前端控制器的源码中doDiapatch方法打断点,通过前端控制器源码分析springmvc的执行过程。
第一步:前端控制器接收请求,调用doDiapatch
第二步:前端控制器调用处理器映射器查找 Handler
第三步:调用处理器适配器执行Handler,得到执行结果ModelAndView
第四步:视图渲染,将model数据填充到request域。视图解析,得到view:
调用view的渲染方法,将model数据填充到request域,渲染方法:
转载于:https://my.oschina.net/ProgramerLife/blog/2962753
最后
以上就是魔幻泥猴桃为你收集整理的SpringMVC简单应用的全部内容,希望文章能够帮你解决SpringMVC简单应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复