做了很久的java项目,写了不少的业务逻辑,但是java框架的基础及深入学习才是重中之重,所以重新复习下SpringMvc。废话不多说,各个社区里有很多SpringMvc的教程,写的都很好,按照其中的步骤学习,收货颇丰。学习实践的过程较为简单,毕竟学习后能分享出来的东西才是真正被消化吸收的知识。言归正传,对于SpringMvc的介绍就不多说了,网上很多,还是从第一个程序开始说起。
工具:
Eclipse:3.6.2H
Tomcat:6.0
jdk:1.7
SpringMvc:4.0.4 Release
我们工程的总体结构如下图,下面就开始一步一步实践:
1.新建项目:
New > Other > Web > Dynamic Web Project
填写项目名称"SpringMvcTest"后,Next到完成即可。
2.导入SpringMvc所需要的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
拷贝以上jar包到 WEB-INF/lib 文件夹内。
3.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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!-- 配置DispatchcerServlet -->
<servlet>
<!-- 配置DispatcherServlet -->
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置Spring mvc下的配置文件的位置和名称,说明会新建一个springmvc.xml的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- <load-on-startup>1</load-on-startup> -->
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 增加对静态资源的支持 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
注:1. 也可以不新建springmvc.xml, 那么默认的配置文件格式为/WEB-INF/[servlet-name]-servlet.xml,对应这里的就是springDispatcherServlet-servlet.xml
2. servlet-mapping表示拦截的模式,“/”,表示对于所有的请求的拦截,包括静态资源如html, js, jpg等。如果不添加下面对静态资源的配置,那么对于静态资源的访问就会报404的错误。
3. 静态资源单独写了servlet-mapping的配置。
4.在src目录下增加配置文件springmvc.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:context="http://www.springframework.org/schema/context" 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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.springmvc"></context:component-scan>
<!-- don't handle the static resource -->
<mvc:default-servlet-handler />
<!-- if you use annotation you must configure following setting -->
<mvc:annotation-driven />
<!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value="/jsp/"></property>
<property name = "suffix" value = ".jsp"></property>
</bean>
</beans>
注:1.自动扫描的包表示spring监听的范围,这里是在com.springmvc下。
2.视图解析器,用于把在控制器中的结构解析为实际的物理视图。
3.mvc:default-servlet-handler 会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中, 把对静态资源的访问由HandlerMapping转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回。
4.mvc:annotation-driven 相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter, 即解决了@Controller注解的使用前配置。
5.增加控制器代码
在src/com/springmvc 目录下增加控制器HelloWorld.java, 代码如下:
package com.springmvc;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorld {
/**
* 1. 使用RequestMapping注解来映射请求的URL
* 2. 返回值会通过视图解析器解析为实际的物理视图, 对于InternalResourceViewResolver视图解析器,会做如下解析
* 通过prefix+returnVal+suffix 这样的方式得到实际的物理视图,然后会转发操作
* "/WEB-INF/views/success.jsp"
* @return
*/
@RequestMapping("/helloworld")
public String hello(){
System.out.println("hello world");
return "success";
}
}
注:1.@Controller是注解,表示是一个控制器,其中有方法hello。
2.@RequestMapping("") 用于匹配请求的路径
3.return 返回的“success”,是视图的名称。springmvc.xml中配置的视图解析器即是将return解析到success.jsp上作为响应输出。那么按照如上的配置,我们后面需要在WebContent目录下新建文件夹jsp,其中需要包含success.jsp文件。
6.给HelloWorld增加入口
在WebContent/jsp/目录下新增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>Hello World</title>
</head>
<body>
<a href="helloworld">Hello World</a>
</body>
</html>
注:当项目启动后,输入http://localhost:8080/SpringMvcTest/ 即可看到index.jsp当中的内容。
7.增加视图页面 success.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>Hello World Success</title>
</head>
<body>
<h1>Hello World Success</h1>
</body>
</html>
OK, HelloWorld我们基本上已经实现了,下面就来说说发布。
8.启动项目
这里我的eclipse当中集成了tomcat的插件,我们直接通过配置小猫来启动:
工程SpringMvcTest上右键 > Properties > Tomcat 选项卡。
a. 勾选 "Is a Tomcat Project"
b. "Context name" 填写 "/SpringMvcTest"
c. "Web application root" 填写 "WebContent"
d. "DevLoader Classpath" 选项卡中,勾选 "Activate DevLoader", 并且选中"/SpringMvcTest/build/classes"后, 点击Apply, OK。
e. 点击eclipse中的 "Start Tomcat" 按钮,启动Tomcat。
当启动完成以后,我们访问 http://localhost:8080/SpringMvcTest/ 可以看到 hello world的链接,点击进入后显示Success视图。
至此,我们的Hello World就已经完成了。