zoukankan      html  css  js  c++  java
  • SpringMVC学习(2):经典的HelloWorld实现

    前一篇简单介绍了Spring MVC的一些知识,下面就要开始学习如何把Spring MVC运用到具体的项目中去。

    首先还是从一个简单的Hello World项目说起:

    我机器的开发环境为:

    Ubuntu12.04(不同操作系统对本系列项目没有影响);

    开发工具:Eclipse For JavaEE;

    数据库:MySql5.5.35;

    运行环境:TomCat V7.0;

    JDK:JDK 1.7.0_45;

    项目工程为:Dynamic Web Project;

    一、项目依赖的jar包:

    1.Spring框架依赖的jar包:

    日志:commons-logging-1.1.3.jar;

    JSTL支持:jakarta-taglibs-standard-1.1.2中的jstl.jar和standard.jar;

    2.Spring的jar包:

    spring-framework-3.2.5.RELEASE/libs中的jar包(这里为了方便我直接把全部都复制过去了);

    把以上的jar包全部复制到项目的WebContent/WEB-INF/lib目录中。

    二、在/WEB-INF中添加web.xml文件,文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>SpringMVCLesson</display-name> 
            
        <servlet>
            <servlet-name>SpringMVCLesson</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springservlet-config.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup><!-- load-on-startup必须放在最后 -->
        </servlet>
        <!-- Spring MVC配置文件结束 -->
        
        <servlet-mapping>
            <servlet-name>SpringMVCLesson</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        
    </web-app>

    首先是配置DispatcherServlet,根据系列(1)的Spring MVC响应流程图,可以看出DispatcherServlet主要就是拦截请求,然后调用对应的Controller和Action,解析和渲染指定的视图并返回响应 。

    其中classpath:springservlet-config.xml指定具体的配置文件为springservlet-config.xml。

    <load-on-startup>1</load-on-startup>是启动顺序,让这个Servlet随Servletp容器一起启动,必须放在<servlet> 配置的最后。

    servlet-mapping中的<servlet-name>指定配置的是哪个servlet<url-pattern>则指定拦截哪些请求到该servlet,这里配置的是拦截全部请求

    三、springservlet-config.xml文件配置:

    在项目中新建一个resources的Source Folder文件夹,并添加springservlet-config.xml文件。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p" 
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:util="http://www.springframework.org/schema/util"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/util
      http://www.springframework.org/schema/util/spring-util.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd" >
        
        <!-- 默认的注解映射的支持 -->  
        <mvc:annotation-driven/>
          
        <!-- 如果当前请求为“/”时,则转发到“/helloworld/index” -->
        <mvc:view-controller path="/" view-name="forward:/helloworld/index"/> 
        <!-- 静态资源映射 -->
        <mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
        <mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
        <mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
        <mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" />
        <mvc:resources mapping="images/**" location="/WEB-INF/images/" />
        <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
        <mvc:default-servlet-handler/>
    
        <!-- 开启controller注解支持 -->
        <!-- use-default-filters="false" 只扫描指定的注解 -->
        <context:component-scan base-package="com.demo.web.controllers" use-default-filters="false">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
          
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
           <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
           <property name="contentType" value="text/html"/>        
           <property name="prefix" value="/WEB-INF/views/"/>
           <property name="suffix" value=".jsp"/>
        </bean>
        
    </beans>

    <mvc:annotation-driven/> 开启注解映射支持,它是为了简化配置的缩写形式,它相当于以下2个配置:

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

    由于我们在web.xml文件里面配置的是拦截所有的请求到该servlet,所以我们在这里要对静态资源文件映射作一下配置,否则请求这些资源文件会返回404

    <!-- 静态资源映射 -->
    <mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
    <mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
    <mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
    <mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" />
    <mvc:resources mapping="images/**" location="/WEB-INF/images/" />
    <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
    <mvc:default-servlet-handler/>

    开启Controller注解支持,并配置只扫描指定包下面的Controller:

    <context:component-scan base-package="com.demo.web.controllers" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    配置视图解析器,并指定视图所在的文件夹:

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
       <property name="contentType" value="text/html"/>        
       <property name="prefix" value="/WEB-INF/views/"/>
       <property name="suffix" value=".jsp"/>
    </bean>

    添加HelloWorldController,在项目中新建一个web的Source Folder文件夹,并在文件夹下面添加com.demo.web.controllers包,在包中添加一个HelloWorldController类,类中内容如下:

    package com.demo.web.controllers;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    @RequestMapping(value = "/helloworld")
    public class HelloWorldController {
    
        @RequestMapping(value="/index", method = {RequestMethod.GET})
        public ModelAndView index(){
            
            ModelAndView modelAndView = new ModelAndView();  
            modelAndView.addObject("message", "Hello World!");  
            modelAndView.setViewName("index");  
            return modelAndView;
        }
        
    }

    其中@Controller 注解把该class指定为controller,controller 上的@RequestMapping 注解的 value值指定该controller所映射的请求。

    方法上的@RequestMapping 注解指定该方法为一个action,value 值指定该action所映射的请求,method 中的RequestMethod.GET指定该action只接受get请求。

    ModelAndView 中的setViewName指定了该action所对应的视图名称,解析视图时会在springservlet-config.xml文件指定的视图文件夹中寻找对应的视图。

    添加视图,在项目/WEB-INF文件夹下新建一个views文件夹,并在views中添加index.jsp视图,视图内容如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        ${message}
    </body>
    </html>

      

    运行项目,由于我们之前配置了:<mvc:view-controller path="/" view-name="forward:/helloworld/index"/> 所以直接可以看到结果:

    1

    把请求的URL地址改为配置的地址:http://localhost:8080/SpringMVCLesson/helloworld/index,可以看到结果相同:

    2

    代码下载:http://pan.baidu.com/s/1o6LRw7o

    http://www.cnblogs.com/liukemng/p/3725582.html

  • 相关阅读:
    Java+7入门经典 -1 简介
    优化算法动画演示Alec Radford's animations for optimization algorithms
    如何写科技论文How to write a technical paper
    开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs
    用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
    用10张图来看机器学习Machine learning in 10 pictures
    ICLR 2013 International Conference on Learning Representations深度学习论文papers
    ICLR 2014 International Conference on Learning Representations深度学习论文papers
    卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
    卷积神经网络Convolutional Neural Networks
  • 原文地址:https://www.cnblogs.com/itommy/p/10610372.html
Copyright © 2011-2022 走看看