SpringMVC自学系列(2)——Hello World

来源:互联网 发布:珠海java培训机构 编辑:程序博客网 时间:2024/06/06 17:56

学了SpringMVC的原理就要在项目中应用起来了,先从一个最简单的Hello World做起~

1. 开发环境

操作系统:Windows 7;开发工具:Eclipse For JavaEE;数据库:MySql 5.6.26;运行环境:tomcat 1.7;JDK:1.7;

因为创建的是maven项目(之前有介绍使用Maven创建Web项目),所以不会有手动引用jar包的部分(将依赖的jar包放在lib目录下),会配置在pom.xml中。

2. 配置项目

先放一张项目结构图

项目结构图

2.1 配置pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>comm.demo</groupId>  <artifactId>springmvc</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>war</packaging>  <name>springmvc</name>  <description>springmvc</description>  <repositories>    <repository>        <!-- Maven 自带的中央仓库使用的Id为central 如果其他的仓库声明也是用该Id就会覆盖中央仓库的配置  -->        <id>mvnrepository</id>        <name>mvnrepository</name>        <url>http://www.mvnrepository.com/</url>        <layout>default</layout>        <!-- release正式仓库是用来保存稳定的发行版本,snapshot快照仓库则是用于保存开发过程中的不稳定版本 -->        <releases>            <enabled>true</enabled>        </releases>        <snapshots>            <enabled>false</enabled>        </snapshots>     </repository>   </repositories>    <!-- 版本号 -->    <properties>        <spring.version>4.1.5.RELEASE</spring.version>    </properties>    <!-- 依赖包 -->    <dependencies>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>jstl</groupId>            <artifactId>jstl</artifactId>            <version>1.2</version>        </dependency>    </dependencies></project>

代码解释:

<releases><enabled>true</enabled></releases> maven中的仓库分为两种,snapshot快照仓库和release发布仓库。

如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。

如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上。

<version>${spring.version}</version> 这里的版本号要跟properties里的版本号相对应,也可以直接写上。

2.2 在src/webapp/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>springmvc</display-name>     <servlet>        <servlet-name>springmvc</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>         <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:mvcservlet-config.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup><!-- load-on-startup必须放在最后 -->    </servlet>    <!-- Spring MVC配置文件结束 -->    <servlet-mapping>        <servlet-name>springmvc</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping></web-app>

代码解释:

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

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

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

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

2.3 在src/main/resources/下添加mvcservlet-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.controller" 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注解支持,配置只扫描指定包的路径。

<context:component-scan base-package="com.demo.web.controller" use-default-filters="false">

配置视图解析器,并指定 jsp 页面所在的文件夹 /WEB-INF/views/

<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>

2.4 在src/main/java/下添加com.demo.web.controller包,在包中添加HelloWorldController类

package comm.demo.web.controllerr;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", "Hey! 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文件指定的视图文件夹中寻找对应的视图。

2.5 在/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=ISO-8859-1"><title>NO1</title></head><body>    ${message}</body></html>

2.6 发送请求

运行项目,由于我们之前配置了<mvc:view-controller path="/" view-name="forward:/helloWorld/index"/>

所以请求的URL地址:http://localhost:8080/springmvc 或 http://localhost:8080/springmvc/helloWorld/index,可以看到相同的结果。

Hello World

原创粉丝点击