admin管理员组

文章数量:1794759

教大家看官方技术文档(一)

教大家看官方技术文档(一)

每当学习一门新技术时候,大部分人直接就是百度Bing搜索,借鉴别人的博客例子等。我也是一样,但是我经常想,这些牛人的例子如何写出来的,如何深入扩展其它功能等等。所以,我会做多一步,就是挖掘官方文档。


本文例子的软件环境: IntelliJ IDEA 15 CE (社区版) Maven3.0 (IDE捆绑) JDK1.8(IDE捆绑)

本文目标: 本文不是解决什么高深问题,而是教大家查阅官方文档,以Spring MVC 基本页面跳转,整合第三方开源框架为例子。

适读人群: 理解Servelt运行原理,会用Maven,对Spring和mybatis框架有大致了解


相信大部分人构建应用的时候,是直接从别人写好的代码项目开始的,或者直接用付费的IDE生成通用的应用模版。但是,试想一下,假如让你从”零”开始构建一个web应用,IDE功能只能帮你生成最简单的web folder结构,你手上只有Spring的官方文档。那你如何配置servlet / servelet-mapping / Spring DispatcherServlet 等web.xml里最基本的标签? 如何配置Spring ApplicationContex.xml等等?

例如,IDE生成简单的Web.xml如下:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "java.sun/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> </web-app>

如果你是有Spring使用经验的话,会记得要用servlet标签等,可是你记不起完整代码,这时候试试打开“java.sun/dtd/web-app_2_3.dtd“就会发现:

<!-- The servlet-class element contains the fully qualified class name of the servlet. Used in: servlet --> <!ELEMENT servlet-class (#PCDATA)> <!-- The servlet-mapping element defines a mapping between a servlet and a url pattern Used in: web-app --> <!ELEMENT servlet-mapping (servlet-name, url-pattern)>

其实不用死记的,那个dtd文件有标签的定义说明,还可以看看有哪些标签是平时不常见但可能用得着的吧,此处略举例。如果想了解更多,可以查看Oracle公司关于Web.xml的配置说明网址: docs.oracle/cd/E28280_01/web.1111/e13712/web_xml.htm#WBAPP502

扯远了,回归Spring MVC如何配置来。

第一步:利用IntelliJ 生成Maven的Web项目

第二步:根据官网配置项目POM文件: Spring Framework Source: projects.spring.io/spring-framework/

<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.5.RELEASE</version> </dependency> </dependencies>

第三步:参考Spring MVC文档配置web.xml(Part VI. The Web): docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-introduction

<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>

至此,假如运行上面配置,会出现如下错误:

问题一: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet 原因: 未配置相应的Artifacts,那么如何找到相应的Maven Artefacts呢 解决: 其实Table 2.1. Spring Framework Artefacts有相应说明 docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview-web 凭经验尝试加入spring-webmvc,问题解决 。

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.5.RELEASE</version> </dependency>

继续运行,会出现:

问题二: BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/example-servlet.xml]; 原因: 文档中21.2的章节有说明如下 Upon initialization of a DispatcherServlet, Spring MVC looks for a file named [servlet-name]-servlet.xml in the WEB-INF directory of your web application and creates the beans defined there, overriding the definitions of any beans defined with the same name in the global scope. 解决: 参考文档Figure 21.3图下面的配置说明–>This can be configured by setting an empty contextConfigLocation servlet init parameter, as shown below: 尝试在前面的< servlet >基础上增加 < init-param > 配置contextConfigLocation

... <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>...</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> ... </servlet>

问题解决。服务器启动成功。

下篇文章会接着教如何设置Spring MVC的controller

本文标签: 看官文档技术