SpringMVC(1):基础配置文件web.xml 和 <servlet-name>-servlet.xml / springmvc.xml
来源:互联网 发布:郑州网络推广公司 编辑:程序博客网 时间:2024/05/22 21:52
日期:2017/12/9
springMVC是目前流行的java开发框架。如何进行开发呢?个人觉得,如果先接触过jsp和Servlet开发技术,了解一下去写web底层的对于最原始的请求和响应处理的代码,是不错的;因为springmvc 是基于jsp、servlet与javabean进行的(这三者已经可以组成mvc的最小模块)。
【教程:http://www.yiibai.com/spring_mvc/ 】
【官方文档(英文):https://docs.spring.io/spring-framework/docs/4.2.4.RELEASE/spring-framework-reference/html/mvc.html】
【官方文档(中文):https://linesh.gitbooks.io/spring-mvc-documentation-linesh-translation/content/】
Spring的模型-视图-控制器(MVC)框架是围绕一个 DispatcherServlet 来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。处理器是你的应用中注解了@Controller 和 @RequestMapping 的类和方法,Spring为处理器方法提供了极其多样灵活的配置。Spring 3.0以后提供了 @Controller 注解机制、 @PathVariable 注解以及一些其他的特性,你可以使用它们来进行RESTful web站点和应用的开发。
先说一下配置文件web.xml ,它的作用是限定了整个web的运行环境,如:请求过来了,交给谁来处理、浏览器对某些请求不接受,要不要转换一下请求格式等等。
1. DispatcherServlet 其实就是个 Servlet (它继承自 HttpServlet 基类),同样也需要在你web应用的 web.xml 配置文件下声明。你需要在 web.xml 文件中把你希
望 DispatcherServlet 处理的请求映射到对应的URL上去。这就是标准的Java EE Servlet配置;
下面的代码就展示了对 DispatcherServlet 和路径映射的声明:
<web-app><servlet> <servlet-name>example</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>example</servlet-name>
<url-pattern>/example/*</url-pattern>
</servlet-mapping></web-app>在上面的例子中,所有路径以 /example 开头的请求都会被名字为 example 的 DispatcherServlet 处理。在Servlet 3.0+的环境下,你还可以用编程的方式配置Servlet容器。下面是一段这种基于代码配置的例子,它与上面定义的 web.xml 配置文件是等效的。
2. web.xml 配置DispatcherServlet 有两种方法:
(1)使用spring的bean.xml :命名为springmvc;
web.xml 如下:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><!-- 配置 DispatcherServlet --><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:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>
(2)实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的的配置文件为: /WEB-INF/<servlet-name>-servlet.xml,因为使用了默认,肯定也有默认路径,新建的文件也要放在 /WEB-INF/文件夹下!!新建自定义的<servlet-name>-servlet.xml,例如dispatcherServlet-servlet.xml;dispatcherServlet就是<servlet-name>,所以web.xml的<servlet-name>要写对!!
web.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><!-- 配置 DispatcherServlet --><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>/</url-pattern></servlet-mapping></web-app>3. DispatcherServlet 的处理流程:
配置好 DispatcherServlet 以后,开始有请求会经过这个 DispatcherServlet 。此时, DispatcherServlet 会依照以下的次序对请求进行处理:
(1)首先,搜索应用的 上下文对象 WebApplicationContext 并把它作为一个属性(attribute)绑定到该请求上,以便控制器和其他组件能够使用它。属性的键名默认为 DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE;
(2)将地区(locale)解析器绑定到请求上,以便其他组件在处理请求(渲染视图、准备数据等)时可以获取区域相关的信息。如果你的应用不需要解析区域相关的信息,忽略它即可。
(3)将主题(theme)解析器绑定到请求上,以便其他组件(比如视图等)能够了解要渲染哪个主题文件。同样,如果你不需要使用主题相关的特性,忽略它即可;
(4) 如果你配置了multipart文件处理器,那么框架将查找该文件是不是multipart(分为多个部分连续上传)的。若是,则将该请求包装成一个MultipartHttpServletRequest 对象,以便处理链中的其他组件对它做进一步的处理。关于Spring对multipart文件传输处理的支持,读者可以参考21.10 Spring的multipart(文件上传)支持一小节;
(5)为该请求查找一个合适的处理器。如果可以找到对应的处理器,则与该处理器关联的整条执行链(前处理器、后处理器、控制器等)都会被执行,以完成相应模型的准备或视图的渲染;
(6)如果处理器返回的是一个模型(model),那么框架将渲染相应的视图。若没有返回任何模型(可能是因为前后的处理器出于某些原因拦截了请求等,比如,安全问题),则框架不会渲染任何视图,此时认为对请求的处理可能已经由处理链完成了。
4. <servlet-name>-servlet.xml / springmvc.xml 配置文件
1.作用1是:定义了视图解析器,使用标签<bean>:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean>2.作用2是:配置自动扫描的包:
<!-- 配置自定扫描的包 --><context:component-scan base-package="com.atguigu.springmvc"></context:component-scan>3.作用3:配置国际化资源文件:
<!-- 配置国际化资源文件 --><bean id="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource"><property name="basename" value="i18n"></property></bean>4.作用4:配置直接转发的页面:
<!-- 配置直接转发的页面 --><!-- 可以直接相应转发的页面, 而无需再经过 Handler 的方法. --><mvc:view-controller path="/success" view-name="success"/><!-- 在实际开发中通常都需配置 mvc:annotation-driven 标签 --><mvc:annotation-driven></mvc:annotation-driven>
5.作用5:配置视图 BeanNameViewResolver 解析器: 使用视图的名字来解析视图<!-- 通过 order 属性来定义视图解析器的优先级, order 值越小优先级越高 --><bean class="org.springframework.web.servlet.view.BeanNameViewResolver"><property name="order" value="100"></property></bean>
还有很多,日后学习到再作总结分享。
- SpringMVC(1):基础配置文件web.xml 和 <servlet-name>-servlet.xml / springmvc.xml
- springmvc配置文件:springmvc-servlet.xml
- SpringMVC中的配置文件applicationContext.xml和dispatcher-servlet.xml
- springmvc web.xml spring-servlet.xml 配置
- 初学springMVC -servlet.xml之配置文件解读。
- springMVC-servlet.xml配置文件的基本配置
- springMVC-servlet.xml 配置
- SpringMVC servlet.xml配置
- springmvc-servlet.xml
- springMVC项目,application.xml springmvc-servlet.xml
- springMVC web.xml配置文件
- springmvc配置文件:web.xml
- Servlet配置文件web.xml
- Servlet 配置文件web.xml
- servlet web.xml配置文件
- SpringMVC-基础篇-DispatcherServlet-servlet.xml
- Springmvc之dispatcher-servlet.xml
- SpringMVC-DispatcherServlet配置(Spring-servlet.xml)
- C语言小游戏:三字棋(增强版本)
- 【Scikit-Learn 中文文档】无监督学习: 寻求数据表示
- numpy基础入门-多维数组对象
- after all 用法, although but 用法
- ajax和flask附cookie跨域
- SpringMVC(1):基础配置文件web.xml 和 <servlet-name>-servlet.xml / springmvc.xml
- for in 枚举, 记录判断数组中元素中第一个字符是否包含“*”
- Android 拍照后图片信息ExifInterface
- 详解大端模式和小端模式(转)
- 学历和资历那个重要?
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
- CMake常用命令
- 编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次
- java web 中跨域的一些解决方法(Ajax 以及spring security )