SpringMVC框架|搭建SpringMVC环境


SpringMVC使用web工程,推荐使用2.5版本,往后的版本需要在创建时手动勾选Generate web.xml,才能生成xml版本。

第一步:导包

  • 首先一定要导核心依赖(IoC模块),因为所有模块的运行都依赖核心模块。
  • SpringMVC是Spring的web模块,需要导入web模块

在这里插入图片描述

第二步:编写配置

1.web.xml文件

  • 配置前端控制器
    <load-on-startup>标签:服务器启动的时候创建对象,值越小优先级越高,越先创建对象。
    <url-pattern>标签/*/都是拦截所有请求,但/*的范围更大,还能拦截jsp请求,一旦拦截jsp页面就不能显示了。所以前端控制器中使用/
    当然,也可以使用后缀匹配拦截。
<?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">
	<display-name>1.SpringMVC_helloworld</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>


	<!-- 前端控制器 -->
	<!-- The front controller of this Spring Web application, responsible for 
		handling all application requests -->
	<servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<!-- servlet启动加载,load-on-startup:服务器启动的时候创建对象,值越小优先级越高,越先创建对象。 -->
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

2.springmvc.xml

  • 配置视图解析器(InternalResourceViewResolver)
    视图解析器通过prefix和suffix可以实现拼接页面地址。
<?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"
	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.2.xsd">

	<context:component-scan base-package="com.gql"></context:component-scan>

	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/pages/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	
</beans>

第三步:处理器

处理器接收到请求后,在控制台打印"收到请求,处理中…"然后转发到/WEB-INF/pages/success.jsp页面。

  • @RequestMapping:
    告诉SpringMVC这个方法用来处理什么请求。括号中的/可以省略,但建议写上(迎合Rest风格)。
@Controller
public class MyFirstController {

	/**
	 * 处理当前项目下的hello请求
	 */
	@RequestMapping("/hello")
	public String myfirstRequest() {
		System.out.println("收到请求,处理中...");
		return "success";
	}
}

第四步:前端页面

跳转后的success.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<h1>成功!</h1>
	</body>
</html>

分析helloworld运行流程☆

运行结果
在这里插入图片描述
运行流程☆:

客户端点击链接,发送请求到tomcat服务器。http://localhost:8080/1.SpringMVC_helloworld/hello
前端控制器(dispatcherServlet)接收到所有请求
dispatcherServlet将请求和@RequestMapping()标注的值进行匹配,找到目标处理器,进而找到目标方法
dispatcherServlet找到了目标处理器和目标方法,直接利用反射执行目标方法
方法执行后会有一个返回值,SpringMVC认为该返回值就是要转发的地址
拿到返回值后,使用视图解析器(InternalResourceViewResolver)进行拼串得到完整的页面地址。
拿到页面地址后,前端控制器帮我们转发到页面。

关于SpringMVC的其他细节问题

1.不指定配置文件位置

		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>

上面的前端控制器使用了<init-param>标签 指定的路径(classpath:springmvc.xml)加载springmvc.xml文件。
如果不指定的话,SpringMVC会去WEB-INF目录下找一个名为"前端控制器名称-servlet.xml"的文件。这时可以在WEB-INF下创建一个"前端控制器名称-servlet.xml"文件,进行相应配置也是可以的。

2.SpringMVC无法访问静态资源问题

(1)DefaultServlet
DefaultServlet是Tomcat中处理静态资源的。

    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

当我们在前端控制器的<url-pattern>标签中也用/,就类似子类重写了父类的方法。相当于前端控制器的/禁用了tomcat服务器中的DefaultServlet。

静态资源(dispatcherServlet)看哪个方法 @RequestMapping()标注的值是xxx.html,由于无法匹配,所以不能处理。

(1)JSPServlet

为什么能够访问jsp页面呢?

    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

因为并没有覆盖服务器中JSPServlet的配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hudie.

不要打赏!不要打赏!不要打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值