总结45 SpringMVC框架的基本应用(替代Servlet)

流程图(面试用):
在这里插入图片描述

概念

在这里插入图片描述
在这里插入图片描述
当要实现在Spring框架下的web服务时,那么servlet将无法兼容(因为Spring无法依赖注入到Servlet).
因此将会通过SpringMVC来替代servlet,从而提供WEB服务.
也就是说,在今后的实际开发中,servlet不会被常用.

准备

配置Jar包

<!--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>

   <!-- 导入jackson坐标 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>

应用

步骤一:创建并配置application文件

建立一个xml文件,通俗名称为’applicationContext.xml’
如果你是普通模式,那么在src目录下建立;
如果你是Maven模式,那么在resources目录下建立
在这里插入图片描述
创建好后,进行配置.
格式:

 <!--Spring的监听器
        是Sprign的三大组件之一,用于Web开发
    -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
<!--指定包路径-->
<context:component-scan base-package="包路径">

    <!-- 排除'Controller'注解,因为这个注解是用于springMvc的,而不是用于Spring的.否则会冲突 -->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>

</context:component-scan>


列如:

 <!--Spring的监听器
        是Sprign的三大组件之一,用于Web开发
    -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
<context:component-scan base-package="cn.apply">

    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>

</context:component-scan>

在这里插入图片描述

步骤二.配置springmvc文件

建立一个xml文件,通俗名称为’springmvc.xml’
如果你是普通模式,那么在src目录下建立;
如果你是Maven模式,那么在resources目录下建立
格式:

<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的注解扫描范围 因为SpringMVC只扫描自己的Controller,不然会报错-->
    <context:component-scan base-package="要被应用到SpringMVC的包路径"/>

</beans>

在这里插入图片描述

步骤三.通过web.xml配置核心控制器

在web.xml文件中配置SpringMVC的核心控制器
格式:

	
  <servlet>
        <servlet-name>自定义SpringMVC控制器名称</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!-- 指定SpringMvc配置文件的文件名(resources路径下) -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:SpringMVC的配置文件名</param-value>
        </init-param>
        <!--让前端控制器随着项目的启动而加载-->
        <load-on-startup>2</load-on-startup>
    </servlet>


    <servlet-mapping>
        <servlet-name>自定义SpringMVC控制器名称</servlet-name>
            <!-- 指定控制器要过滤的路径 单单一个斜杠'/'表示拦截除jsp以外的访问     如果是斜杠和星号'/*'则表示拦截所有访问 -->
        <url-pattern>自定义控制器要过滤的路径</url-pattern>
    </servlet-mapping>

列如:

  <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!-- 指定SpringMvc配置文件的文件名(resources路径下) -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--让前端控制器随着项目的启动而加载-->
        <load-on-startup>2</load-on-startup>
    </servlet>

    <!-- 指定控制器要过滤的路径 单单一个斜杠'/'表示拦截除jsp以外的访问     如果是斜杠和星号'/*'则表示拦截所有访问 -->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

在这里插入图片描述

步骤四.将普通类声明为WEB类

将一个类声明为WEB类,这样就可以让SpringMVC将其当作WEB类应用
声明位置必须在类的文件头
格式:@Controller
在这里插入图片描述

步骤五.声明虚拟路径

在这里插入图片描述
在这里插入图片描述
应用方式一:声明在类文件头
格式:@equestMapping("/自定义虚拟路径")
,代表它是一个父级路径

应用方式二:声明在方法上面
表示该方法对应着一个虚拟路径,访问该虚拟路径,将会触发该方法
格式

	@RequestMapping("/自定义虚拟路径名")
    public String 自动方法名(){
        
        return "/自定义被转发或重定向的链接路径";

    }

列如:

   @RequestMapping("/wangzhanone")
    public String webone(){
        System.out.println("执行one~~~~");
        return "/url.jsp";

    }

扩展(了解)

SpringMVC组件解析

前端控制器:DispatcherServlet

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

处理器映射器:HandlerMapping

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

处理器适配器:HandlerAdapter

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

处理器:Handler

负责真正的执行方法

视图解析器:View Resolver

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

视图:View

页面

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"

}

页面跳转(视图解析器)

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

案例

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

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

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

抽取"视图解析器"
在Springmvc.xml中配置

<!--配置内部资源视图解析器-->
<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";
}

注意事项

当一个项目配置了"视图解析器"之后, 所有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, 并且不允许视图解析器解析
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值