Spring温故知新:WEB篇

  1. 云栖社区>
  2. 博客>
  3. 正文

Spring温故知新:WEB篇

余二五 2017-11-22 16:50:00 浏览538
展开阅读全文

在准备写代码之前,我们首先得把下列必备的库导入项目: 
spring-framework-2.5.6\dist\spring.jar 
spring-framework-2.5.6\dist\modules\spring-webmvc.jar 
spring-framework-2.5.6\lib\jakarta-commons\commons-logging.jar 
spring-framework-2.5.6\lib\j2ee\jstl.jar 

      只要把这几个文件拷贝到项目的WebContent\WEB-INF\lib目录下,然后在eclipse里刷新一下项目,就可以自动导入库。 

        这时候我们可以开始修改项目的WebContent\WEB-INF文件夹下的web.xml这个配置文件。 
        要使用Spring来制作一个web,首先我们得在web.xml里新建一个servlet,这个servlet的作用就是告诉tomcat容器,当一个请求符合某一种规则的时候就用Spring来负责处理这个请求。 

        例如我们需要让Spring来接管所有以.do为后缀的url请求,那么就需要修改web.xml为以下内容:
 
web.xml: 
 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app id="WebApp_ID" version="2.4"  
  3.     xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  5.     <display-name>SpringWeb</display-name>  
  6.     <welcome-file-list>  
  7.         <welcome-file>index.html</welcome-file>  
  8.         <welcome-file>index.htm</welcome-file>  
  9.         <welcome-file>index.jsp</welcome-file>  
  10.         <welcome-file>default.html</welcome-file>  
  11.         <welcome-file>default.htm</welcome-file>  
  12.         <welcome-file>default.jsp</welcome-file>  
  13.     </welcome-file-list>  
  14.     <servlet>  
  15.         <servlet-name>dispatcherServlet</servlet-name>  
  16.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  17.     </servlet>  
  18.     <servlet-mapping>  
  19.         <servlet-name>dispatcherServlet</servlet-name>  
  20.         <url-pattern>*.do</url-pattern>  
  21.     </servlet-mapping>  
  22. </web-app>  



        如果有servlet编程基础的话就可以知道,servlet-name节点的内容是可以自定义的,不过<servlet>和对应的<servlet-mapping>一定要有相同的servlet-name。它们分别代表了一个servlet的定义和servlet的映射关系。 

以上这个servlet的作用,就是告诉tomcat只要url请求是以.do为后缀的,就交给org.springframework.web.servlet.DispatcherServlet这个Spring的类来处理,而DispatcherServlet看字面意思就能明白它的作用就是一个分配器。 



        只要在web.xml里成功配置好以后,我们就可以正式进入spring部分。首先我们得在web.xml的同一目录下新建一个dispatcherServlet-servlet.xml文件。 

        当然你可以在任意目录新建一个任意文件名的xml,而且一般都会放在WEB-INF文件夹下的一个新建的自定义文件夹里,一般为WEB-INF\conf文件夹。不过这样的话你还得在web.xml文件里修改一下servlet的参数。 
这里就把这个内容作为自学内容交给你自己去google吧,学会google要比学会编程更重要啊! 

        那么默认情况下是不是这个xml的文件名必须是dispatcherServlet-servlet.xml呢?回答是肯定的。 
        在默认情况下,Spring会首先自动查找web.xml同一目录下、而且文件名为servlet的名称再加上-servlet的xml文件。 
        这时候你就会发现dispatcherServlet-servlet.xml这个文件名的横杆前部分就是之前web.xml里的servlet-name的值、后半部分就是恒定的servlet这个单词。 
        如果之前你自定义了servlet-name,比如改成了bolide74Servlet,那么这里的文件名就必须是bolide74Servlet-servlet.xml。 

dispatcherServlet-servlet.xml: 
 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  6.     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  7.     http://www.springframework.org/schema/context    
  8.     http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  9.     <!-- 视图 -->  
  10.     <bean id="viewResolver"  
  11.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  12.         <!-- 使用标签库,暂时可不用 -->  
  13.         <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->  
  14.         <property name="prefix" value="/WEB-INF/jsp/" />  
  15.         <property name="suffix" value=".jsp" />  
  16.     </bean>  
  17.   
  18.     <!-- 映射 -->  
  19.     <bean id="urlMapping"  
  20.         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  21.         <property name="mappings">  
  22.             <props>  
  23.                 <prop key="helloWorld.do">helloWorld</prop>  
  24.             </props>  
  25.         </property>  
  26.     </bean>  
  27.   
  28.     <!-- action -->  
  29.     <bean id="helloWorld" class="com.iteye.bolide74.action.HelloWorld">  
  30.         <property name="viewPage" value="helloWorld" />  
  31.     </bean>  
  32. </beans>  



        你会发现,这个dispatcherServlet-servlet.xml其实就是一个Spring配置文件,里面都是一个个的bean,很亲切吧! 
        viewResolver这个bean的作用就是告诉Spring我们的web视图文件都是以.jsp为后缀也就是jsp页面,它们都存放在/WEB-INF/jsp/这个文件夹下面。只要有了这个bean那么接下来的action部分就不用这么麻烦的每次都把jsp页面的路径和文件名都写全了。 
        urlMapping就是一个映射表,它告诉了Spring哪种url请求对应了哪一个action,例如我们这里是告诉Spring只要url请求为helloWorld.do,那么调用helloWorld这个bean。 
        helloWorld这个bean我就不多做解释了。它的注入参数为viewPage,值为helloWorld。这个helloWorld的值代表了这个action对应的视图文件为/WEB-INF/jsp/helloWorld.jsp,由于上面我们在viewResolver设置过路径和后缀,所以我们这里只需要输入helloWorld就可以了。 

最后我们总结一下这个xml的作用,就是告诉Spring我们的视图文件为存放在/WEB-INF/jsp/目录下的所有jsp文件,并且设置当url请求为helloWorld.do的时候就调用helloWorld这个bean来处理,并把helloWorld这个值注入了viewPage这个参数。 



接下来我们新建com.iteye.bolide74.action.HelloWorld这个action类: 

HelloWorld.java: 
 

Java代码 复制代码 收藏代码
  1. package com.iteye.bolide74.action;   
  2.   
  3. import java.util.HashMap;   
  4. import java.util.Map;   
  5.   
  6. import javax.servlet.http.HttpServletRequest;   
  7. import javax.servlet.http.HttpServletResponse;   
  8.   
  9. import org.springframework.web.servlet.ModelAndView;   
  10. import org.springframework.web.servlet.mvc.Controller;   
  11.   
  12. public class HelloWorld implements Controller {   
  13.     private String viewPage;   
  14.   
  15.     public String getViewPage() {   
  16.         return viewPage;   
  17.     }   
  18.   
  19.     public void setViewPage(String viewPage) {   
  20.         this.viewPage = viewPage;   
  21.     }   
  22.   
  23.   
  24.     @Override  
  25.     public ModelAndView handleRequest(HttpServletRequest arg0,   
  26.             HttpServletResponse arg1) throws Exception {   
  27.         String msg=arg0.getParameter("msgValue");   
  28.         msg="你输入的值为"+msg;   
  29.         Map model = new HashMap();   
  30.         model.put("msg", msg);   
  31.         return new ModelAndView(getViewPage(), model);   
  32.     }   
  33. }  



这个类实现了Controller接口,这个接口是由Spring提供的。它其实是起到了一个代理作用,还记得以前的AOP代理么?忘记了的话可以回头复习一下。 

这个类有一个viewPage成员属性,使用了set/get注入。当然你也可以用自定义的属性。它的值代表了这个action所对应的视图文件的文件名,这个我们之前有提到过。 

Controller接口有一个handleRequest抽象方法,它的类型为ModelAndView,这个类型是Spring提供的,它的命名就是它的作用,后面我会详细介绍一下这个类型。简单的说就是这个类包含了一个url请求的参数数据和视图内容。如果你知道MVC,那么这个类就包含了其中的M和V而Controller接口就是那个C。 
这里的handleRequest方法我们在"原Model"里嵌入了一个msg参数,它的值为HttpServletRequest获取的msgValue这个URL参数的值。 


最后在/WEB-INF/jsp/目录下新建一个helloWorld.jsp视图文件:
 
helloWorld.jsp: 
 

Html代码 复制代码 收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.     <form action="helloWorld.do">  
  11.         <input type="text"  name="msgValue"  value="" />    
  12.         <input type="submit"  value="speak" />  
  13.     </form>  
  14.     <%=request.getAttribute("msg")%>  
  15. </body>  
  16. </html>  


这个我想都看的懂吧,就是一个传统的jsp页面。里面就一个form,注意到name为msgValue的文本输入框了没?上面的HelloWorld.java的作用获取的就是这里的msgValue的值然后处理了一下再返回给客户端。 



好了,大功告成,我们直接F11启动,注意是Run on Server,这时候eclipse会新建一个内置浏览器标签,浏览器里的url地址为http://localhost:8080/SpringWeb/WEB-INF/jsp/helloWorld.jsp但是页面内容却显示的是404错误。 
这是由于tomcat的安全机制,客户端是无法直接访问WEB-INF这个文件夹以及它下面的所有文件的,因此我们才会把所有重要的配置文件、视图源码之类的都放在这个文件夹下面。 

我们要看到劳动成功,就得在地址栏里输入URL为:http://localhost:8080/SpringWeb/helloWorld.do  如果你全部按步骤进行,那么现在你就能看到页面内容为 

 

在输入框里输入Hello,World!再点击Speak按钮,你就能看到“你输入的值为Hello,World!” 
恭喜你,终于入门Spring Web编程了。





本文转自 vfast_chenxy 51CTO博客,原文链接:http://blog.51cto.com/chenxy/762059,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
余二五
+ 关注