Spring的简单例子

作者在 2007-12-25 09:47:38 发布以下内容

        今天开始写Spring的了。感觉Spring和Struts差不多,不过Spring更为灵活。用Spring来代管Struts很方便,而且好用。不多说了,开始吧。

        环境:jdk1.5, Eclipse3.2, Tomcat5.5, 以及Spring1.2的包。

        Spring框架也采用的是一个前端控制器,即DispatcherServlet。符合url-pattern的所有请求都会先送到这个控制器,再由这个控制器转发给不同的控制器来处理各个请求。我们先来配置web.xml。

        web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>

<servlet-name>test</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>test</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

<display-name>

SpringTest</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

</web-app>

        在这里,我们给DispatcherServlet取名为test,那么,在WEB-INF下,应该有一个名为test-servlet.xml的配置文件。所有以.do结尾的请求将会由test-servlet来分发处理。

        然后,我们来写一个简单的index.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta. http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Index Page</title>

</head>

<body>

<center>

<form. action="home.do" method="post">

Name:<input type="text" name="name" /><br/>

<input type="submit" value="Submit" />

</form>

</center>

</body>

</html>

        这里就是一个简单的form,提交一个name属性。需要注意这里的action,是以.do结尾的,跟Struts很像,不过并没有以"/"开头。

        然后,我们来写一个控制器来处理这个请求。

        HomeController.java:

package src;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

public class HomeController implements Controller{

private String greeting;

public String getGreeting() {

return greeting;

}

public void setGreeting(String greeting) {

this.greeting = greeting;

}

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

throws Exception{

greeting = request.getParameter("name");

return new ModelAndView("home", "message", greeting);

}

}

        Spring的控制器要求返回一个ModelAndView对象,即需要返回一个视图或其逻辑名称。其中包含了处理后的一些数据。这里的数据就是简单的返回一个name属性。在return语句中,new ModelAndView()有三个参数,第一个参数是返回视图的逻辑名称,第二个是该视图中的一个变量,第三个是该变量的值。我们将index.jsp中的name传递给了home视图中的message变量。

        下面就是test-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean name="/home.do" class="src.HomeController">

</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix">

<value>/WEB-INF/jsp/</value>

</property>

<property name="suffix">

<value>.jsp</value>

</property>

</bean>

</beans>

        这里我们采用的是InternalResourceViewResolver,prefix属性表示前缀为/WEB-INF/jsp/,suffix表示后缀为.jsp。那么,视图将会在符合这两个条件的情况下寻找跟ModelAndView中视图逻辑名一样的视图返回给用户。这里要返回的就是/WEB-INF/jsp/home.jsp。注意第一个bean,表示home.do请求由src.HomeController来处理。这个是Spring默认的映射方式即BeanNameUrlHandlerMapping。

        下面就是写/WEB-INF/jsp/下的home.jsp了:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta. http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Home Page</title>

</head>

<body>

<center>

<h2>${message }</h2>

</center>

</body>

</html>

        我们将这个jsp作为一个视图,同时显示出message这个值,这个例子就完成了。

默认分类 | 阅读 1516 次
文章评论,共0条
游客请输入验证码