Spring MVC入门

一、Spring MVC工作原理

Spring MVC框架主要有DispatcherServlet、处理器映射、控制器、视图解析器、视图组成。其工作的流程:
(1)客户端发起的http请求提交到DispatcherServlet;
(2)由DispatcherServlet控制器寻找一个或多个HandlerMapping,找到处理请求的Controller;
(3)DispatcherServlet将请求提交给Controller处理;
(4)Controller调用业务逻辑处理后返回ModelAndView;
(5)DispatcherServlet 寻找一个或多个ViewResolver视图解析器,找到ModelAndView指定的视图;
(6)视图负责将结果显示到客户端。

二、Spring MVC接口

Spring MVC主要的4个接口,即DispatcherServletHandlerMappingController以及ViewResolver
(1)Spring MVC的所有请求都经过DispatcherServlet来统一分发到Controller中处理。在DispatcherServlet分发请求之前,需要通过SpringMVC提供的HandlerMapping找到指定的Controller。
(2)HandlerMapping接口负责客户端请求到Controller的映射。
(3)Controller 接口负责处理客户端请求。相当于java Servlet的作用。处理完请求后,将返回ModelAndView(包含模型Model和视图View)对象给DispatcherServlet前端控制器。
(4)ViewResolver接口(视图解析器)负责在web应用中查找View对象,将处理结果渲染给客户端。

三、第一个Spring MVC应用

创建Web项目 :除了添加Spring容器的基础JAR包和Spring依赖的commons-logging的JAR包以外,还需要添加两个与SpringMVC相关的JAR包:Spring-web.jarSpring-webmvc.jar
在这里插入图片描述
在web.xml文件中部署DispatcherServlet

<servlet>
   <!--部署DispatchServlet-->
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--表示容器在启动时立即加载Servlet-->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
     <!--处理所有url-->
    <url-pattern>/</url-pattern>
</servlet-mapping>

DispatcherServlet中的servlet对象在SpringMVC初始化时将到WEB-INF目录下寻找一个与该servlet相关的配置文件,该配置文件的命名规则:servletName-servlet.xml 。例如本例子中,由<servlet-name>dispatcher</servlet-name>可以看出的servletName为dispatcher,最后会寻找一个dispatcher-servlet.xml配置文件。

创建web应用首页 index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  未注册的用户,请<a href="${pageContext.request.contextPath}/register">注册</a><br>
  已注册的用户,请<a href="${pageContext.request.contextPath}/login">登录</a></body>
</html>

创建Controller类 :
创建RegisterController和LoginController两个传统(非注解方式)的控制器(需要实现Controller接口),分别处理首页的“注册”和“登录”的超链接请求。

package controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        return new ModelAndView("login.jsp");
    }
}
package controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RegisterController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        return new ModelAndView("register.jsp");
    }
}

创建SpringMVC配置文件并配置Controller映射信息:
在WEB-INF目录下创建名为dispatcher-servlet.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--LoginController控制器类,映射到"/login"-->
    <bean name="/login" class="controller.LoginController"/>
    <!--RegisterController控制器类,映射到"/register"-->
    <bean name="/register" class="controller.RegisterController"/>
</beans>

应用的其他页面,如login.jsp 和 register.jsp
register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Register</title>
</head>
<body>
    注册操作...
</body>
</html>

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
</head>
<body>
    登录操作...
</body>
</html>

运行测试:
在这里插入图片描述
点击注册,根据dispatcher-servlet.xml文件中的映射将请求转发给了RegisterController处理,并跳转到register.jsp。同理,点击登录也一样的。
在这里插入图片描述在这里插入图片描述
通过观察地址栏可以发现,SpringMVC的Controller的return new ModelAndView("login.jsp");默认是通过转发实现的,所以也就不会看到地址栏发生改变。如果要采用重定向的方式,则需要修改为:

//采用重定向方式跳转
return new ModelAndView("redirect:register.jsp");

修改后运行,可以发现地址栏发生了改变。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值