JAVAEE细细看 框架05 - SpringMVC入门

1. Spring与Web环境集成

1.1 环境集成

① 导入坐标

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>

② 配置监听器

<!--Spring的监听器(用来加载Spring的配置文件)-->
<listener>
	<listener-class>
       org.springframework.web.context.ContextLoaderListener
   </listener-class>
 </listener>
<!--全局参数,指定Spring配置文件所在位置-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

1.2 Web环境使用Spring

普通环境下使用(Servlet中使用)

// 1.使用spring自带的工具类, 获取Spring的核心容器
ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
// 2.通过Spring核心容器的getBean方法, 获取指定的对象
AccountService as = app.getBean(AccountService.class);

SpringMVC环境下使用

@Autowired
private AccountService accountService; // 直接依赖注入即可

2. SpringMVC的简介

2.1 SpringMVC概述

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的轻量级 Web 框架,属于SpringFrameWork 的后续产品.

SpringMVC 已经成为目前最主流的MVC框架之一,它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格的请求。

2.2 SpringMVC快速入门

需求:客户端发起请求,服务器端接收请求,执行逻辑并进行视图跳转。

2.2.1 开发步骤

①导入坐标

②配置SpringMVC核心控制器DispathcerServlet

③配置SpringMVC核心文件 springmvc.xml

④创建Controller类

⑤使用注解配置Controller类中业务方法的映射地址

⑥客户端发起请求测试

2.2.2 代码实现

① 导入坐标

<!--Spring坐标-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>
<!--SpringMVC坐标-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.5.RELEASE</version>
</dependency>
<!--Servlet坐标-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<!--Jsp坐标-->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.0</version>
    <scope>provided</scope>
</dependency>

② 在web.xml配置SpringMVC的核心控制器

<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <!--指定Springmvc的配置文件所在位置-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--让前端控制器随着项目的启动而加载-->
	<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>   
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

③ 创建spring-mvc.xml,并配置

<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context" 
    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 
    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">
    
    <!--配置注解扫描(SpringMVC只扫描自己的Controller)-->
    <context:component-scan base-package="com.ittest.controller"/>
</beans>

④ 创建Controller和业务方法

public class QuickController {
	public String quickMethod(){
		System.out.println("quickMethod running.....");
		return "index";
	}
}

⑤ 配置注解

@Controller
public class QuickController {
    
    //当前方法的访问路径是"quick"
	@RequestMapping("/quick")
	public String quickMethod(){
		System.out.println("quickMethod running.....");
        // 请求结束后, 跳转到success.jsp页面
        return "/success.jsp";
	}
}

⑥ 测试地址

http://localhost:8080/springmvcWeb/quick 

2.3 SpringMVC组件解析

前端控制器:DispatcherServlet

DispatcherServlet 是SpringMVC整个流程控制的中心,用户的所有请求,都需要先到达前端控制器

处理器映射器:HandlerMapping

HandlerMapping负责根据用户请求路径,找到该路径对应的执行流程

处理器适配器:HandlerAdapter

拿到请求路径对应的"执行流程"后,HandlerAdapter负责调用对应的方法进行执行.

处理器:Handler

负责真正的执行方法

视图解析器:View Resolver

负责处理"方法执行之后的结果",特别是跳转页面,由视图解析器负责处理要跳转的页面

视图:View

页面

2.4 RequestMapping注解解析

作用

​ RequestMapping: 用于设置方法的请求路径, 当浏览器的请求路径符合要求的时候,执行对应的方法

属性:

​ value:用于指定请求的URL。它和path属性的作用是一样的

​ method:用于指定请求的方式

位置:

@Controller
@RequestMapping("/page")		//类的访问路径
public class PageController {

    @RequestMapping("/show")	//方法的访问路径
    public String show(){
        return "/success.jsp";
    }
    //如果类上没有RequestMapping, 则该方法的请求路径是 "/show"
    //如果类上也有RequestMapping, 则该方法的请求路径是 "/page/show"

}

2.5 组件扫描

在以后的开发中, 一个程序经常会既包含Spring, 也包含SpringMVC, 那这个时候就会要求他们各自扫描各自的.

Spring

<!--扫描整个com.ittest包-->
<context:component-scan base-package="com.ittest">
    <!--排除掉Controller注解,该注解交给SpringMVC处理,Spring不处理-->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

SpringMVC

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

2.6 页面跳转(视图解析器)

在SpringMVC的Controller中, 有时候返回值会有重复性内容, 这个时候, 我们可以把返回值中重复部分提取, 那这个就是SpringMVC的前端控制器

2.6.1 案例

**配置"视图解析器"之前代码: **

@RequestMapping("/show02")
public String show02(){
    return "/jsp/aaa.jsp";
}

@RequestMapping("/show03")
public String show03(){
    return "/jsp/bbb.jsp";
}

抽取"视图解析器"

<!--配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--前缀(前边重复性内容)-->
    <property name="prefix" value="/jsp/"></property>
	<!--后缀(后边重复性内容)-->
    <property name="suffix" value=".jsp"></property>
</bean>

配置视图解析器后的Controller代码

@RequestMapping("/show02")
public String show02(){
    return "aaa";
}

@RequestMapping("/show03")
public String show03(){
    return "bbb";
}

2.6.2 注意事项

当一个项目配置了"视图解析器"之后, 所有Controller方法的返回值, 都会被"视图解析器"解析.

@RequestMapping("/show01")
public String show01(){
    return "/success.jsp";
    //如果项目配置了上边的"视图解析器",则当前方法的返回值,会被自动解析为"/jsp/success.jsp.jsp"
}

**解决方案: **

如果想让方法的返回值不被"视图解析器"解析, 则可以在返回值之前,加上"forward"或者"redirect"前缀

@RequestMapping("/show01")
public String show01(){
    return "forward:/success.jsp";   //转发到success.jsp, 并且不允许视图解析器解析
    //return "redirect:/success.jsp";   //重定向到success.jsp, 并且不允许视图解析器解析
}
发布了78 篇原创文章 · 获赞 30 · 访问量 3638

猜你喜欢

转载自blog.csdn.net/ZMW_IOS/article/details/105102745