SpringMVC注解开发大大简化了WEB开发,提高了开发人员的工作效率。SpringMVC 是一个基于DispatchServlet的MVC框架,url-pattern 中配置的每一个请求都有DispatchServlet来负责转发给相应的Controller,Controller处理后返回相应的View或Modul给用户或者都不返回,在SpringMVC中,是由@Controller 和 @RequestMapping来声明对应的请求关系的。下面我们来看看如何用Spring MVC 开发WEB项目。
Step1. 在myeclipse中新建一个Web Project,添加Spring MVC要用到的jar包。
Step2. DispatchServlet是继承自HttpServlet,先在web.xml中配置DispatchServlet(SpringMVC),代码如下:
<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Set parameters for Servlet context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring/spring*.xml</param-value>
</context-param>
<!-- 配置Spring监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring MVC 入口配置 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring/springMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
context- param (context-param,它用于配置ServletContext 的信息,即应用程序上下文信息。contextConfigLocation这个参数定义了SpringMVC要装入的配置文件的路径,默认的路径是在WEB-INF下面。
ContextLoaderListener这个监听器的作用就是在WEB容器启动时,自动装配ApplicationContext.xml, ApplicationContext.xml的路径就是上面context-param中定义的路径。
DispatchServlet的配置信息,如果<servlet></servlet>中没有配置<init-param></init-param>节点,在初始化Servlet时,SpringMVC 回到WEB-INF下面去找servlet-name-servlet.xml,在上面的配置中,SpringMVC会去WEB-INF下面找springMVC-servlet.xml文件。如果配置这个节点,SpringMVC会去指定的路径下查找这个文件。
<servlet-mapping>...</servlet-mapping>Servlet映射
<servlet-name>...</servlet-name>指定 servlet, 这个servlet必须是前面已经定义过的servlet.
<url-pattern>...</url-pattern>配置什么样的请求会由DispatchServlet来处理,在上面的配置文件中,所有以.do结尾的请求都由springMVC这个servlet 处理。
step3. 配置springMVC.xml
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!-- 注解扫描 -->
<context:component-scan base-package="com.web"/>
<!-- 配置视图解析 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
component-scan 回去扫描 base-package指定的包下的所有的标有@Component注解的所有类,并注册成bean.
在SpringMVC中, 除了 @Component注解外,还提供了@Controller, @Service,@Repository, 其实这三个注解是对@Component注解的一个细化,当有组件不好分类的时候,就用@Component注解。
step4. 下面我们来看Controller 的实现
package com.web.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.web.dao.StudentDao;
import com.web.entity.Student;
import com.web.service.StudentService;
@Controller
public class LoginController {
@RequestMapping (value="/login")
public String login(HttpServletRequest request, HttpServletResponse response){
request.setAttribute("name", "Anna Zhao");
return "index";
}
}
在处理完请求后,Controller返回index.jsp页面。
step5. 下面我们来看index.jsp的实现。
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
I am princess ${name} <br>
</body>
</html>
在 apache-tomcat-6.0.29\conf\Catalina\localhost中添加一个 myproject.xml文件,文件内容如下:
<Context path="/myproject" docBase="workspacePath/webprojectName/WebRoot" />
在浏览器中输入http://localhost:8080/myproject/login.do
页面会显示: I am princess Anna Zhao