第一个SpringMVC应用

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一个SpringMVC应用相关的知识,希望对你有一定的参考价值。

第一个SpringMVC应用

  • MVC的思想是将一个应用分成三个部分,即Model,View,Controller
  • 让三个部分以最低的耦合方式进行协同工作,从而提高应用的可扩展性和可维护性
  • SpringMVC是一款优秀的基于MVC思想的应用框架,它是Spring提供的一个实现WebMVC设计模式的轻量型Web框架
  • 模型:用于存储数据以及处理用户请求的业务逻辑
  • 视图:向控制器提交数据,显示模型中的数据
  • 控制器:根据视图提出的请求,判断将请求和数据交给哪个模型处理,将处理的结果集交给哪个模型显示.
  • 基于servlet的MVC模式
  • 模型:一个或者多个JavaBean对象,用于存储数据和处理业务逻辑。
  • 视图:一个或者多个JSP页面,向控制器提交数据和为模型提供数据显示,JSP页面主要主要使用html和JavaBean来标记显示数据
  • 控制器:一个或者多个servlet对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的JavaBean,并将结果储存到实体模型JavaBean中,将结果输出给视图显示
  • SpringMVC工作原理
  • SpringMVC框架是高度可配置的,包含多种视图技术,常用的视图技术是JSP
  • SpringMVC的框架主要由DispatcherServlet,处理器映射,控制器,视图解析器,视图组成,SpringMVC的工作流程如下:
  • 1-客户端请求提交到DispatcherServlet
  • 2-由DispatcherServlet控制器寻找一个或者多个HandlerMapping,找到处理请求的Controller
  • 3-DispatcherServlet将请求提交到Controller
  • 4-Controller调用业务逻辑处理后返回ModelAndView
  • 5-DispatcherServlet寻找一个或者多个视图解析器ViewResolver,找到ModelAndView指定的视图
  • 6-视图负责将结果显示到客户端。

下面演示第一个SpringMVC应用

1-使用IDEA创建web应用ch9,在该应用的WEB-INF建立目录lib,在该目录中导入相关jar包,并把jar包添加为库项目。

2-在web.xml文件中部署DispatcherServlet,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
        id = "WebApp_ID" version="4.0">
    <!--部署DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>WEB-INF/springmvc-servlet.xml</param-value>
        </init-param>
        <!--表示容器启动时加载的servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--任意的请求都通过DispatcherServlet-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

3-在web目录下的index.jsp文件中创建web应用首页

<%--
  Created by IntelliJ IDEA.
  User: nuist__NJUPT
  Date: 2021/8/5
  Time: 20:03
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>Insert title here</title>
  </head>
  <body>
       未注册的用户,请<a href="${pageContext.request.contextPath}/register">注册</a>!<br>
       已注册的用户,去<a href="${pageContext.request.contextPath}/login">登录</a>!
  </body>
</html>

4-在src目录下创建controller包,在该包中创建RegisterController和LoginController两个控制器类

RegisterController类:

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") ;
    }
}

LoginController类:

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") ;
    }
}

5-在WEB-INF目录下创建名为springmvc-servlet.xml的配置文件,并配置Controller映射信息,同时配置视图解析器,配置前缀和后缀的两个属性,控制器的视图路径上会自动加上前缀和后缀。

<?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"/>
    <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" id = "internalResourceViewResolver">
        <!--前缀-->
        <property name = "prefix" value = "/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name = "suffix" value = ".jsp"/>
    </bean>
</beans>

6-在WEB-INF目录下创建jsp目录,在该目录中创建注册视图register.jsp和登录视图login.jsp。

register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
注册页面
</body>
</html>

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
登录页面
</body>
</html>

7-发布并运行SpringMVC应用,运行tomcat,结果如下:

当用户点击“注册”超链接时候,根据springmvc-servlet.xml文件的映射请求转发给RegisterController控制器处理,然后根据视图解析器解析的路径跳转到/WEB-INF/jsp下的register.jsp视图,同理,当点击“登录”超链接时候,控制器处理后将跳转到
/WEB-INF/jsp下的login.jsp视图。

以上是关于第一个SpringMVC应用的主要内容,如果未能解决你的问题,请参考以下文章

第一个SpringMVC应用

SpringMVC与struts2区别和第一个springMVC应用

自动刷新android片段,直到满足条件

更改片段内布局的按钮

重新创建应用时,片段与底部导航视图图标不匹配

当我切换到包含片段的活动时应用程序崩溃(二进制 XML 文件第 10 行:二进制 XML 文件第 10 行:膨胀类片段时出错)