SpringMVC介绍以及工作原理

 在聊SpringMVC之前,我们先来说一下Servlet。早先的Web应用通过Servlet拦截客户端向服务端发送请求并处理,但是这种模式存在很多的缺点:

    1、每编写一个Servlet都需要编写8行配置文件;

    2、每个Servlet的入口方法只有一个,只能处理一个业务.如果处理多个业务必须编写多个Servlet;

    3、servlet获取参数时,必须一个一个的获取.并且参数类型必须手动转化。

    SpringMVC通过配置文件直接拦截所有带有特定后缀的请求,使开发更加简单方便,因此SpringMVC逐渐登上Web开发的舞台,至今仍被广泛应用。

SpringMVC组件介绍:

    1、前端控制器(DispatcherServlet):它的主要功能是转发请求和响应;

    2、处理器映射器:根据用户提交的url,找到能够对应的Controller进行处理;

    3、处理器适配器:根据特定的规则执行用户的请求;

    4、视图解析器:将用户返回的页面名称,自动拼接为具体页面路径。

SpringMVC调用过程:

步骤:

1.客户端发送请求:localhost:8080/项目名/hello.action,发送给前端控制器;

2.前端控制请求处理器映射器,查询能够处理该请求的Controller;

3.将找到的Controller路径返回给前端控制器;

4.请求处理器适配器找到合适的处理器.处理请求;

5.处理器适配器找到合适的处理器.执行请求代码.(controller-service-dao);

6.将处理后的结果和响应页面封装到ModelAndView对象中,返回给处理器适配器;

7.将ModelAndView对象返回给前端控制器;

8.请求视图解析器帮助解析View对象,到底是哪个页面;

9.视图解析器内部拼接.将页面名称拼接成真实的页面路径,返回给前端控制器;

10.将数据填充到页面中,该过程叫做视图渲染,之后返回给用户进行呈现。

配置实例:

1、在web容器中(web.xml)配置前端控制器:

<!-- springmvc配置 -->
   <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath*:spring/spring-*.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/Websocket/*</url-pattern>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>


2、配置springmvc

<!-- 注解扫描包 -->
  <context:component-scan base-package="my018">
    <context:include-filter type="annotation"
      expression="org.springframework.stereotype.Controller" />
    <context:exclude-filter type="annotation"
      expression="org.springframework.stereotype.Service" />
  </context:component-scan>
<!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射 -->
  <mvc:annotation-driven>
<!-- 视图模型的解析,在视图模型前后端添加后缀,返回的页面类型属于怎样的 -->
  <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/"></property>
    <property name="suffix" value=".html"></property>
  </bean>


3、编写Controller并加上@Controller注解

@Controller
@RequestMapping("User")
public class UserController {
    @Autowired
    private UserService userService;
    
    //登录
    @RequestMapping("login")
    @ResponseBody
    public RResult login(String uname,String upwd){
        System.out.println(uname+"___"+upwd);
        RResult result;
        try{
            System.out.println(uname+":"+upwd);
            userService.login(uname,upwd);
            result = new RResult("ok");
            System.out.println(result);
            return result;
        }catch(PPException e){
            result = new RResult("ng");
            return result;
        }
    }


这样,当你发送登录请求*/User/login.do时就会直接被SpringMVC拦截并处理。如有用词或者逻辑上的误区,还望指正。
————————————————
版权声明:本文为CSDN博主「Maven_lc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Maven_lc/article/details/80274971

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值