zoukankan      html  css  js  c++  java
  • 学习SpringMVC——从HelloWorld开始

     

      虽然从学java的第一个程序——helloworld至今,已经有好几个年头了。当时自己找资料,看视频,学习了java的输入输出流,多线程,网络编程等等, 而三大框架(Struts、Hibernate、Spring)基本只是开了个头就出来实习了,尤其对于Spring更是没有进行系统的学习, 虽然在实习的时候通过看项目,基本明白了spring mvc编程的框架是怎么回事,遇到需求知道如何写代码,在哪写代码,但是还是缺乏一个系统的认识。对于涉及到一些spring的文件配置或工作原理的问题时,就显得有些局促。所以,最近准备好好来学习下现如今在企业级开发中大行其道的Spring MVC。
     什么是Spring MVC  Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。  
     今天先从写一个Spring MVC的HelloWorld开始,让我们看看如何搭建起一个Spring mvc的环境并运行程序。
     软件参数  Eclipse:Mars.1 Release (4.5.1)  Tomcat: 8.0.36  JDK:1.8.0_60  Spring-framework: 4.0.4.RELEASE 新建项目  File-New-Other,选择Dynamic web project   项目建好之后,目录结构如下:
     导入jar包  我们基于Spring mvc框架进行开发,需要依赖一下的spring jar包:
    • spring-aop-4.0.4.RELEASE.jar
    • spring-beans-4.0.4.RELEASE.jar
    • spring-context-4.0.4.RELEASE.jar
    • spring-core-4.0.4.RELEASE.jar
    • spring-expression-4.0.4.RELEASE.jar
    • spring-web-4.0.4.RELEASE.jar
    • spring-webmvc-4.0.4.RELEASE.jar
    • commons-logging-1.1.1.jar(用来打印log)
       在WEB-INF目录下新建lib文件夹,并将上面的jar包放入其中。 
     jar包可以点击这里下载。 配置文件及编写代码  web.xml(WEB-INF下)
    复制代码
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmflns="http://java.sun.com/xml/ns/javaee"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     5     id="WebApp_ID" version="2.5">
     6     
     7     <!-- 配置DispatchcerServlet -->
     8     <servlet>
     9         <servlet-name>springDispatcherServlet</servlet-name>
    10         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    11         <!-- 配置Spring mvc下的配置文件的位置和名称 -->
    12         <init-param>
    13             <param-name>contextConfigLocation</param-name>
    14             <param-value>classpath:springmvc.xml</param-value>
    15         </init-param>
    16         <load-on-startup>1</load-on-startup>
    17     </servlet>
    18     
    19     <servlet-mapping>
    20         <servlet-name>springDispatcherServlet</servlet-name>
    21         <url-pattern>/</url-pattern>
    22     </servlet-mapping>
    23     
    24 </web-app>
    复制代码
    注意:
    1. line12-15用于配置spring mvc的配置文件的位置和名称,这里说明会新建一个springmvc.xml的配置文件  
    2. 我们也可以不新建springmvc.xml,而是用默认的,默认的配置文件格式为/WEB-INF/[servlet-name]-servlet.xml,对应这里的就是springDispatcherServlet-servlet.xml  
    3. 这里的servlet-mapping表示拦截的模式,这里是“/”,表示对于所有的请求的拦截,包括静态资源如html, js, jpg等。这时候对于静态资源的访问就会报404的错误。关于如何解决后面会介绍   Springmvc.xml(scr下)  在src目录下新建springmvc.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"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     7         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
     8         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
     9         
    10         
    11         <!-- 配置自动扫描的包 -->
    12         <context:component-scan base-package="com.jackie.springmvc"></context:component-scan>
    13         
    14         <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
    15         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    16             <property name = "prefix" value="/WEB-INF/views/"></property>
    17             <property name = "suffix" value = ".jsp"></property>
    18         </bean>
    19 </beans>
    复制代码
     注意:1. line12表示spring监听的范围,这里是在com.jackie.springmvc下  
     2. line15-18,是添加了一个视图解析器,用于把在控制器中handler的结构解析为实际的物理视图,这个要配合controller类来解析,详见下面。   HelloWorld.java(com.jackie.springmvc.handlers下)
    复制代码
     1 package com.jackie.springmvc.handlers;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.RequestMapping;
     5 
     6 @Controller
     7 public class HelloWorld {
     8 
     9     /**
    10      * 1. 使用RequestMapping注解来映射请求的URL
    11      * 2. 返回值会通过视图解析器解析为实际的物理视图, 对于InternalResourceViewResolver视图解析器,会做如下解析
    12      * 通过prefix+returnVal+suffix 这样的方式得到实际的物理视图,然后会转发操作
    13      * "/WEB-INF/views/success.jsp"
    14      * @return
    15      */
    16     @RequestMapping("/helloworld")
    17     public String hello(){
    18         System.out.println("hello world");
    19         return "result";
    20     }
    21 }
    复制代码
     注意:1. 首先要在类的前面添加“Controller”注解,表示是spring的控制器,这里会写一个方法hello()   
    2. hello方法上方有一个@RequestMapping, 是用于匹配请求的路径,比如这里匹配的请求路径就是“http://localhost:8080/springTest/springmvc/helloworld”,即当tomcat服务启动后,在浏览器输入这个url时,如果在这个方法打断点了,就会跳入该方法。  
     3. 这个return的结果不是乱写的,这个返回的字符串就是与上面springmvc.xml中line15-18进行配合的,springmvc.xml中声明了prefix和suffix,而夹在这两者之间的就是这里返回的字符串,所以执行完这个方法后,我们可以得到这样的请求资源路径“/WEB-INF/views/success.jsp”,这个success.jsp是需要我们新建的   index.jsp(WebContent下)  在新建success.jsp之前,我们需要有一个入口,也就是这里的index.jsp
    复制代码
     1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
     2     pageEncoding="ISO-8859-1"%>
     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=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 
    11 <a href="helloworld">hello world</a>
    12 
    13 </body>
    14 </html>
    复制代码
      当访问index.jsp时,页面上会展示一个超链接,点击超链后,url中的地址就会发生跳转,由“http://localhost:8080/springTest/index.jsp”跳转到“http://localhost:8080/springTest/helloworld”,而这个url请求就会进入HelloWorld中的hello方法,因为其与该方法上的“/helloworld”匹配。   success.jsp(WEB-INF/views下)  该页面是作为请求成功后的相应页面
     success.jsp
     至此,我们完成了基于Spring mvc框架的HelloWorld程序的开发,包括要依赖的jar包,配置的文件,控制器代码的编写和展示页面的编写等。除此以外,再介绍下整个配置过程中遇到的一些小问题: 1. tomcat服务器的添加  从前面的介绍可以看出,我们的程序是通过浏览器发请求来获取想要的页面,那么这里就免不了要有一个web服务器,这里就是tomcat。  首先你需要下载个tomcat,然后在eclipse->windows->preference->servers中绑定这个tomcat服务器;  其次你需要在你新建的spring mvc项目中添加tomcat的支持,否则在新建的jsp文件中会提示报错“The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path”  右键项目->build path->configure build path->add library->server runtime, 选择你的tomcat即可  有了tomcat服务器,你就可以在index.jsp上右键run on server,选择你的tomcat服务器,这样就可以启动tomcat服务,帮助你完成网页的请求和响应操作。 2. spring mvc如何访问静态资源  关于使用spring mvc处理静态资源,比如html(发现之前的springmvc.xml中<property name = "suffix" value = ".jsp"></property>定义为jsp结尾就可以成功跳转,但是如果改为html并在web-inf下面新建了html文件后,并将suffix这里的".jsp"改为".html",无法跳转到想要的html页面,并且给出404错误,同时console给出错误信息为:No mapping found for HTTP request with URI [/springTest/WEB-INF/views/result.html] in DispatcherServ)  最后发现是需要让spring明确要处理静态资源,原来的web.xml中只有 
    1 <servlet-mapping>
    2     <servlet-name>springDispatcherServlet</servlet-name>
    3     <url-pattern>/</url-pattern>
    4 </servlet-mapping>
        其匹配的都是controller中类似@RequestMapping("/springmvc/helloworld")这样的注解配置的请求,而对于类似html/css/jpg等资源的访问就会得不到,所以需要在web.xml中加入以下类型的支持  
    复制代码
     1 <servlet-mapping>
     2      <servlet-name>default</servlet-name>
     3      <url-pattern>*.css</url-pattern>
     4 </servlet-mapping>
     5 
     6 <servlet-mapping>
     7       <servlet-name>default</servlet-name>
     8       <url-pattern>*.gif</url-pattern>
     9 </servlet-mapping>
    10 
    11 <servlet-mapping>
    12     <servlet-name>default</servlet-name>
    13      <url-pattern>*.jpg</url-pattern>
    14 </servlet-mapping>
    15 
    16 <servlet-mapping>
    17      <servlet-name>default</servlet-name>
    18      <url-pattern>*.js</url-pattern>
    19 </servlet-mapping>
    20 
    21 <servlet-mapping>
    22       <servlet-name>default</servlet-name>
    23       <url-pattern>*.html</url-pattern>
    24 </servlet-mapping>
    复制代码
       这样就可以保证spring 能够拦截并处理静态资源   这里将HelloWorld.java中的hello方法改为:
    @RequestMapping("/helloworld")
        public String hello(){
            System.out.println("hello world");
            return "Jackie";
    }
       Springmvc.xml改为: 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name = "prefix" value="/WEB-INF/views/"></property>
                <property name = "suffix" value = ".jpg"></property>
    </bean>
        表示我们可以访问jpg
  • 相关阅读:
    Visifire正式版(v1.1)发布
    [转]PSP机能强大!已能模拟运行WINDOWS系统?
    在Silverlight+WCF中应用以角色为基础的安全模式(一)基础篇之角色为基础的安全模式简介 Virus
    C#的加密解密算法,包括Silverlight的MD5算法 Virus
    MMORPG programming in Silverlight Tutorial (10)Implement the sprite’s 2D animation (Part IV)
    Game Script: Rescue Bill Gates
    MMORPG programming in Silverlight Tutorial (9)KeyFrame Animation
    MMORPG programming in Silverlight Tutorial (5)Implement the sprite’s 2D animation (Part II)
    MMORPG programming in Silverlight Tutorial (7)Perfect animation
    MMORPG programming in Silverlight Tutorial (3)Animate the object (Part III)
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/6092614.html
Copyright © 2011-2022 走看看