springMVC学习二 原始springMVC环境搭建
第一步:导入jar包

第二步:配置DispatcherServlet
DispatcherServlet本质是一个Servlet,在spring-webmvc包中,在servlet2.5之前 springMVC配置文件的默认命名规则为xxx-serlvet.xml,xxx是为DispatcherServlet起的servlet的名称,也就是<servlet-name>标签中的值,并且默认情况下,xxx-servlet.xml文件的位置是WEB-INF目录下,不过从servlet2.5之后可以通过servlet的初始化参数进行配置,也就是通过<init-param>标签来配置,
【注意:在spring与dynamic web project工程进行整合事,有一个spring的配置文件加载位置的配置,是通过web应用工程的配置信息,也就是<context-param>标签来配置】
org.springframework.web.servlet.DispatcherServlet的继承关系图

配置文件信息
<?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"> <servlet>
<!--
DispatcherServlet本质是一个Servlet,在spring-webmvc包下,在servlet2.5之前
springMVC配置文件的默认命名规则为xxx-serlvet.xml,xxx是为DispatcherServlet起的servlet的名称,
也就是<servlet-name>标签中的值,并且默认情况下,xxx-servlet.xml文件的位置是WEB-INF目录下 不过从servlet2.5之后可以通过servlet的初始化参数进行配置,也就是通过<init-param>标签来配置,
【注意:在spring与dynamic web project工程进行整合事,有一个spring的配置文件加载位置的配置, 是通过web应用工程的配置信息,也就是<context-param>标签来配置】
org.springframework.web.servlet.DispatcherServlet
-->
<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:springmvc.xml</param-value>
</init-param>
<!-- 自启动配置,表示在tomcat一启动,就加载该Servlet -->
<load-on-startup>1</load-on-startup> </servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
第三步;配置SpringMVC配置文件
springMVC配置文件中要配置,
(1)处理器handler,也就是controller,处理器部门是需要程序员自己编写代码,继承一个Controller接口,或者采用Controller与RequestMapping注解,处理器是处理器适配器(HandlerAdapter)调用的,
(2)处理器映射器HanderMapping,本质是一个对一个Map容器进行封装,把key是请求路径,value是处理器,就是把请求路径和处理器做了一个对应,处理器映射器是DispatcherServlet调用的,调用完之后会返回一个HanderExecutionChain,另外一种说法是HandlerMapping 将会把请求映射为HandlerExecutionChain 对象,HanderExecutionChain会封装一个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器
(3)处理器适配器HanderAdapter,也是由DispaterServlet进行调用,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器; 【如果不配置处理器映射器,会采用默认的,可以不用配置】
(4)视图解析器:也是又DsipatcherServlet进行调用,把ModelAndView进行解析,返回Veiw给DispaterServlet。【如果不配置,采用默认的】
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 注册 处理器,也就是controller -->
<bean id="handler" class="com.xxxx.controller.DemoController"></bean> <!-- 注册HandlerMapping 处理器映射器
会根据url请求解析出应该调用哪一个 处理器,但是调用并不是处理器映射器调用
-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<!-- key解析出来的请求的逻辑名
value-ref代表要调用的控制器
-->
<entry key="demo" value-ref="handler" ></entry>
</map>
</property>
</bean>
<!-- 注册 处理器适配器,处理器适配器会调用 处理器
处理器适配器可以不用配置,会走默认值
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 在spring容器中 ,注册视图解析器
同样视图解析器也可以不用配置,也会走默认值
InternalResourceViewResolver的父类中有两个属性:prefix,suffix 代表前缀和后缀
ModelAndView modelAndView =new ModelAndView("main");
前缀和后缀会对ModelAndView中的参数进行拼接,拼接成"/main.jsp",
一般请情况下,我们会使用默认的视图解析器,但是有时候我们会在WebContent下建立一个page目录用来存放
jsp文件,此时在写ModelAndView modelAndView =new ModelAndView("main.jsp");是,需要前面加上
page/main.jsp,为了省略page/一般会把prefix配置成page/ 在返回ModelAndView时,默认会走请求转发,在InternalResourceViewResolver父类UrlBasedViewResolver
中有
public static final String REDIRECT_URL_PREFIX = "redirect:";
public static final String FORWARD_URL_PREFIX = "forward:";
可以通过配置让其走重定向 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
第四步:编写处理器,也就是controller
public class DemoController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("执行了springmvc的控制器");
//具备视图和传值的功能
ModelAndView modelAndView =new ModelAndView("main");
return modelAndView;
}
}
第五步:运行
让项目跑在tomcat中,然后通过:http://localhost:8080/springmvc01/demo进行访问,会执行DemoController中的handleRequest()这个方法。
注意访问路径中的demo,这个值就是在springmvc配置文件中,处理器映射器的中urlMap中的一个key
springMVC学习二 原始springMVC环境搭建的更多相关文章
- springMVC学习三 注解开发环境搭建
第一步:导入jar包 第二步:配置DispatcherServlet 前端控制器 因为此处把DsipatcherServlet的映射路径配置成了"/",代表除了.jsp文件之外, ...
- Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发
一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...
- 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动
前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章——<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...
- MyBatis学习系列一之环境搭建
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 学习一个新的知识,首先做一个简单的例子使用一下,然后再逐步深入.MyBat ...
- 深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3
紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把N ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定
springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...
- 总结Selenium自动化测试方法(二)测试环境搭建
(接上期内容) 二.测试环境搭建 1.安装python 现在python3.0比python2.0多了一些改进的功能(详见http://zhidao.baidu.com/link?url=3sT1g7 ...
- Hadoop学习笔记(3)——分布式环境搭建
Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...
随机推荐
- 【C++】构造函数语意
构造函数的构造操作 编译器何时会为一个类合成默认构造函数? 答:当编译器需要的时候. 有以下四种情况: 带有默认构造函数的类对象 以下代码为例: class Foo {public: Foo();} ...
- angularjs $injector:nomod
参考 http://blog.163.com/gis_warrior/blog/static/19361717320153111134135/ 检查是否有[],或者是否多次定义同一个module 标准 ...
- Gym - 100989G 二分
链接:ECJTU 2018 Summer Training 1 - Virtual Judge https://vjudge.net/contest/236677#problem/G 谷歌翻译: 距 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (贪心或有源汇上下界网络流)
"Oh, There is a bipartite graph.""Make it Fantastic."X wants to check whether a ...
- Cisco VSS
1.原理 VSS是将两台及以上的物理设备虚拟成逻辑上的一台,可类比堆叠.VSS在控制层面上两个交换机有主从之分,但在数据面上处理是双活的.无论是从网络控制层面和管理视图上在网络上都是一个单独的设备实体 ...
- 弹出PopupWindow背景变暗的实现
弹出PopuoWindow后 代码里设置的是PopupWindow默认获取焦点 所以PopupWindow显示的时候其它控件点击是没有反应的 用到的方法是 pwMyPopWindow.setFocus ...
- TotoiseSVN 使用参考文章
SVN使用教程总结 http://www.cnblogs.com/armyfai/p/3985660.html TotoiseSVN的基本使用方法 http://www.cnblogs.com/xil ...
- 基于.net技术的 Rss 订阅开发
RSS(Really Simple Syndication,真正简单的连锁)是一种 Web 内容连锁格式.RSS 成为通过 Web 连锁新闻内容的标准格式.刚好我现在vs的环境也是.net,因为在.N ...
- Python中的 __all__和__path__ 解析
https://blog.csdn.net/u012450329/article/details/53001071
- python学习笔记Day3
set有点:1.访问速度快 2.天生解决了重复问题 tuple与set区别: 元组可重复,set不可重复创捷集合1 >>> s1.add('alex')>>> pr ...