SSM学习之1:SpringMVC介绍及入门程序的架构执行原理流程

1、Web层:

有jsp+servlet、struts2、springMVC
其中struts2有一个前端控制器,所有的请求都经过前端控制器,发给对印的action
springMVC:可替换struts2,
web层框架都有一个前端控制器,都做web层处理的

  • Spring MVC属于SpringFrameWork的后续产品 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块
  • 使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,
  • 可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架 Spring web mvc和Struts2都属于表现层的框架

2、SpringMVC处理流程

SpringMVC处理流程

3、SpringMVC入门:

1. 导入springMVC相关jar包,在spring的基础上添加一个mvc的包
2. 在src/下添加springmvc.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx.xsd">

</beans>

3.配置前端控制器

 <!-- 配置SpringMVC前端控制器 -->
    <servlet>
        <servlet-name>mySpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定SpringMVC配置文件 -->
        <!-- SpringMVC的配置文件的默认路径是/WEB-INF/${servlet-name}-servlet.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>mySpringMVC</servlet-name>
        <!-- 设置所有以action结尾的请求进入SpringMVC -->
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

配置web.xml文件:里面有一个可设置所有以action结尾的请求进入springMVC 还有只有设置了value值他就会进入springmvc.xml,不然会自己在web目录里面找(就找不到)

4.创建控制器
将一个类注解@Controller即为控制器,当然需要在配置文件中开启注解扫描
<context:component-scan base-package=“com.nan”/>

package com.nan.springmvc;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class MyController {
    //访问first action时就会执行show方法  设置数据后跳转到另外一个jsp中
    @RequestMapping("/first.action")
    public ModelAndView show(){
        ModelAndView modelAndView = new ModelAndView();
        //请求过来后,要跳转到别个界面  往别的界面当中传一些数据都可以用modelAndView
        modelAndView.addObject("name","nan");
        modelAndView.setViewName("/result.jsp");//还可在这里面取出数据
        return modelAndView;
    }
}

在一个jsp中写一个a标签,使其跳转到控制器中的first action

<a href="${pageContext.request.contextPath}/first.action">发送请求</a>

然后在result. jsp把设置的属值性写出来,这样就可以将数据取出来

<h1>转发过来的数据=${name}</h1>

4、架构执行原理流程

执行流程图

组件说明

DispatcherServlet

  • 前端控制器 用户请求到达前端控制器,它就相当于mvc模式中的C -
  • dispatcherServlet是整个流程控制的中心
    由它调用其它组件处理用户的请求 dispatcherServlet的存在降低了组件之间的耦合 性

HandlerMapping

  • 处理器映射器

  • HandlerMapping负责根据用户请求url找到Handler处理器

  • springmvc提供了不同的映射器实现不同的映射方式
    HandlerMapping会把找到映射返回给前端控制器

Handler

  • 后端控制器
  • 在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
    HandlAdapter
  • 通过HandlerAdapter对处理器进行执行
  • 处理器适配器

ViewResolver

  • 视图解析器
  • View Resolver负责将处理结果生成View视图

View

  • springmvc框架提供了很多的View视图类型的支持,
    包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。

内部组件在DispatcherServlet.properties里,有HandlerMapping、HandlerAdapter、ViewResolver

视图解析器前后缀配置

假如要跳转的某一个jsp是在自定义的web目录下面,那么我们可以配置视图解析器的前后缀,首先在springmvc中添加一个bean,然后添加有关于前后缀的属性

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

然后在控制器中添加要跳转的页面的名字,也不用加处于哪个目录,也不用加后缀

modelAndView.setViewName("nan");

5、请求与转发

先把前面关于前后缀的配置取消掉
一个小问题:当第一次加载时跳转时间很长,因为第一次在配置springmvc前端控制器:

<!--在服务器一启动时就加载-->
 <load-on-startup>1</load-on-startup>

转发有两种形式

  • 返回类型为ModelAndView,需要用到数据的转发
  • 当不需要用到数据时,可设置返回类型为String
@RequestMapping("/second.action")
    //用String作为参数是因为此转发不用到数据
    public String show2(){

        return "/result.jsp";
    }

重定向:重新发送一次请求,浏览器做了至少两次的访问请求的,在需要重定向的方法中增加redirect:

modelAndView.setViewName("redirect:/second.action");

关于重定向与转发的区别
转发:浏览器发送http请求,web服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向:客户浏览器发送http请求,web服务器接受后发送302状态码响应及对应新的location给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址,服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值