Spring不仅可以集成第三方web框架,同时自己也提供了一套web框架作为使用,今天就先来看下如何搭建一个简单的基于spring MVC的wenb项目
1. 准备jar
可以直接将spring下载的jar都丢入进去,具体可以查看截图信息
我将该文件存放在WEB-INF/config目录下面,该目录主要用来存储配置文件信息
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!-- 将请求的url和bean映射起来,如访问springMVC/login,那么spring配置文件中需要有个login的bean来与之对应 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 选择适配器,所有实现Controller的bean都可以用来处理请求 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 配置视图,包括路径,后缀等信息 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <bean name="/test.do" class="com.jacksoft.spring.mvc.controller.TestController"/> </beans>
主要有3个配置,HandlerMapping,HandlerAdapter和ViewResolver
HandlerMapping:主要是将请求的url与我们创建的controller映射起来,如访问/test.do ,那么spring中需要有个/test.do的bean来与之对应起来
HandlerAdapter:选择简单适配器,将请求发送给我们的controller处理
ViewResolver:配置jsp视图解析
最下面的bean就是与请求的url :test.do进行映射,当访问test.do时,那么实际上会进入到TestController进行处理。
3.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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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"> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <description>spring-servlet.xml</description> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/config/springConfig.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
spring是通过org.springframework.web.servlet.DispatcherServlet来进行分发客户端请求的,因此我们需要拦截所以的.do的访问,然后根据bean的配置进行分发处理
这里如果不加contextConfigLocation这个参数,那么系统会默认到WEB-INF下面查找spring-servlet.xml
即[servlet-name]-servlet.xml
4.编写TestController
我们的controller需要实现org.springframework.web.servlet.mvc.Controller,并且在handleRequest方法中进行数据处理。
package com.jacksoft.spring.mvc.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class TestController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mv = new ModelAndView(); mv.setViewName("test"); mv.addObject("msg", "SUCCESS!!"); System.out.println("-------------TestController处理请求---------------------"); return mv; } }
其中mv.setViewName是设置视图名称,也就是返回的jsp页面
5. 编写test.jsp
由于前面配置前缀是/WEB-INF/JSP/ ,所以我们的jsp应该写到该目录下面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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>Insert title here</title> </head> <body> Hello ,Spring MVC<br> ${msg} </body> </html>
6.访问
地址栏输入http://localhost:8080/springMVC/test.do,能进行正常访问,页面输出:
Hello ,Spring MVC SUCCESS!!
表示配置成功!
注意:
当我们在配置DispatcherServlet分发时,对url-pattern最好不要直接写成这样:
<servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
因为这样是拦截所有,当controller返回视图时,spring又把返回的路径作为请求进行拦截,所以就可能会出现下面的错误:
警告: No mapping found for HTTP request with URI [/springMVC/WEB-INF/jsp/test.jsp] in DispatcherServlet with name 'spring'