侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SpringMVC入门

coydone
2022-03-20 / 0 评论 / 0 点赞 / 323 阅读 / 8,672 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

SpringMVC概述

定义

SpringMVC是一种基于Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 Web 开发时,可以选择使用 Spring的Spring MVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用),Struts2 等。

SpringMVC 已经成为目前最主流的 MVC 框架之一,并且随着 Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程风格的请求。

官方文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web

SpringMVC的优势

1、清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。

3、由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象。

4、和Spring其他框架无缝集成,是其它Web框架所不具备的。

5、可适配,通过 HandlerAdapter 可以支持任意的类作为处理器。

6、可定制性,HandlerMapping、ViewResolver 等能够非常简单的定制。

7、功能强大的数据验证、格式化、绑定机制。

8、利用Spring提供的Mock对象能够非常简单的进行Web层单元测试。

9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

10、强大的JSP标签库,使JSP编写更容易。

11、还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等。

SpringMVC和Struts2比较

共同点:

  • 它们都是表现层框架,都是基于 MVC 模型编写的;

  • 它们的底层都离不开原始 ServletAPI;

  • 它们处理请求的机制都是一个核心控制器。

区别:

  • SpringMVC的入口是 Servlet,而 Struts2是Filter。

  • SpringMVC是基于方法设计的,而 Struts2是基于类,Struts2每次执行都会创建一个动作类。所以SpringMVC会稍微比Struts2快些。

  • SpringMVC使用更加简洁,同时还支持JSR303, 处理ajax的请求更方便。(JSR303是一套 JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了。)

  • Struts2 的OGNL表达式使页面的开发效率相比 SpringMVC 更高些,但执行效率并没有比 JSTL 提升,尤其是 Struts2 的表单标签,远没有 html 执行效率高。

SpringMVC使用

Maven中创建Web工程

1、选择New Project或者New Module创建Maven的Web工程。

2、填写项目名称等信息。

3、一直Next等待工程创建完成。

4、在main下创建java目录和resources目录。并将java目录改为java源代码目录,将resources改为资源目录。

5、在Maven的Web工程中添加Tomcat插件运行。

<project>
    <build>
        <finalName>day07_springmvc</finalName>
        <plugins>
            <!--添加tomcat插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <!--如果configuration不加,默认端口为8080
            		path 项目名称
            		port 表示端口
           	 		servlet 表示服务器名称tomcat7
        		-->
                <configuration>
                    <path>/</path>
                    <port>8080</port>
                    <server>tomcat7</server>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

在IDEA的右上方的Maven中会有Tomcat7的支持,可以点击命令进行Tomcat的运行和停止。

使用Servlet原生API

1、在Web项目的pom.xml中添加SpringMVC的依赖支持。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>

    <!-- 初始化框架的版本号 -->
    <spring.version>4.3.3.RELEASE</spring.version>
</properties>

<dependencies>
    <!--spring支持的相关依赖和springmvc依赖(spring-web、spring-webmvc)-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>

为方便使用原生的Servlet,我们可以在pom文件中添加依赖支持。

<!--Servlet支持-->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
  <scope>provided</scope>
</dependency>
<!--jstl表达式支持-->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

2、在java下新建一个包xxx.xxx.controller。如com.coydone.controller,类似于JavaWeb中的servlet包,但SpringMVC推荐使用controller作为包名。

新建一个类,实现org.springframework.web.servlet.mvc.Controller接口,并重写handleRequest()方法。在SpringMVC中,实现了Controller接口的类就是一个控制器。类似于JavaWeb中的Servlet要实现HttpServlet,重写service方法(doGet()和doPost())。

我们写一个模拟登陆的Controller。

package com.coydone.controller;

public class LoginController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        request.setCharacterEncoding("UTF-8");
        //实现登录业务 用户名:admin  密码:123
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        ModelAndView mav = null;
        //通过用户名和密码调用业务层操作数据库
        if (username.equals("admin") && password.equals("123")){
            request.getSession().setAttribute("username",username);
            System.out.println("登录成功!");
            mav = new ModelAndView("success.jsp");
            //给ModelAndView对象添加数据  (底层还是将数据放到作用域)
            mav.getModel().put("msg","登录成功");
            //注意:视图页面中还是通过el、jstl表过式获取数据
        }else {
            System.out.println("登录失败");
            mav = new ModelAndView("index.jsp");
        }
        return mav;
    }
}

这里的request和response就是Servlet原生的API,我们在方法参数添加后可以直接使用。返回的类型是ModelAndView类型,它携带了要返回的页面和要显示的数据。

3、编写SpringMVC配置文件。一般命名为:springmvc.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:p="http://www.springframework.org/schema/p"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
     http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.3.xsd
     http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
   ">
    
</beans>

4、在web.xml中配置核心控制器。

<!--核心控制器
   1.拦截所有的用户请求,并根据请求的名称分发到用户控制
   2.读取SpringMVC配置文件
-->
<servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <!--拦截的请求 此时所有请求都由核心控制器控制-->
  <url-pattern>/</url-pattern>
</servlet-mapping>
  • /* :拦截所有的HTTP请求,包括.jsp的请求,都视为控制器类的请求路径来处理。

  • / :拦战所有的HTTP请求,但不包括.jsp 的请求,但不会放行静态资源请求。

5、在springmvc.xml配置文件中配置用户控制器。

<!--配置用户控制器的
  <bean name="请求路径" class="控制器类的限定名"></bean>
  -->
<bean name="/login" class="com.coydone.controller.LoginController"></bean>

6、编写登陆页面index.jsp。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆页面</title>
</head>
<body>
<form action="/login" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="登录">
    <input type="reset" value="重置">
</form>
</body>
</html>

7、编写登陆成功页面success.jsp。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>成功页面</title>
    </head>
    <body>
        <h1>这是登录成功页面</h1>
        ${msg}
    </body>
</html>

运行Tomcat插件,在浏览器中输入http://localhost:8080/index.jsp,输入正确的用户名和密码即可看见效果。

0

评论区