IT民工窝棚qbq.blog.chinaunix.net
qbq
全部博文(708)
国产(1)
欧美(1)
SEO(1)
CSS3(5)
TestNG(4)
HTML5(2)
iBatis(3)
URLRewrite(1)
WebService(1)
WebServer(12)
PHP(8)
OGNL(1)
AS2(2)
Multimedia(0)
Flex AS3(29)
面试(9)
Commet(1)
Ivy(2)
Bat(8)
Maven(18)
CSS(7)
Ext(9)
Spring问题集(4)
Word(1)
JFreeChart(2)
Groovy on Grails(14)
Python(1)
Portlet(3)
amCharts(4)
CSharp.NET(3)
Tools(1)
S2Dao(8)
HSQL(9)
taglib(28)
Source Safe(3)
JSTL(6)
EL(2)
Seasar-SAStruts(3)
Prototype(0)
JQuery(3)
DWR(7)
AJAX(14)
Guice(13)
Digit(2)
Notebook(4)
Log4J(8)
Servlet(2)
JSP(4)
Eclipse(12)
VB.NET(3)
DotNet(3)
JavaScript(63)
Thinking In Soft(10)
Framework(11)
English(0)
Struts2(14)
Struts(38)
Hibernate(10)
Spring(30)
HTML(14)
Web(5)
MYSQL(9)
SQLSERVER(1)
ORACLE(2)
SQL(3)
数据库(0)
DATABASE(0)
Windows(8)
JAVA(67)
Software(1)
Hardware(3)
OpenSource(2)
Microsoft(0)
Excel(4)
DIY(5)
Linux(4)
分类: Java
2008-03-31 15:35:29
这篇文章将教你快速地上手使用 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="" 4 xmlns:xsi="" 5 xsi:schemaLocation=" 6 /web-app_2_4.xsd"> 7 8 <context-param> 9 <param-name>contextConfigLocation</param-name>10 <param-value>11 /WEB-INF/database.xml12 /WEB-INF/applicationContext.xml13 </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 只是一个习惯,但是你不要选择 . 虽然《Spring in Action》选择了 .html, 但是那是一种非常糟糕的作法, 特别是你整合 Apache 和 Tomcat 的时候. • 配置 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" " "> 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" " "> 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" " "> 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 DataSource16 <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.Driver2 jdbc.url=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-83 jdbc.username=test4 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 ideawu17 *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="" %> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " "> 4 <html xmlns=""> 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 framework之总体分析
下一篇:myeclipse6.0注册码收藏
登录 注册