【Spring MVC】基础

MVC模式

  MVC是Model、View和Controller的缩写。是Java Web应用的推荐架构。
  一个实现MVC模式的应用包含模型、视图和控制器3个模块。视图负责应用的展示。模型封装了应用的数据和业务逻辑。控制器负责接收用户输入,改变模型,以及调整视图的显示。其架构图大致为:

这里写图片描述

Spring MVC

  Spring MVC是基于SpringFrameWork来开发Web应用的MVC框架。其特点有:

  • 提供了一个Dispatcher Servlet,无需额外开发。
  • 自动实例化控制器,并根据用户输入来构造bean。
  • 可以自动绑定用户输入,并正确地转换数据类型。
  • 可以校验用户输入,若校验不通过,则重定向回输入表单。
  • 支持国际化和本地化。
  • 支持多视图技术。如:JSP、Velocity和FreeMarker。

SpringMVC实例

  IDE:IntelliJ IDEA 2017.1
  实例说明:在页面中输入数据,提交表单,跳转到显示输入数据的页面。

新建项目
New Project → Maven → maven-archetype-webappcn.jujianfei.test(GroupId) ,
                                                 test-springmvc(ArtifactId) → .......  → Finish

  新建Maven项目时,如果使用默认的settings.xml文件,下载依赖会比较慢,因为Maven中央仓库在国外。
  解决方案:在settings.xml中添加配置,使用阿里的仓库。具体配置如下:

<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
添加依赖
<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.1.2</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>5.0.8.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.0.8.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.0.8.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-expression</artifactId>
  <version>5.0.8.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.0.8.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.0.8.RELEASE</version>
</dependency>
项目目录

这里写图片描述

项目代码
@Controller
public class UserController {

    @RequestMapping("/user_input")
    public String inputUser(){
        return "InputUser";
    }

    @RequestMapping("/user_show")
    public String showUser(@RequestParam String name,@RequestParam String pwd,Model model){
        User user = new User();
        user.setUserName(name);
        user.setUserPwd(pwd);
        model.addAttribute("user",user);
        return "ShowUser";
    }
}
public class User {
    private String userName;
    private String userPwd;

    //get和set方法,略
}
<?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/cache"
       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/cache 
       http://www.springframework.org/schema/cache/spring-cache.xsd">

    <context:component-scan base-package="controller"/>
    <bean id="viewResolver" 
                    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

  InputUser.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>input</title>
</head>
<body>
    <form action="/user_show" method="post">
        UserName:<input type="text" name="name"><br>
        UserPwd:<input type="text" name="pwd"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

  ShowUser.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>show</title>
</head>
<body>
    UserName:${user.userName}<br>
    UserPwd:${user.userPwd}<br>
</body>
</html>

  web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>  

  <servlet>
    <servlet-name>spring_mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/config/spring_mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>spring_mvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

实际效果

  配置Tomcat Server:Run → Edit Configurations → ……. → Ok。
  点击运行,访问地址:http://localhost:8080/user_input 。效果为:

扫描二维码关注公众号,回复: 2573217 查看本文章
这里写图片描述

  填写信息,单击提交。效果为:
这里写图片描述

请求处理方法

  每个请求处理方法可以有多个不同类型的参数,以及一个多种类型的返回结果。

请求处理方法可以使用的参数类型
  • javax.servlet.ServletRequest 或 javax.servlet.http.HttpServletRequest
  • javax.servlet.ServletReponse 或 javax.servlet.http.HttpServletResponse
  • javax.servlet.http.HttpSession
  • org.springframework.web.context.request.WebRequest 或 org.springframework.web.context.request.NativeWebRequest
  • java.util.Locale
  • java.io.InputStream 或 java.io.Reader
  • java.io.OutputStream 或 java.io.Writer
  • java.security.Principal
  • HttpEntity<?>
  • java.util.Map / org.springframework.ui.Model / org.springframework.ui.ModelMap
  • org.springframework.web.servlet.mvc.support.RedirectAttributes
  • org.springframework.validation.Errors / org.springframework.validation.BindingResult
  • 命令或表单对象
  • org.springframework.web.bind.support.SessionStatus
  • org.springframework.web.util.UriComponentsBuilder
  • 带@PathVariable,@MatrixVariable注释的对象
  • @RequestParam,@RequestHeader,@RequestBody或@RequestPart

特别重要的是org.springframework.ui.Model类型。这不是一个Servlet API类型,而是一个包含Map的Spring MVC类型。每次调用请求处理方法时,Spring MVC都会创建一个Model对象。

请求处理方法可以使用的返回的类型
  • ModelAndView
  • Model
  • Map包含模型的属性
  • View
  • 代表逻辑视图名的String
  • void
  • 提供对Servlet的访问,以响应HTTP头部和内容HttpEntity或ResponseEntity对象
  • Callable
  • DeferredResult
  • 其他任意类型,Spring将其视作输出给View的对象模型

小结

  浏览器发出一个请求,DispatcherServlet根据请求中的URI,将请求映射到服务器中对应的处理方法上。处理方法接收参数,书写业务逻辑,并返回视图名称的字符串。最后,jsp将响应内容发送到浏览器。

猜你喜欢

转载自blog.csdn.net/Gnd15732625435/article/details/81358878
今日推荐