【SpringMVC】Eclipse 中搭建基础 SpringMVC 环境

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/shaotaiban1097/article/details/91049169

基础SpringMVC环境搭建

1.准备工作

  • Eclipse IDE
  • JDK 1.8
  • Tomcat 7.0

2.下载 Spring 框架

  • 下载地址: https://repo.spring.io/libs-release-local/org/springframework/spring/
    img1
    这里可以选择需要的版本。本文以当前最新版 5.1.7 为例。点击进入。
    img2
    点击 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包

4.新建动态网站

  • 打开 Eclipse 工具。file —> new —> Dynamic Web Project
    img5
  • 输入项目名称。点击 next。注意:先不要着急点 finish。
    img7
  • 新项目暂时只配置一个 src 目录足够,所以再次点击 next
    img8
  • 勾选 Generate web.xml deployment descriptor。然后点击 Finish
    img9
  • 新建完成后,基本结构如下。
    img10
  • 然后,将第 2 步中,解压后文件夹中 libs 子文件夹下的所有 jar 包 Copy 到 Spring 项目目录下的 WebContent/WEB-INF/lib 文件夹下。
  • 将第 3 步中解压后的文件夹中 commons-logging-1.2.jar 文件也 Copy 到 Spring 项目目录下的 WebContent/WEB-INF/lib 文件夹下。

img11

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 类。
    imgt
  • 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;
	}
}
  • 有些朋友可能会在这一步碰到以下问题
    img33
    HttpServletRequest 和 HttpServletResponse 无法解析。
    这两个类是位于 javax.servlet.http 包下的。
    需要 import javax.servlet.http.HttpServletRequest 和 javax.servlet.http.HttpServletResponse。
    但是为什么 Eclipse 没有提示呢?
    这是因为,我们没有将 Tomcat 添加到运行环境中。

  • 添加 Tomcat 到运行环境
    img44
    img46

  • 然后就可以正常导入 javax.servlet.http 包
    img47

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>

img55

8.启动 TomCat 服务器

  • 右击项目名称,依次选择 Run As —> Other —> Run on Server
    img66
  • 启动成功
    img67

7.访问项目页面

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 接口的方法。

  1. 使用 @Controller 注解标记这是一个 Controller,Spring 便会自动扫描这些基于注解的控制器类
  2. 使用 @RequstMapping 注解标记请求映射关系。其 value 值就是 URL 中需要调用的值,也就是基本配置中 beans 节点下 bean 节点的 name。
  3. 这里有些朋友可能会在导包时出现冲突,原因可能是在基本配置时导入了org.springframework.web.servlet.mvc.Controller,然后在修改为注解配置时没有切换这个包,导致 Eclipse 找不到 @Controller 的位置,所以建议先删除掉所有 import 的包,然后使用快捷键 Ctrl + Shift + O 一键导入。

猜你喜欢

转载自blog.csdn.net/shaotaiban1097/article/details/91049169