`
duanxw
  • 浏览: 8844 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring MVC入门使用

阅读更多

这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦!

首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController 的程序进行处理, helloController 再调用 一个名为 hello.jsp 的 jsp 文件生成 HTML 代码发给用户的浏览器显示. 上面的名称(/hello.do, helloController, hello.jsp) 都是变量, 你可以更改.

在 Spring MVC 中, jsp 文件中尽量不要有 Java 代码, 只有 HTML 代码和"迭代(forEach)"与"判断(if)"两个jstl标签. jsp 文件只作为渲染(或称为视图 View)模板使用.

好了, 我们开始吧. 首先我们需要一个放在 WEB-INF 目录下的 web.xml 文件:

web.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 4          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 6          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 7 
 8     <context-param>
 9         <param-name>contextConfigLocation</param-name>
10         <param-value>
11             /WEB-INF/database.xml
12             /WEB-INF/applicationContext.xml
13         </param-value>
14     </context-param>
15 
16     <listener>
17         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
18     </listener>
19 
20     <filter>
21         <filter-name>encodingFilter</filter-name>
22         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
23         <init-param>
24             <param-name>encoding</param-name>
25             <param-value>UTF-8</param-value>
26         </init-param>
27     </filter>
28 
29     <filter-mapping>
30         <filter-name>encodingFilter</filter-name>
31         <url-pattern>*.do</url-pattern>
32     </filter-mapping>
33 
34     <servlet>
35         <servlet-name>ideawu</servlet-name>
36         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
37         <load-on-startup>1</load-on-startup>
38     </servlet>
39 
40     <servlet-mapping>
41         <servlet-name>ideawu</servlet-name>
42         <url-pattern>*.do</url-pattern>
43     </servlet-mapping>
44 
45     <welcome-file-list>
46         <welcome-file>index.jsp</welcome-file>
47         <welcome-file>index.html</welcome-file>
48     </welcome-file-list>
49 
50     <jsp-config>
51         <taglib>
52             <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
53             <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
54         </taglib>
55         <taglib>
56             <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
57             <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
58         </taglib>
59     </jsp-config>
60 
61 </web-app>

它配置了以下功能:

  • 配置 DispatcherServlet (servlet 标签), 它是一个 Java Servlet 程序. 我们将它命名为 ideawu. 然后我们再配置 Servlet 映射(servlet-mapping 标签), 也就是你希望哪些请求被DispatcherServlet处理. 这里, 我们设置后缀名为 do(*.do) 的所有URL请求都被名为 ideawu 的 DispatcherServlet 的程序处理. 选择 .do 只是一个习惯,但是你不要选择 .html! 虽然《Spring in Action》选择了 .html, 但是那是一种非常糟糕的作法, 特别是你整合 ApacheTomcat 的时候.

  • 配置 CharacterEncodingFilter (filter 标签), 否则你会发现中文乱码. 因为我的 jsp 和 html 文件都是 UTF-8 编码的, 所以我在 param-value 标签中设置了 UTF-8. 估计你使用的是 GB2312 或者 GBK, 立即转到 UTF-8 上来吧.

  • 分解配置文件. context-param 标签指明我们的配置文件还有 /WEB-INF/database.xml 和 /WEB-INF/applicationContext.xml. ContextLoaderListener(listener 标签) 由此得知配置文件是哪些, 它会将它们载入.

因为我们将 DispatcherServlet 命名为 ideawu, 所以我们在 WEB-INF 目录下建立一个名为 ideawu-servlet.xml 的文件:

ideawu-servlet.xml:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 3 
 4 <beans>
 5 
 6     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 7         <property name="prefix" value="/WEB-INF/jsp/" />
 8         <property name="suffix" value=".jsp" />
 9     </bean>
10 
11     <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
12         <property name="mappings">
13             <props>
14                 <prop key="/hello.do">helloController</prop>
15             </props>
16         </property>
17     </bean>
18 
19     <bean id="helloController" class="com.ideawu.HelloController">
20         <!--
21         <property name="helloManager" ref="helloManager" />
22         -->
23     </bean>
24 
25 </beans>

它配置了以下功能:

  • 配置 InternalResourceViewResolver, 它是 jsp 渲染模板的处理器. 如果你告诉 InternalResourceViewResolver 处理一个名为 hello 的模板时, 它会渲染 /WEB-INF/jsp/hello.jsp 文件. 把 jsp 文件放到 /WEB-INF/jsp/ 目录下是被鼓励的, 这样可以防止用户不经过 Controller 直接访问 jsp 文件从而出错(有些顽皮的人很喜欢这样做).

  • 配置 SimpleUrlHandlerMapping, 在上面的配置文件中, /hello.do 的请求将被 helloController 处理. "/hello.do"和"helloController" 是变量, 你可以更改. 但是你注意到了吗, hello.do 以 .do 作为后缀名. 如果这里(本文的条件下)你不使用.do 作为后缀名, 就没有程序来处理这个请求了. 因为 DispatcherServlet 将收到的请求转交给 SimpleUrlHandlerMapping, DispatcherServlet 收不到的请求, SimpleUrlHandlerMapping 当然也收不到了. 你可以在 props 标签内配置多个 prop 标签.

  • 我们将在后面编写 com.ideawu.HelloController 类.

上面, 我们在 web.xml 文件中告诉 ContextLoaderListener, 我们还有另外两个配置文件 /WEB-INF/database.xml 和 /WEB-INF/applicationContext.xml.

applicationContext.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 3 
 4 <beans>
 5 
 6     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 7         <property name="locations">
 8             <list>
 9                 <value>/WEB-INF/jdbc.properties</value>
10             </list>
11         </property>
12     </bean>
13 
14 </beans>

它配置了以下功能:

  • 读取 /WEB-INF/jdbc.properties 文件. 你可以在 list 标签中配置多个 value 标签.

database.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 3 
 4 <beans>
 5 
 6     <!-- Remove this if your database setting is fine.
 7     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 8         <property name="driverClassName" value="${jdbc.driverClassName}"/>
 9         <property name="url" value="${jdbc.url}"/>
10         <property name="username" value="${jdbc.username}"/>
11         <property name="password" value="${jdbc.password}"/>
12     </bean>
13     -->
14 
15     <!-- Transaction manager for a single JDBC DataSource
16     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
17         <property name="dataSource" ref="dataSource"/>
18     </bean>
19     -->
20 
21     <!--
22     <bean id="attributeManager" class="com.ideawu.core.AttributeManager">
23         <property name="dataSource" ref="dataSource"/>
24     </bean>
25     -->
26 
27 </beans>

它配置了以下功能(不过,已经注释掉了):

  • 配置数据库连接. 类似${jbbc.url}是一种访问变量的方法. 我们可以从 /WEB-INF/jdbc.properties 中找到这个变量的值. 如果你的数据库已经配置好, 就将第一个注释去掉.

jdbc.properties:

1 jdbc.driverClassName=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8
3 jdbc.username=test
4 jdbc.password=12345

现在, 我们来编写 Java 代码吧.

 1 /***********************************************************
 2 * Date: 2006-8-26
 3 * File: HelloController.java
 4 * Author: ideawu
 5 ***********************************************************/
 6 
 7 package com.ideawu;
 8 
 9 import org.springframework.web.servlet.mvc.Controller;
10 import org.springframework.web.servlet.ModelAndView;
11 
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 
15 /**
16  * @author ideawu
17  *
18  */
19 public class HelloController implements Controller {
20 /*  
21     private HelloManager helloManager;
22 
23     public void setHelloManager(HelloManager helloManager) {
24         this.helloManager = helloManager;
25     }
26 */
27 
28     public ModelAndView handleRequest(HttpServletRequest request,
29             HttpServletResponse response)throws Exception{
30 
31         request.setAttribute("hello_1", "你好啊, Spring!");
32         request.setAttribute("hello_2", "Hello World!");
33 
34         return new ModelAndView("hello");
35     }
36 
37 }

return new ModelAndView("hello"); 告诉 InternalResourceViewResolver jsp 模板的名字叫作 hello. request.setAttribute() 设置的对象我们可以在 jsp 文件中使用.

hello.jsp:

 1 <%@ page contentType="text/html; charset=UTF-8" %>
 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 <html xmlns="http://www.w3.org/1999/xhtml">
 5 <head>
 6     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 7     <title>Hello World!</title>
 8 </head>
 9 <body>
10 
11 <h2>${hello_1}</h2>
12 
13 <h2>${hello_2}</h2>
14 
15 </body>
16 </html>

你可以下载整个 Web 应用程序. 在 Debian Linux, Tomcat 5.5.16, JDK1.5.0 下运行良好. 解压后得到一个 spring 文件夹, 放到你的 webapps 目录下, 在浏览器中输入 http://localhost:8080/spring/hello.do 就可以访问了.

分享到:
评论

相关推荐

    精简源码-spring-mvc 入门级使用,亲测好用

    这个"精简源码-spring-mvc 入门级使用"的压缩包文件,旨在为初学者提供一个简单易懂的实践案例,帮助他们快速理解和上手 Spring MVC。 首先,我们从 "spring" 这个标签开始。Spring 是一个开源框架,它提供了一个...

    Spring MVC入门(登录示例)

    **Spring MVC 入门教程——基于登录示例** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者分离业务逻辑、数据处理和用户界面,使得代码更易于...

    Spring MVC 入门实例

    这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring...

    spring mvc经典入门案例

    这个经典入门案例将引导你逐步了解并掌握 Spring MVC 的基本概念、配置以及实际应用。 1. **Spring MVC 概述** Spring MVC 是一个模型-视图-控制器(MVC)架构模式的实现,它简化了Java Web 应用的开发,提供了一...

    Spring MVC入门教程

    十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? 十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向...

    spring mvc 的入门级资料

    Spring MVC 入门级资料 Spring MVC 是一个基于 Java 的 Web 框架,它提供了一种灵活、可扩展、Easy-to-use 的 Web 应用程序开发方式。Spring MVC 是 Spring 框架的一部分,提供了一个强大、灵活、可扩展的 MVC 框架...

    spring MVC_快速入门

    要使用Spring MVC,首先需要在项目中引入Spring MVC的依赖,并配置Spring的DispatcherServlet,它是Spring MVC的前端控制器,负责调度请求到相应的处理器。 3. **Controller** Controller是处理请求的组件,通常...

    Spring mvc指南+Spring mvc入门

    Spring MVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。本指南将深入探讨 Spring MVC 的核心概念、配置、控制器、...

    spring mvc入门示例

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。它作为Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、用户界面和数据访问分离开来,...

    Spring MVC 教程快速入门 深入分析

    Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,使用了IoC容器,支持RESTful风格的应用程序开发。Spring MVC通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发...

    spring mvc入门书籍

    Spring MVC 是一款强大的Java web应用程序框架,用于构建高效、模块化的Web应用。它基于Spring框架,专注于处理HTTP请求和响应,...《Spring MVC入门》这本书将帮助你深入了解这一框架,并引导你一步步掌握其使用技巧。

    spring mvc入门小例子

    本教程将深入探讨Spring MVC的基本概念和关键组件,帮助初学者快速入门。 首先,让我们理解Spring MVC的核心组件: 1. **DispatcherServlet**:它是Spring MVC的前端控制器,负责接收HTTP请求,根据请求的URL和...

    Spring MVC入门项目

    本项目是一个专门为初学者设计的入门教程,旨在帮助大家快速掌握Spring MVC的基本概念和使用方法。 1. **Spring MVC 框架简介** Spring MVC 是 Spring 框架的一部分,它通过解耦业务逻辑、数据处理和用户界面,...

    intellij idea 2017 spring mvc 入门

    【描述】:“Java Spring MVC超简单,Spring MVC入门,第一个Java程序,IntelliJ IDEA入门” 这表明我们将从零开始,逐步学习如何在IntelliJ IDEA这个强大的Java集成开发环境中配置Spring MVC环境,创建并运行一个...

    spring mvc 入门范例

    要开始使用Spring MVC,你需要在项目的`web.xml`中配置DispatcherServlet,它是Spring MVC的核心组件,负责调度请求。同时,还需要配置Spring的上下文配置文件,包含Spring MVC的bean定义。 3. **@Controller注解*...

    Spring mvc 入门向导

    在这个Spring MVC入门向导中,我们将深入探讨如何配置开发环境、理解Spring MVC的架构以及构建Web Store项目。 首先,配置Spring开发环境至关重要。这包括安装Java Development Kit (JDK),设置环境变量以确保Java...

    Spring MVC入门Demo

    本入门Demo将帮助初学者快速理解并掌握 Spring MVC 的基本概念和使用方法。 首先,Spring MVC 提供了控制器(Controller)的概念,它负责接收来自客户端的请求,处理业务逻辑,并将结果传递给视图(View)。在 ...

    spring mvc 入门介绍

    ### Spring MVC 入门知识点详解 #### 一、Spring MVC 概述 Spring MVC 是 Spring 框架的一部分,主要用于构建基于 Model-View-Controller (MVC) 设计模式的 Web 应用程序。它提供了丰富的功能来简化 Web 开发过程,...

    Spring MVC 教程 快速入门 深入分析

    Spring MVC 教程 快速入门 深入分析 目录 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置...

Global site tag (gtag.js) - Google Analytics