初识SpringMVC(SpringMVC学习笔记一)

1 、还是熟悉的配方,先创建一个父Maven项目(忘记怎么创建项目了就去前面翻笔记),导入通用的配置依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>SprinMVC_Father</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>SprinMVC_Father Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!--导入junit依赖方便后续测试      -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
    <!--导入SpringMVC依赖    -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
    <!--导入servlet依赖    -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <!--导入jsp依赖    -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>
    <!--导入jsptl依赖    -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>SprinMVC_Father</finalName>
  </build>
</project>

2、创建子项目,并确定子项目支持web项目

给子项目也导入servlet和jsp的依赖(双重导入确保不会出错,正常的话父项目导入了子项目不导入也可以,这里我们导入两次确保不会出问题)

 <!--导入servlet依赖    -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <!--导入jsp依赖    -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>

3、创建一个helleservlet类继承httpservlet用来处理用户的请求,实现父类的doGet和doPost方法

package com.li.myservlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HellServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、获取前段参数
        String method = req.getParameter("method");
        if(method.equals("add")){
            req.getSession().setAttribute("msg","执行了add方法");
        }
        if(method.equals("delete")){
            req.getSession().setAttribute("msg","执行了delete方法");
        }
        //2、调用业务层 暂时没有业务成

        //3、视图转发或重定向
        req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

顺便在web里写个测试页面

 Date: 2024/4/6
  Time: 16:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

再写个表单测试

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/4/6
  Time: 17:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>表单</title>
</head>
<body>
<form action="/hello" method="post">
<input type="text" name="method">
    <input type="submit" >
</form>
</body>
</html>

 3、写完servlet的第一件事情就是给它去web.xml中注册上

web.xml的头文件

<?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"
         version="4.0">

  
</web-app>

注册完后的web.xml

<?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"
         version="4.0">

      <!--注册servlet  -->

        <servlet>
          <servlet-name>hello</servlet-name>
          <servlet-class>com.li.myservlet.HellServlet</servlet-class>
        </servlet>
        <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello</url-pattern>
        </servlet-mapping>

        <!--还有一些其他的配置        -->
        <!--可以设置session的超时时间    这里设置15分钟    -->
<!--        <session-config>-->
<!--          <session-timeout>15</session-timeout>-->
<!--        </session-config>-->

        <!--也可以在这里设置欢迎页面  默认的是 index.jsp     -->
<!--        <welcome-file-list>-->
<!--          <welcome-file>xxx.jsp</welcome-file>-->
<!--        </welcome-file-list>-->
</web-app>

 最后目录如下:

3、一切都写完了就配置tomcat

 

3、初识SpringMVC

SpringMVC的原理如下

 

 

4、对 SpringMVC有初步了解之后我们再来创建一次项目

第一步创建视图

 第二步:确保最后发布的项目中导入了SpringMVC的依赖

第三步:在web.xml配置文件中配置我们的DispatchServlet
<?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"
         version="4.0">
<!--配置DispatchServlet:这个是SpringMVC的核心:请求分发器,前端控制器-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--DispatchServlet要绑定一个Spring-mvc的配置文件  其实就是spring的配置文件,
         只是spring可以做很多事情,我们细分下来叫Spring-mvc的配置文件
         -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <!--这里配置文件取名字就是按照上面的servlet-name的名字取的xxx-servlet   -->
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
        <!--设置启动级别为1 -->
            <load-on-startup>1</load-on-startup>
        </servlet>



