发表于: 2016-03-07 21:50:24
1 4479
1.了解SpringMVC
MVC全名是Model View Constroller,是模型(model)-视图(view)-控制器(constroller)的缩写。
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请求给相应的Handler,Handler处理以后再返回相应的视图(View)和模型(Model),返回的视图和模型都可以不指定,即可以只返回Model或只返回View或都不返回。
2.SpringMVC配置
(1)首先配置pom.xml,主要引入junit-4.12(单元测试用),spring-webmvc-4.1.4.RELEASE、spring-web-4.1.4.RELEASE(SpringMVC框架用),jstl-1.2、standard-1.1.2(这两个是为taglib服务的,taglib是为编写jsp文件提供支持的)。
(2)配置web.xml,因为SpringMVC的每一个请求最先访问的都是DispatcherServlet,所以我们现在应该在web.xml中声明一个Servlet。
关于DispatcherServlet,它是前置控制器,配置在web.xml中,它的作用就是拦截用户的请求,然后把请求递交给Constroller来处理。
DispatcherServlet在web.xml中的配置挺简单,各标签的含义都很好理解,其中有一个标签是<load-on-startup>,该标签的含义:表示启动容器时初始化该Servlet。
关于<web-app>标签里面各属性的作用,可查看链接:http://jingyan.baidu.com/article/f71d60379d4c011ab741d175.html
web.xml是一个xml文件,它里面的所有内容都符合xml语法规范,开头的<web-app></web-app>也是一个xml文件的标签,后面的一长串东西就是属性,其中xmlns表示命名空间,xmlns="http://maven.apache.org/POM/4.0.0" 这表示默认命名空间,而下面xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 这个命名空间里面的元素或者属性就必须要以xsi:这种方式来写,比如schemaLocation就是他的一个属性,所以写成xsi:schemaLocation,而默认命名空间不带类似xsi这种,其实xml标签名称有个专业叫法叫做QName,而如果没有前面的xsi:这种一般叫做NCName。所以你看mvn里面的<dependency>这种就是默认命名空间下面的元素,最后那一行就表示把定义这个命名空间的schema文件给引用进来,好让eclipse这类型工具能够解析和验证你的xml文件是否符合语法规范。等同于<import namespace="xxx" schemaLocation="xxx.xsd"/>。
web.xml中除了<servlet>的配置外,还有<listener>的配置。<listener>元素用来注册一个监听器类。可以收到事件什么时候发生以及用什么作为响应的通知。事件监听程序在建立、修改和删除会话或servlet环境时得到通知,常与context-param联合使用。
ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。至于ApplicationContext.xml这个文件应该放在哪里,就要看你有没有配置<context-param>这个元素,如果没有配置,那么ApplicationContext.xml文件默认在WEB-INF目录下;如果你配置了<context-param>这个元素,那么<param-value>标签里面的值就是ApplicationContext.xml的所在位置。<context-param>的配置示例如下:
<!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/applicationContext.xml</param-value>
</context-param>
配置<listener>时一定要注意标签<listener-class>,千万不能写成<listenerclass>。
(3)spring-servlet.xml配置
因为上面web.xml中<servlet-name>标签配的值为spring(<servlet-name>spring</servlet-name>),再加上“-servlet”后缀而形成的spring-servlet.xml文件名,因此我在webapp/WEB-INF文件夹下新建一个名为spring-servlet.xml的文件。
(4)applicationContext.xml配置
正在webapp/WEB-INF文件夹下新建一个名为applicationContext.xml的文件。
关于applicationContext.xml中链接各种数据库的配置方法,参考链接:http://wenku.baidu.com/link?url=S1bN6mkN822Jyxv5BDj7utAQA2Vtk1_777L9eOI8Cz4_hc9ZXsfsCNNvybzaANe3Ol9RhUwgtCZf1UENAQ6nbz8GQXec4yclfm3qQ0q6Aay
3.新添几个必要的文件夹
在Java Resources下新建Source Folder:src/main/java、src/test/java。
在src/main/java文件夹下新增:
知识点:
1.Spring提供了两种方案来启动Spring容器:一种是以Listener方式启动,即需要在web.xml中配置<listener>,并且还要配置ApplicationContext.xml文件;第二种是以Servlet方式启动,即需要在web.xml中配置<servlet>,并且还要配置spring-servlet.xml文件。相比而言,Listener方式优先于Servlet方式,而且Listener方式比较先进,Servlet方式比较落后。
2.ApplicationContext.xml 是spring 全局配置文件,用来控制spring 特性的、比如:aop,sessionFactory ;xxx-servlet.xml 是spring mvc里面的,控制器、拦截uri转发view。applicationContext是mvc context的父容器,mvc context可以引用applicationContext的bean,而applicationContext无法引用到mvc的bean。applicationContext是在web.xml中配置的ContentLoader监听器启动的,当xml启动时加载,并按照一个约定的key放在java的ServletContext中,然后mvc 的servlet初始化时,先从ServletContext中按照约定的key取出来,以它为父容器,去创建mvc的容器。spring查找bean,会现在当前context中查找,如果没有满足的,再到父容器查找。
3.Spring容器:Spring容器可以帮助你管理所有的Bean对象,专业术语称之为IoC控制反转。在传统的程序中,对象的生成都是由开发者完成的。而在控制反转中,对象的生成全部都交给框架完成。这样的好处就是减少了程序的依赖性。
4.Bean对象:我感觉Bean对象就是一个类,可以用来实例对象。参考链接:http://zhidao.baidu.com/question/255076111.html?qbl=relate_question_0&word=bean%B6%D4%CF%F3%CA%C7%CA%B2%C3%B4
5.service是业务层,dao是数据访问层。面向接口编程:表示层调用控制层,控制层调用业务层,业务层调用数据访问层。
出现的问题(已解决):
1. 在根元素<web-app>中,出现了问题,我是这样写的:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
但是在上面那5行代码的最后一行报错了,错误提示如下:
Multiple annotations found at this line:
- Attribute "xmlns:xsi" must be declared for element type "web-app".
- Attribute "xsi:schemaLocation" must be declared for element type
"web-app".
- Attribute "version" must be declared for element type "web-app".
- Attribute "xmlns" must be declared for element type "web-app".
这个错误不是说,这四个属性必须被声明吗?可是我都声明了啊。
问题解决,参考链接:http://blog.csdn.net/xushuangshuang1/article/details/45665873,只要把<web-app>前面所有的东西都删掉就可以了。
2.如果在xml文档的第一行处出现问题,即<?xml version="1.0" encoding="UTF-8" ?>这一行前面出错,错误提示为:The processing instruction target matching "[xX][mM][lL]" is not allowed.解决方法是把第一行内容前面的空格删掉即可。
出现的问题(未解决):
1.新建Maven web项目后,Java Resources文件夹下只有src/main/resources这一个Source Folder,如果试图通过右键新建src/main/java和src/test/java这两个Source Folder,则会提示如下错误:
cannot nest 'Project/src/main/java' inside 'Project/src',to enable the nesting exclude 'main/' from 'Project/src'
此问题尚未解决。
评论