Spring Web应用入门

Spring的Web应用框架也是一个基于web容器的一个框架,因此作为一个Servlet应用运行在容器中,实际上也就是一个普通的web应用,本文已Tomcat5.59版本容器为例来看Spring(V1.21)的配置和应用.

在Spring Web框架中一般我们要提供三样东西:一个是自己的表示层页面,可以是velocity,xslt,freemarker,jasperreports等资源,一个是值对象类,再一个就是控制器,在这个类的子类中提供我们自己的业务功能,比如扩展了SimpleFormController类的控制器处理表单数据. Spring提供了多种控制器拱扩展,我们需要覆盖这些类中的:
  public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response);
  protected ModelAndView onSubmit(Object cmd, BindException ex)throws Exception 
  protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,
  Object cmd,BindException ex)
  如果两个onSubmit同时出现在类中,则参数多的那个具有较高的调用优先级.

首先,创建一个简单的控制类LoginAction ,它扩展Spring框架提供的SimpleFormController 类:

public class LoginAction extends SimpleFormController {
 private String fail_view;
 private String success_view;

 protected ModelAndView onSubmit(Object vo, BindException ex)throws Exception {
  LoginInfo loginInfo = (LoginInfo) vo;
  if (login(loginInfo) == 0) {
   HashMap result_map = new HashMap();
   result_map.put("logininfo", loginInfo);
   return new ModelAndView(this.getSuccess_view());
  } else {
   return new ModelAndView(this.getFail_view());
  }
 }

 private int login(LoginInfo loginInfo) {
  if ("user".equalsIgnoreCase(loginInfo.getUsername())
    && "password".equals(loginInfo.getPassword())) {
   return 0;
  }
  return 1;
 }

 public String getFail_view() {
  return fail_view;
 }

 public String getSuccess_view() {
  return success_view;
 }

 public void setFail_view(String string) {
  fail_view = string;
 }

 public void setSuccess_view(String string) {
  success_view = string;
 }
}

通过覆盖父类中的onSubmit方法,我们提供了自己的认证功能,它接受的vo参数是一个用户信息类,这个类中的信息由Spring框架根据客户发来的请求对象中的信息填充,并通过调用LoginAction类对象的onSubmit方法传递给我们的业务方法进行处理.那个值对象定义如下:


public class LoginInfo {
 private String username;

 private String password;

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }
}

现在,该是编写表示层的时候了,由三个页面组成:login.htm,index.jsp和loginfail.jsp.

登录页面login.htm

<html>
<body>
<p align="center">登录</p>
<form method="POST" action="login.do">
<br>
用户名:
<input type="text" name="username" >
<br>
密 码 :
<input type="password" name="password" >
<br>
<p>
<input name="submit" type="submit" value="提交" >
<input name="reset" type="reset" value="重置">
</p>
</form>
</body>
</html>

主页面index.jsp

<%@page import="com.web.spring.*"%>
<html>
<body>
<jsp:useBean id="logininfo" scope="request" type="com.web.spring.LoginInfo"/>
<p>Login Success!!!</p>
<p>Current User:
<jsp:getProperty name="logininfo" property="username"/>
</p>
</body>
</html>

loginfail.jsp,只是向你报告登录失败.

<html>
<body>
<p>Login Failure!!!</p>
</body>
</html>

Spring需要的三样资源都提供完毕了,如何装配呢,利用一个xml文件,这个文件的文档类型在http://www.springframework.org/dtd/spring-beans.dtd 中定义,Spring的IOC容器实现知道如何处理其中定义的各个元素.这个配置文件命名为config.xml,名字可以任意取,但必须在web描述符文件中指定见下文.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <!--定义一个视图解析器,用于把输出结果与输出界面相融合,为表现层提供呈现资源;viewClass属性的值还可以是org.springframework.web.servlet.view.freemarker.FreeMarker,

org.springframework.web.servlet.view.velocity.VelocityView,这个例子用的是JstlView,处理jsp页面,通过这种方式,Spring的Web框架提供了利用多种表现层技术的方式.属性prefix告诉Spring资源来自哪里,suffix告诉Spring要处理的是哪类资源.

-->
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass">
   <value>org.springframework.web.servlet.view.JstlView</value>
  </property>
  <property name="prefix">
   <value>WEB-INF/view/</value>
  </property>
  <property name="suffix">
   <value>.jsp</value>
  </property>
 </bean>
 <!--影射请求的URL到对应的控制器 -->
 <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <props>
    <prop key="login.do">LoginAction</prop>
   </props>
  </property>
 </bean>
 <!---控制器定义-->
 <bean id="LoginAction" class="com.web.spring.LoginAction">
  <property name="commandClass">

<!-- 由LoginAction处理的VO资源 -->
   <value>com.web.spring.LoginInfo</value>
  </property>

<!-- 登录失败 将处理的资源 :WEB-INF/view/loginfail.jsp -->
  <property name="fail_view">
   <value>loginfail</value>
  </property>

<!-- 登录失败 将处理的资源 :WEB-INF/view/index.jsp -->
  <property name="success_view">
   <value>index</value>
  </property>
 </bean>
</beans>

这个配置文件定义了三个bean,全都被Spring的IOC容器管理.

最后,看看它的web描述符文件web.xml.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<web-app 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" version="2.4">
 <servlet>
  <servlet-name>Dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/conf/config.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>Dispatcher</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
   <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

这个配置文件即可把Spring纳入到容器中,使你能利用到它的功能.其中在<init-param>节点中配置了名为“contextConfigLocation”指定了Spring的配置文件为:/WEB-INF/conf/config.xml,如果不提供这个参数将使用默认配置文件:/WEB-INF/<servlet name>-servlet.xml,在本例中servlet name元素的值是Dispatcher 所以默认配置文件是:Dispatcher-servlet.xml.

到此,在演示了IOC容器的类型2使用方式的同时,一个简单的纯Spring MVC Web框架的Web应用也介绍完了,复制这里的例子文件可以运行它,需要保证lib下至少有4个库:spring.jar,log4j-1.2.9.jar,jstl.jar,standard.jar.



原文链接: http://blog.csdn.net/keepeye/article/details/405642

你可能感兴趣的:(Spring Web应用入门)