文章目录
基础SpringMVC环境搭建
1.准备工作
- Eclipse IDE
- JDK 1.8
- Tomcat 7.0
2.下载 Spring 框架
- 下载地址: https://repo.spring.io/libs-release-local/org/springframework/spring/
这里可以选择需要的版本。本文以当前最新版 5.1.7 为例。点击进入。
点击 spring-framework-5.1.7.RELEASE-dist.zip 下载 dist 文件包。
下载完成后,解压,该文件夹下包含:- libs:Spring框架的class文件的jar包、Spring框架源文件包、Spring框架API文档包
- schemas:Spring框架配置文件的XML Schemas 文档包
- readme:Spring框架说明文档等。
3.下载Common-Logging包
- 下载地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi
同样以当前最新版为例。点击下载 commons-logging-1.2-bin.zip 并解压。
4.新建动态网站
- 打开 Eclipse 工具。file —> new —> Dynamic Web Project
- 输入项目名称。点击 next。注意:先不要着急点 finish。
- 新项目暂时只配置一个 src 目录足够,所以再次点击 next
- 勾选 Generate web.xml deployment descriptor。然后点击 Finish
- 新建完成后,基本结构如下。
- 然后,将第 2 步中,解压后文件夹中 libs 子文件夹下的所有 jar 包 Copy 到 Spring 项目目录下的 WebContent/WEB-INF/lib 文件夹下。
- 将第 3 步中解压后的文件夹中 commons-logging-1.2.jar 文件也 Copy 到 Spring 项目目录下的 WebContent/WEB-INF/lib 文件夹下。
5.Spring MVC 的配置
这里先演示Spring MVC 的基本配置。
如果想直接使用基于注解的配置。点击跳转到 附:基于注解的配置
- 修改 WebContent/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_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>HRManage</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 以上代码为默认生成。以下代码需要手动配置 -->
<!-- 定义SpringMVC的前端控制器 -->
<servlet>
<!-- Servlet 的名称 -->
<servlet-name>springmvc</servlet-name>
<!-- Servlet 所对应的 Java 类 -->
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- Servlet 的参数信息 -->
<init-param>
<!-- 参数名称 -->
<param-name>contextConfigLocation</param-name>
<!-- 参数值:SpringMVC 的配置文件路径 -->
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<!-- 加载配置:1 意为在 Web 启动时立即加载 Servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Servlet 映射配置 -->
<servlet-mapping>
<!-- 请求对应的 Servlet 名称 -->
<servlet-name>springmvc</servlet-name>
<!-- 监听当前域的所有请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
以上是 DispatcherServlet 的标准配置。Servlet 在 Web 启动时立即加载。 DispatcherServlet 加载时会默认去 WEB-INF 目录下查找对应的名称为 " servlet 名称 - servlet.xml " 的配置文件。SpringMVC 的配置文件 springmvc-config.xml 可以在任意指定目录去建立。只需要在上述配置文件的 param-value 中配置即可,但建议放在 WEB-INF 的根目录下。
如果遇到 WEB-INF 目录下没有 web.xml 文件的情况。你可能需要回忆一下第 4 步中最后一个步骤是否勾选了 Generate web.xml deployment descriptor 选项。如果忘记勾选,也可以手动建立 web.xml 文档。
- 配置 spring-mvc-config.xml 。如果没有该文件,可以再 WEB-INF 文件夹上右键,新建 xml 文档,命名为 spring-mvc-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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置 Handle 映射。 这里的name名称为访问网站时 URL 中所指定的名称, class的值 为控制器所在的完整路径 -->
<bean name="/hello" class="com.foxconn.controller.HelloSpringController" />
<!-- 处理器映射器将 bean 的 name 作为 url 进行查找,需要在配置 Handle 时指定 name 即 url -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- SimpleControllerHandlerAdapter 是一个处理器适配器,所有处理器适配器都要实现 HandlerAdpter 接口 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
</beans>
6.控制器代码实现
以上,SpringMVC 的环境搭建已经完成。接下来,试着写一个 Demo 测试一下。
- 在 Java Resource 的 src 目录下,先创建包和 一个 HelloSpringController 类。
- HelloSpringController 类需要实现 Controller 接口并实现其方法
package com.foxconn.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloSpringController implements Controller{
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{
//创建准备返回的 ModelAndView 对象
ModelAndView mv = new ModelAndView();
//添加数据模型,可以是任意POJO
mv.addObject("message", "Hello SpringMVC");
//设置视图名。视图解析器会根据该完全路径解析具体视图
mv.setViewName("/WEB-INF/test/demo.jsp");
//返回 ModelAndView 对象
return mv;
}
}
-
有些朋友可能会在这一步碰到以下问题
HttpServletRequest 和 HttpServletResponse 无法解析。
这两个类是位于 javax.servlet.http 包下的。
需要 import javax.servlet.http.HttpServletRequest 和 javax.servlet.http.HttpServletResponse。
但是为什么 Eclipse 没有提示呢?
这是因为,我们没有将 Tomcat 添加到运行环境中。 -
添加 Tomcat 到运行环境
-
然后就可以正常导入 javax.servlet.http 包
7.JSP 代码实现
- 在 WEB-INF/test 目录下新建 demo.jsp 文件
这个路径是第 6 步写在 HelloSpringController 文件中 mv 对象的 setViewName 方法指定的。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello SpringMVC</title>
</head>
<body>
<h1>Hello SpringMVC</h1>
<!-- JSP 页面的 EL 表达式 -->
<h2>${requestScope.message }</h2>
</body>
</html>
8.启动 TomCat 服务器
- 右击项目名称,依次选择 Run As —> Other —> Run on Server
- 启动成功
7.访问项目页面
- 在浏览器中输入 http://localhost:8080/hello
8.如果遇到 404 错误
404 是网站开发中最常见的错误之一:即找不到资源,如果遇到该错误,请依次检查以下几点:
- web.xml 配置文件。web.xml 如果是自动生成,一般会有 welcome-file-list 标签,其中包含的是网站默认查找的网页名,即如果URL中只输入了项目名,如:http://localhost:8080/HelloSpring 时,会默认查找名称在该标签下的文件。另外,需要检查 serservlet 标签下 init-param 标签中 param-value 的值,路径是否与 springmvc-config.xml 配置文件匹配,即该配置文件是否起作用。
- springmvc-config.xml 配置文件。handle 映射配置是否正确,其中 name 值为 url 中需要输入的映射请求,class 的值为 Controller 所在的完整路径。如上例中 name 的值为 /hello,class 的值为 com.foxconn.controller.HelloSpringController。就意为着当 URL 为 http://localhost:8080/HelloSpring/hello 时,会映射到 com.foxconn.controller.HelloSpringController 控制器下。
- HelloSpringController。检查 HelloSpringController 中 handleRequest 方法是否设置解析视图。即 ModelAndView 对象的 setViewName 是否设置。
- 页面。检查上一步中 ModelAndView 对象的 setViewName 的值与实际想要展示的页面所在的完整路径是否相同。如上例中 setViewName 的值为 /WEB-INF/test/demo.jsp。那么在项目的 WEB-INF 目录下,就需要存在 test 文件夹以及其里面的 demo.jsp 文件。
附:基于注解的配置
注解 是SpringMVC的一大特色。使用注解可以省去很多繁琐的配置。
- 返回第 5 步。修改 spring-mvc-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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- Spring 自动扫描 base-package 所配置的包及其子包下的 Java 文件 -->
<context:component-scan base-package="com.foxconn.controller" />
<!-- 配置 annotation 类型的处理器映射器和处理适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
使用注解,便不需要再在配置文件中使用 XML 描述 Bean。Spring 的扫描机制会自动查找指定路径(base-package)下所有基于注解的类型;
同时,配置处理映射器可以让其根据RequestMapping请求自动查找映射关系,省去了原本在 XML 配置文件中配置映射关系的繁琐步骤;
配置处理适配器来完成 Controller 对 RequestMapping 注解标注的方法的调用;
配置视图解析器来解析视图,完成 View 的呈现。
- 注解配置完成后。修改 Controller 中的代码来使用一次
package com.foxconn.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloSpringController{
@RequestMapping(value="/hello")
public ModelAndView helloWorld() {
ModelAndView mv = new ModelAndView();
mv.addObject("message", "Hello SpringMVC");
mv.setViewName("/WEB-INF/test/demo.jsp");
return mv;
}
}
使用注解之后,便不需要再实现 Controller 接口,所以也就不需要 Override 接口的方法。
- 使用 @Controller 注解标记这是一个 Controller,Spring 便会自动扫描这些基于注解的控制器类
- 使用 @RequstMapping 注解标记请求映射关系。其 value 值就是 URL 中需要调用的值,也就是基本配置中 beans 节点下 bean 节点的 name。
- 这里有些朋友可能会在导包时出现冲突,原因可能是在基本配置时导入了org.springframework.web.servlet.mvc.Controller,然后在修改为注解配置时没有切换这个包,导致 Eclipse 找不到 @Controller 的位置,所以建议先删除掉所有 import 的包,然后使用快捷键 Ctrl + Shift + O 一键导入。
- 启动 Tomcat ,访问 http://localhost:8080/HelloSpring/hello