天天看点

Spring MVC 入门总结

spring mvc 是什么

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的

spring mvc 流程图

Spring MVC 入门总结

个人理解的流程(如有不对请指正)

首先在web.xml中配置DispatcherServlet,拦截客户端的http请求,在根据自己的spring mvc配置文件 找到相应的controller,对请求进行相应的处理后,返回ModelAndView类对象,DispatcherServlet生成相应的model模型,把model传入相应的view视图,实现显示。

核心类与接口

DispatcherServlet – 前置控制器

HandlerMapping接口 – 处理请求的映射

HandlerMapping接口的实现类

SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller

DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上

HandlerAdapter接口 – 处理请求的映射

AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上

Controller接口 – 控制器

HandlerInterceptor 接口–拦截器

ViewResolver接口的实现类

UrlBasedViewResolver类 通过配置文件,把一个视图名交给到一个View来处理

InternalResourceViewResolver类,比上面的类,加入了JSTL的支持

View接口

JstlView类

LocalResolver接口

HandlerExceptionResolver接口 –异常处理

SimpleMappingExceptionResolver实现类

ModelAndView类

常见的注解

@Controller  负责注册一个bean 到spring 上下文中

@RequestMapping 控制器指定可以处理哪些 URL 请求

@RequestBody 用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上

@ResponseBody 用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区

@ModelAttribute    

  在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法

  在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中

@RequestParam 在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法

@ExceptionHandler 注解到方法上,出现异常时会执行该方法

@ControllerAdvice 使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常

spring mvc用户登录入门案例

业务逻辑:等index.jsp中填写用户信息,然提交到后台的/hello控制器中进行校验,检验通过后跳转到successs.jsp,检验失败跳转到error.jsp中

第一步导入要使用的jar包

Spring MVC 入门总结

第二步在WEB-INF下建立文件夹jsp,再jsp文件夹中新建successs.jsp和error.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>hello spring mvc</p>
    ${map.name}
</body>
</html>
           
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    ${message1 }
</body>
</html>
           

第三步配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>springMvc</display-name>
  <!-- 配置springmvc的文件 -->
   <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!--加载src目录下的springmvc的配置文件 srpingmvc-servlet.xml-->
      <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 拦截所有的请求-->
  <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>
           

第四步 配置src目录下的springmvc-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"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">                    

    <!-- scan the package and the sub package -->
    <context:component-scan base-package="com.springMVC.test"/>

    <!-- don't handle the static resource -->
    <mvc:default-servlet-handler />

    <!-- if you use annotation you must configure following setting -->
    <mvc:annotation-driven />

    <!-- configure the InternalResourceViewResolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            id="internalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
           

第五步建立控制器hellController.java

在src目录下的com.springMVC.test包下创建类hellController.java

package com.springMVC.test;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/*★★★★★★这里导包的时候一定要对 ,,不然使用的ModelAndView对象是不正确的*/
import org.springframework.web.servlet.ModelAndView; 

@Controller
@RequestMapping("/c")
public class helloController {

      @RequestMapping("/hello")
      public String sayHello(@RequestParam("username")String userName,@RequestParam("password")String password){
          if(userName.equals("alleged")&&password.equals("root")){
              System.out.println(userName+password);
              return "successs";
          }else{
              System.out.println(userName+password);
              return "error";
          }

        }
      //带数据返回

}
           

最后一步建立主页index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
    <form method="post" action="/springMvc/c/hello">
        <input type="text" required="required" placeholder="用户名" name="username"></input>
        <input type="password" required="required" placeholder="密码" name="password"></input>
        <button class="but" type="submit">登录</button>
    </form>
    <a href="contacts.html">contacts</a>
</body>
</html>
           

继续阅读