<!--
    SpringMVC中/ 和 /* 的区别
    / :只匹配所有的请求,不会去匹配jsp页面
    /* :匹配所有的请求,包括jsp页面
    -->
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
</web-app>
第四步:编写springmvc的配置文件,其实就是spring的配置文件
<?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">

<!--处理器映射器 处理器映射器不止有一种-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--处理器适配器 这个和上面的处理映射器在后期的开发中直接注解就可以实现,不用死记,知道流程就可以-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器这个必须熟练掌握 后面还会学习一些模板引擎如 Thymeleaf Freemarker-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--需要配置两个参数,一个前缀,一个后缀-->
<!--  前缀    -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
<!--  后缀   -->
        <property name="suffix" value=".jsp"/>
    </bean>

    
</beans>
第五步:编写Controller
package com.li.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 HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();

//       假设一个业务代码
        String result = "HelloSpringmvc";
        modelAndView.addObject("msg",result);

//        视图跳转
        modelAndView.setViewName("test");
        return modelAndView;
    }
}

4、真实的开发:(一般不会像上面这样用)

第一步:配置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>
  <display-name>Archetype Created Web Application</display-name>

  <!--配置DispatchServlet:这个是SpringMVC的核心:请求分发器,前端控制器-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--DispatchServlet要绑定一个Spring-mvc的配置文件  其实就是spring的配置文件,
 只是spring可以做很多事情,我们细分下来叫Spring-mvc的配置文件
 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <!--这里配置文件取名字就是按照上面的servlet-name的名字取的xxx-servlet   -->
      <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <!--设置启动级别为1 -->
    <load-on-startup>1</load-on-startup>
  </servlet>



  <!--
      SpringMVC中/ 和 /* 的区别
      / :只匹配所有的请求,不会去匹配jsp页面
      /* :匹配所有的请求,包括jsp页面
      -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>
第二步:创建并配置springmvct配置文件 
<?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: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.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.li.controller"/>
    <!-- 让Spring MVC不处理静态资源 -->
    <mvc:default-servlet-handler />
    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven />
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

</beans>
第三步:创建controlle类
package com.li.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
//@Controller是为了让Spring IOC容器初始化时自动扫描到;
//@RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello;
    @Controller
    @RequestMapping("/HelloController")
    public class HelloController {
        //真实访问地址 : 项目名/HelloController/hello
        @RequestMapping("/hello")
//        方法中声明Model类型的参数是为了把Action中的数据带到视图中;
        public String sayHello(Model model){
            //向模型中添加属性msg与值,可以在JSP页面中取出并渲染
            model.addAttribute("msg","hello,SpringMVC");
//            方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。
            return "hello";
        }
    }
第四步:常见视图层(注意要在springmvct配置文件中配置的路径下创建视图层)

这里的路径是:/WEB-INF/jsp/

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/4/13
  Time: 16:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

总结:

实现步骤其实非常的简单:

  1. 新建一个web项目
  2. 导入相关jar包
  3. 编写web.xml , 注册DispatcherServlet
  4. 编写springmvc配置文件
  5. 接下来就是去创建对应的控制类 , controller
  6. 最后完善前端视图和controller之间的对应
  7. 测试运行调试.

使用springMVC必须配置的三大件:

处理器映射器、处理器适配器、视图解析器

通常,我们只需要手动配置视图解析器,而处理器映射器处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/540885.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java社团管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

【pycharm】运行完程序之后如何查看变量情况

【pycharm】运行完程序之后如何查看变量情况 Matlab运行完代码可以在工作区查看变量以及变量值&#xff0c;对于python也是可以的 pycharm运行完程序之后如何查看变量情况方法&#xff1a;选择edit configurations 把run with python console勾上 然后运行完代码就可以在下面查…

水离子雾化壁炉与酒店会客厅的氛围搭配

水离子雾化壁炉与酒店会客厅的氛围搭配可以营造出舒适、温馨和现代化的氛围&#xff0c;以下是一些建议&#xff1a; 焦点装饰&#xff1a;将水离子雾化壁炉设计成会客厅的焦点装饰物&#xff0c;使其成为客人进入会客厅后第一眼的吸引点。选择设计独特、现代化的壁炉造型&…

微信公众号迁移申请函怎么填写?

公众号迁移的好处有哪些&#xff1f;迁移后原公众号还能用吗&#xff1f;公众号迁移的好处有很多哦&#xff01;比如可以获得更多权限功能、公司变更或注销时可以保证账号的正常使用、收购账号后可以改变归属权或使用权等等。不过要注意的是&#xff0c;迁移后原公众号就不能再…

量化过程信息损耗分析(MATLAB)

MATLAB代码 clear_all; Mrand(5,5)*100;% 假设M是待转换的矩阵 a min(M(:)); b max(M(:));% 将M映射到[0, 255] M_mapped functionA(M, a, b); M_mapped_floorfloor(M_mapped); % 将M_mapped恢复到原始范围 M_original functionB(M_mapped_floor, a, b);disp(M); disp(M_m…

DNF手游攻略:2024新手攻略大全

在《DNF手游》的世界中&#xff0c;前期阶段对于新手玩家来说至关重要。以下是一份综合整理的新手攻略&#xff0c;帮助玩家快速适应游戏并取得进展。 1. 角色建立策略&#xff1a; 在前期&#xff0c;建议玩家建立3个角色&#xff0c;包括1个大号和2个小号。大号可以根据个人喜…

Hystrix应用:如何在Spring Boot中使用Hystrix?

Hystrix应用&#xff1a;如何在Spring Boot中使用Hystrix&#xff1f; 引言 在微服务架构的发展过程中&#xff0c;面对复杂的服务依赖和不可预见的系统故障&#xff0c;如何提升系统的容错能力成为了一个非常急迫且重要的能力。 由 Netflix&#xff08;网飞&#xff09;公司…

佛山分公司迎来重要指导蒋书记一行及杭州区域分公司领导共襄盛举

近日&#xff0c;佛山分公司迎来了一场重要的指导活动。蒋书记携夫人&#xff0c;以及助理黄显文和公司工作人员施晓燕等一行领导莅临佛山分公司&#xff0c;为公司的未来发展提供了宝贵的指导意见。同时&#xff0c;江浙福地区的杭州区域分公司负责人白棋元总和朱建江总也亲临…

Java 基于微信小程序的智能停车场管理小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

软件杯 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐…

Mysql主从复制原理

mysql主从复制原理 0、为什么需要主从复制&#xff1f; 1、在业务复杂的系统中&#xff0c;有这么一个情景&#xff0c;有一句sql语句需要锁表&#xff0c;导致暂时不能使用读的服务&#xff0c;那么就很影响运行中的业务&#xff0c;使用主从复制&#xff0c;让主库负责写&a…

STM32-看门狗

1、看门狗是什么&#xff1a;就是一个向下定时器&#xff0c;定时时间一到&#xff0c;就会触发一个向下的复位的中断&#xff0c;使单片机开始工作 2、作用&#xff1a;MCU微控制器构成的微型计算机系统中&#xff0c;由于微控制器的工作常常会受到来自外界电磁场的干 扰,造成…

python 如何安装nltk

1、在cmd窗口中&#xff0c;进入到python的文件夹中的Scripts内&#xff0c;我的目录地址是&#xff1a;D:\Python\Scripts。 在命令行输入&#xff1a; easy_install pip2、运行结束后&#xff0c;安装PyYAML and NLTK &#xff0c;在命令行输入&#xff1a; pip install pyya…

Pytest精通指南(07)跨模块共享fixture(conftest.py)

文章目录 conftest.py 简介conftest.py 用途和含义conftest.py 注意事项跨模块共享 Fixture局部共享conftest.py文件代码test_case_01.py文件代码test_case_02.py文件代码执行效果 全局共享根目录中的conftest.py文件代码子目录中的conftest.py文件代码test_case_01.py文件代码…

二叉树(完全二叉树、满二叉树)

树的概念及结构 树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 树的特点 有一个 …

Linux 秋招必知必会(四、信号、高级 I/O)

八、信号 57. 信号的基本特征 定义&#xff1a;信号是事件发生时对进程的通知机制&#xff0c;也可以把它称为软件中断信号处理方式 忽略信号 大多数信号都可以使用这种方式进行处理&#xff0c;但 SIGKILL 和 SIGSTOP 绝对不能被忽略如果忽略某些由硬件异常产生的信号&#…

lv_micropython to download and building

想要在ESP32-C3使用Micropython开发GUI&#xff0c;所以需要编译lv_micropython&#xff0c;当前github上的版本是9.1.0。 一、开发环境 因为编译lv_micropython需要在linux系统下&#xff0c;但是我的电脑是windows系统&#xff0c;所以我在windows系统上安装了VMware虚拟机&…

【matlab非线性规划工具箱安装1 SeDuMi 1.3工具箱】

【matlab非线性规划工具箱安装1 SeDuMi 1.3工具箱】 该博客是非线性手眼标定代码中所依赖的matlab工具箱的安装内容&#xff0c;除了进行手眼标定以外&#xff0c;该工具箱还可以用于其他的非线性规划问题 手眼标定传送门&#xff1a; 【从零开始进行高精度手眼标定 eye in …

Steam平台游戏发行流程

Steam平台游戏发行流程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师也是游戏热爱者&#xff0c;经常在steam平台玩各种游戏享受快乐生活。去年幻兽帕鲁以及雾锁王国在年底横空出世&#xff0c;幻兽帕鲁更是在短短一星期取得了非常好的成绩&#xff0c;那么作为游戏…

计算机网络——CSMA/CD协议以及相关习题

目录 前言 引言 CSMA/CD协议 CSMA与CSMA/CD的区别 CSMA/CD流程 前言 本博客是博主用于复习计算机网络的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 引言 最早的以太网&#xff0c;许多计算机都连接在一根总线上工作——广播通信方式。 总线的特点想…