`
kingxss
  • 浏览: 969455 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring3 MVC的最佳实践和理解(1)

阅读更多

 

 个人学习参考所用,勿喷! 

 

1.搭建一个基于Spring3的MVC应用。

1.1) 建立一个webapp,这里还是采用Maven构建,构建过程参考limingnihao的blog(写得相当的详细!!!): 使用Eclipse构建Maven的SpringMVC项目

 

1.2) 编辑pom.xml,添加Spring3 MVC所必须的jar包,除了Spring基本的core、bean等jar包,这里还需要有web和mvc的相关jar。具体根据需要来。需要哪些jar在附件的工程中都有。需要注意:pom.xml中不用加入el-api.jar和jsp-api.jar两个jar包,因为tomcat目录下有,如果加入了,即使设置scope=provided,也会会产生Unable to read TLD "META-INF/fmt.tld"的Exception。但是如果没有这jsp-api这个jar,会带javax.servlet.jsp.JspException cannot be resolved to a type等Exception。这里不许理会,因为从正常的运行结果来看是正常的。或者添加jar后删除掉tomcat目录下的对应jar来解决问题

 

1.3) 编辑webapp的web.xml,添加DispatcherServlet入口。以下为到web.xml的根目录的内容和说明:

<!-- 多个Spring的配置文件,要以逗号或者空格分割 -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/court-service.xml</param-value>
</context-param>
<!-- 使用监听器ContextLoaderListener加载是上述的多个文件,加载到根应用上下文中-->
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 可以配置多个DispatcherServlet到不同的路径 -->
<servlet>
	<servlet-name>court</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!-- 相对使用监听器ContextLoaderListener加载,每个DispatcherServlet将其加载到自己的应用上下文,
	并且可引用根应用上下文为其上级 。每个DispatcherServlet实例加载上下文可以访问甚至覆盖根应用的上下文中声明的bean(反之不行),
	但是每个DispatcherServlet实例加载上下文无法相互访问-->
	<!-- 
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/court-servlet.xml,/WEB-INF/court-service.xml</param-value>
	</init-param>
	 -->
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>court</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
 

 

1.4) 创建一个用Spring的annotation标识@Controller表示的控制器,并且用@RequestMapping来映射URL到这个控制器。具体的代码如下:

@Controller
// Bind controller to URL /welcome
// initial view will be resolved to the name returned in the default GET method
@RequestMapping("/welcome")
public class WelcomeController {
    // Controller will always look for a default GET method to call first, irrespective of name
    // In this case, named welcome to ease identification
    @RequestMapping(method = RequestMethod.GET)
    // Method contains Model input to setup date object
    // NOTE: Model is a Java 5 interface -- newer than the older ModelMap and still older ModelAndView
    public String welcome(Model model) {
        Date today = new Date();
	// Add date to model so it can be display in view
	model.addAttribute("today",today);
	// Return view welcome. Via resolver the view
	// will be mapped to /WEB-INF/jsp/welcome.jsp
        return "welcome";
    }
}

 

1.5) 创建了控制器并且将应用方法绑定到了相对应URL路径上,那么现在应该来激活这些控制器标识。在WEB-INF下创建court-servlet.xml,虽然在web.xml没有直接配置这个文件,但是ContextLoaderListener会自动的搜索WEB-INF下*-servlet.xml(这里的*是web.xml中配置的配置的DispatcherServlet的名称)。这里court-servlet.xml具体的配置和说明如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   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">

	<!-- 激活自动检测注解,自动搜索@Controller和@RequstMapping注解的存在,包括其下面的子包-->
	<context:component-scan base-package="com.watson.action" />
	
	<!-- 处理类级别的@RequstMapping注解 -->	 
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
	<!-- 处理方法级别的@RequstMapping注解 -->	
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
	
	<!-- DispatcherServlet接收到处理程序返回的视图名称,并解析为视图实现以供显示。 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

 

1.6) 根据1.5步中对逻辑视图和视图文件的映射关系的设置,这里需要在WEB-INF的view目录下创建一个JSP文件welcome.jsp用来处理上述1.4步中的控制器的返回结果,并返回给浏览器。具体代码如下:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>  
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h2>Welcome to Court Reservation System</h2>
Today is <fmt:formatDate value="${today}" pattern="yyyy-MM-dd" />.
<hr />
Handling time : ${handlingTime} ms
<br />
Locale : ${pageContext.response.locale}
</body>
</html>

 

1.7) 最后发布创建的应用到tomcat下,在本地的浏览其中输入http://[host]:[port]/[appname]/welcome,例如楼主的实例中输入如下:http://localhost:7070/Spring3MVC/welcome。浏览器显示的结果如下:

Welcome to Court Reservation System

Today is 2012-04-23.
Handling time : 0 ms 
Locale : zh_CN

 


参考:

juyon的blog: spring3 MVC国际化支持之中文乱码

Gary Mark等的书籍:《Spring Recipes》2ed

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics