SpringMVC_3.x_入门指南_1

SpringMVC 3.x

注解的(annotation)全新的MVC框架;

M -model
模型,包括DAO,Service等部分
V -view
视图,JSP等部分
C -controller
控制器

Spring的web框架围绕DispatcherServlet设计。
DispatcherServlet的作用是将请求分发到不同的处理器。
相当于Struts中的中央控制器,Struts中的控制器是过滤器,而SpringMVC是一个Servlet;



SpringMVC的简单请求流程:

前台控制器(Front Controller)接收到请求(Incoming Request)让下面的具体的控制器(Controller)去完成相应操作,给出响应(model)给前台控制器,前台控制器把model交给视图模板(View Template),应用模板后给用户做出显示!



SpringMVC的请求方式:

1,普通的请求
浏览器发出普通请求,经过SpringMVC的Dispatcher跳转到相应的Controller,Controller调用Service去请求持久层,结合Model Bean(pojo等)产生视图,给用户做出响应;
2,Ajax请求
用户发出Ajax请求,到达Dispatcher,跳转Controller,调用Service结合Model Bean产生请求的资源信息,以XML或者JSON的形式给浏览器做出响应;

使用Maven搭建SpringMVC开发环境
1,在pom.xml添加基本的jar和配置web服务器环境jetty

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>3.2.4.RELEASE</version>
</dependency>
        
<!-- 提供对c标签的支持 -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>
<!-- servlet api -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
</dependency>
<!-- javax提供的annotation -->
<dependency>
	<groupId>javax.inject</groupId>
	<artifactId>javax.inject</artifactId>
	<version>1</version>
</dependency>

<build>
    <finalName>springmvc</finalName>
    <!-- maven的jetty服务器插件 -->
    <plugins>
    	<plugin>
		  <groupId>org.mortbay.jetty</groupId>
		  <artifactId>jetty-maven-plugin</artifactId>
		  <configuration>
		    <scanIntervalSeconds>10</scanIntervalSeconds>
		    <webApp>
		      <contextPath>/</contextPath>
		    </webApp>
		    <!-- 修改jetty的默认端口 -->
		    <connectors>
		       <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
		          <port>80</port>
		          <maxIdleTime>60000</maxIdleTime>
		       </connector>
		    </connectors>
		  </configuration>
		</plugin>
    </plugins>
</build>

2,在web.xml中配置基本的DispatcherServlet注意修改默认的web.xml中的xsd约束)

<?xml version="1.0" encoding="UTF-8" ?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name>Archetype Created Web Application</display-name>
  
  
  <!-- 配置springmvc servlet -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<!-- / 表示所有的请求都要经过此serlvet -->
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

配置完成,启动服务器!jetty:run

启动不会报错,启动完成后,在浏览器中输入:localhost访问默认页面!

提示:500错误
原因:

写道
java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]

不能找到/WEB-INF/下的一个文件,文件叫作:springmvc-servlet.xml

意思是说:我们还需要一个配置文件

SpringMVC推荐加载此配置文件,在容器启动的时候!在web.xml中修改如下:

<!-- 配置springmvc servlet -->
<servlet>
	<servlet-name>springmvc</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>springmvc</servlet-name>
	<!-- / 表示所有的请求都要经过此serlvet -->
	<url-pattern>/</url-pattern>
</servlet-mapping>

再次启动服务器,将会报错!!!仍然是缺配置文件!

配置文件的名称:springmvc-servlet.xml中的springmvc跟你配置的servlet-name保持一致;

我们在WEB-INF下建立我们的:springmvc-servlet.xml
使用springmvc的schema约束,基本结构如下:

<?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:mvc="http://www.springframework.org/schema/mvc"	 
    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-3.0.xsd">	 
	 
	 
</beans>

添加这些约束的配置文件会变成一个树叶,表示这是springmvc的配置文件!


spring的配置文件:applicationContext.xml跟这个配置不冲突,这个配置文件跟spring的配置文件其实就是多了一个mvc项的配置

那么我们这个配置文件里面到底配置哪些东西呢?

<mvc:annotation-driven/>

表示我要使用基于注解的springmvc

<context:component-scan base-package="com.cn.controller">
	<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

base-package表示自动扫描com.cn.controller包中的注解

include-filter表示只扫描expression="org.springframeword.stereotype.Controller"的注解,也就是只扫描类上有@Controller注解的类:

package com.cn.controller;

import org.springframework.stereotype.Controller;

@Controller
public class HomeController {

}

spring配置文件中也有自动扫描,你可以设置以下内容排除掉扫描Controller注解:

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

如何请求我们的Controller中的方法呢?

通过如下注解进行实现:

@RequestMapping("/home")
public String home(){
	return null;
}

springmvc中的url推荐不加后缀!
并且,你还可以使用下面的地址完成特定的请求:
/user/1   查看ID=1的用户
/del/1     删除ID=1的用户
这种方式是如何实现的呢?
我们知道浏览器只能发出get,post请求,但是我们可以通过程序发送其他请求,我们常用的有:

get       获取
post     保存
delete  删除
put       可以用来修改

/user/1
对于上面的url,如果你发送的是get请求,服务器就给你做出get响应
如果你发送的delete请求,服务器就给出删除响应

那么在springmvc中是什么样子的呢?

@RequestMapping(value="/user/1",method=RequestMethod.GET)
public String getUser(){
	System.out.println("get...获取用户");
	return null;
}
@RequestMapping(value="/user/1",method=RequestMethod.DELETE)
public String delUser(){
	System.out.println("delete...删除用户");
	return null;
}

简单说了一下springmvc中的地址,下面我们来说如何请求我们的url;

配置home方法如下:

@RequestMapping("/home")
public String home(){
	System.out.println("home...");
	return "home";
}

启动容器,确定不再报错了,然后在浏览器中请求:localhost/home

又报错了。
错误信息:

写道
javax.servlet.ServletException: Circular view path [home]: would dispatch back to the current handler URL [/home] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

意思是:

检查你的视图解析器是否建立,你输入的url我无法解析;

什么是视图解析器呢?
仍然是在springmvc-servlet.xml中需要配置的一项;

<!-- 视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	<property name="prefix" value="/WEB-INF/views/"/>
	<property name="suffix" value=".jsp"/>
</bean>

视图解析器就是一个类:UrlBasedViewResolver,其中有三个属性:

viewClass,我们使用的是JstlView
prefix,前缀,就是我们请求的页面所在的地方
suffix,后缀,就是标识我们的视图是以什么后缀结尾,eg.home.jsp

这样定义完成之后,我们在/WEB-INF/下建立views文件夹,并新建一个home.jsp

再次启动容器,并请求:localhost/home就可以跳转到home.jsp页面了!

那么如何请求views/user/文件夹下的user.jsp呢?
很简单:

@RequestMapping(value="/user",method=RequestMethod.GET)
public String getUser(){
	System.out.println("get...获取用户");
	return "user/user";
}

至此我们可以使用SpringMVC做网站了!最基本的配置就这些!

猜你喜欢

转载自hunthon.iteye.com/blog/1961446