接上篇,打开WEB-INF下的web.xml文件
修改,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_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- Spring相关配置 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 用不到的ContextLoaderListener --> <!-- <context-param><span style="white-space:pre"> </span><param-name>contextConfigLocation</param-name><span style="white-space:pre"> </span><param-value>/WEB-INF/applicationContext.xml</param-value><span style="white-space:pre"> </span></context-param> <span style="white-space:pre"> </span> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener><span style="white-space:pre"> </span> --><span style="white-space:pre"> </span> <!-- 项目其他配置 --> <welcome-file-list><span style="white-space:pre"> </span> <welcome-file>index.jsp</welcome-file><span style="white-space:pre"> </span></welcome-file-list><span style="white-space:pre"> </span><!-- <error-page> <error-code>401</error-code> <location>/WEB-INF/views/error/401.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/WEB-INF/views/error/404.jsp</location> </error-page> --></web-app></span>首先web-app标签上设置了一些,那都是命名空间,书写规范什么的。
然后Spring相关配置那里,首先是servlet标签,使用org.springframework.web.servlet.DispatcherServlet后,
spring会自动去WEB-INF目录下读取[servlet-name]-servlet.xml文件,生成相应的Bean。
DispatcherServlet是请求拦截器,每次进行url请求时就会被这个拦截下来,然后引导到正确的方法处。
servlet-mapping是对url请求的监听范围进行限制,这里单“/”表示所有请求,项目复杂的话可能会出现不同请求用不同的servlet去接收,就是在这种地方分歧。
然后有个ContextLoaderListener,这个在其他教程里的web.xml里会被配置,但其实有个DispatcherServlet就够了,这货并不需要...
但具体ContextLoaderListener是什么我也说不清,可以参考下面大神的讲解。
DispatcherServlet详解 ——跟开涛学SpringMVC http://jinnianshilongnian.iteye.com/blog/1602617
项目其他设置那一块就是设置一下欢迎页(访问项目根路径时显示的页面),还有一些出错时显示的页面。这里不做重点讲解,就放着看看,删掉也行。
我这里就留一个设置欢迎页为项目生成时就已经存在的index.jsp
之后创建上面提到的dispatcher-servlet.xml,和web.xml同在WEB-INF目录下
完整文件如下
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="test.spring" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean></beans></span>beans标签的一些设置也都是命名空间,书写规范等,不深究。
<context:component-scan base-package="包名" />很重要,决定这个bean扫描的范围,只有扫到的包这个servlet才会去实现里面的注解(@开头的)
包名这里先写着test.spring,之后创建包时就按照这个名字
<context:component-scan base-package="test.spring.controller,test.spring.serviceImpl, test.spring.daoImpl" /></span>如果要同时指定多个包的话可以逗号分隔
下面的org.springframework.web.servlet.view.InternalResourceViewResolver主要是针对返回来的view,prefix代表头部修正,suffix代表尾部修正
譬如说后台返回来要导航向"hello",spring就会自动加头加尾,像这里的话就是"/WEB-INF/views/hello.jsp"
这样spring的配置就算完成了,下面做一个controller和一张页面,进行简单的使用测试
首先在WEB-INF下建立hello.jsp等一下就用Controller跳转到这个页面
hello.jsp代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Spring 4 MVC -HelloWorld</title></head><body> <center> <h2>Hello World</h2> <h2> ${message} ${name} </h2> </center></body></html></span>
一张简单的jsp页面,第一行显示hello world,第二行显示后台传来的message和name
顺便一提如果第一行的charset不是UTF-8的话想显示出来的中文字会变成乱码下面开始建Controller,先建立资源文件夹
在src/main下面建立文件夹java,然后右键作为资源文件夹使用,如下图
以后Controller乃至Service,Dao,Entity啥的一般都在这里面写了
在src/main/java下面建立包,包名为test.spring.controller,
包的命名一般是 "代表组织性质的org或者com.项目名.里面Class的用途如controller或者service",这里只是测试用,组织性质就test了
添加一个页面跳转方法,HelloWorldController完整如下
package test.spring.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.servlet.ModelAndView;@Controllerpublic class HelloWorldController { @RequestMapping("/hello") public ModelAndView showMessage(@RequestParam(value = "name", required = false, defaultValue = "World") String name) { System.out.println("in controller"); ModelAndView mv = new ModelAndView("hello"); mv.addObject("message", "Controller"); mv.addObject("name", name); return mv; }}</span>[email protected],
@RequestMapping表示用什么URL可以访问到这个方法,
这样项目算是完成,剩下就是编译运行了
右键项目依次运行Maven clean和Maven Install
看到BUILD SUCCESS就说明编译成功了
右键项目Run As -> Run on Server
选择tomcat7.0,Finish
初始页面
访问/hello跳转到hello.jsp
hello.jsp里的Controller和world字样是后台传过来的,可以在url请求时设置参数改掉
大功告成!
下一篇试试Service和Dao的注解