SpringMVC之环境搭建和参数绑定_springmvc 项目怎么添加启动参参数-程序员宅基地

技术标签: spring  java  springmvc  


前言

SpringMVC就是整合了MVC模型的框架,可以让你无需实现任何接口,只需通过注解等简易操作,实现让一个简单的Java类成为处理请求的控制器,实现请求数据的快捷封装,实现对应请求的响应视图和数据。

一、项目环境搭建

创建maven工程的web项目,所有配置完成后的项目结构如下:
项目结构

1.配置pom文件的依赖

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.2.RELEASE</spring.version>
  </properties>
<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <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>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

2.配置web.xml

配置一个前端控制器DispatcherServlet实质也是一个HttpServlet,有两个作用,①负责分发所有的请求;②当你配置了初始化参数contextConfigLocation后,将会根据你配置的值读取指定的配置文件来初始化(例如创建对象或开启注解等)

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <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>
    <!--加这个属性为整数时,可以让servlet在web服务器启动后自动创建,
    如果是负数或没有设置,则表示servlet被请求时才会加载-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!--我这里还加了个springMVC提供的字符编码过滤器-->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

3.创建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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:annotation-config/>
    <!--需要扫描哪些位置的注解-->
    <context:component-scan base-package="com.mediacomm"></context:component-scan>
    <!--创建视图解析器,我这里配置的两个属性,到时就会根据返回值响应给客户端对应/WEB-INF/page/路径下的jsp页面-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
   	<!--使 用 <mvc:annotation-driven> 自动加载 RequestMappingHandlerMapping (处理映射器) 和
	RequestMappingHandlerAdapter ( 处 理 适 配 器 )-->
    <mvc:annotation-driven/>

运行于tomcat服务器

二、使用步骤

1.创建jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="hello">入门教程</a>
    <a href="param?username=rr&password=123456">参数绑定</a>
    <form action ="paramsBean/1" method="post">
        姓名:<input type="text" name="username"><br/>
        密码:<input type="password" name="password"><br/>
        地址:<input type="text" name="address"><br/>
        存款:<input type="text" name="money"><br/>
        描述:<input type="text" name="userInfo.info"><br/>
        日期:<input type="text" name="date"><br/>
        <input type="submit" name="提交"><br/>
    </form>
</body>
</html>

2.创建java类

@Controller:让SpringIoC容器为我们创建一个单例对象
@RequestMapping:用于建立请求 URL 和处理请求方法之间的对应关系
    属性:
    path:用于指定请求的 URL
    params:用于指定限制请求参数的条件,要求请求参数的 key 或value 必须和
配置的一模一样
    method:用于指定请求的方式

在jsp中可以看到我用到了三种方式发送请求,第一种直接get请求,第二种get请求带参数,第三种是post一个表单。这三个请求分别对应了代码中@RequestMapping的path值

而请求的参数,springMVC会根据对应的方法中的同名参数自动进行绑定,也就是无论引用类型还是基本类型都会自动帮你封装,留意我jsp表单中的userInfo.info,这是因为User类中包含了userInfo的自定义类型属性,所以表单中的参数要封装到User中就需要按照这样的写法。

@Controller
public class HelloServlet {
    
    @RequestMapping(path = "/hello")
    public String sayHello(){
    
        System.out.println("first springmvc project:第一个");
        return "success";
    }
    @RequestMapping(path = "/param",params = {
    "username","password"})
    public String params(String username,String password){
    
        System.out.println("user params:"+username+","+password);
        return "success";
    }
    @RequestMapping(path = "/paramsBean",method = {
    RequestMethod.POST})
    public String paramsBean(User user){
    
        System.out.println(user);
        return "success";
    }
}

3.演示效果

1.显示效果
显示效果
2.第一个请求
在这里插入图片描述
控制台输出

[2021-07-29 09:33:42,000] Artifact day01_first_springmvc:war: Artifact is deployed successfully
[2021-07-29 09:33:42,001] Artifact day01_first_springmvc:war: Deploy took 8,633 milliseconds
29-Jul-2021 09:33:43.212 信息 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\01 软件\eclipse\apache-tomcat-9.0.41\webapps\manager]
29-Jul-2021 09:33:43.426 信息 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[D:\01 软件\eclipse\apache-tomcat-9.0.41\webapps\manager]的部署已在[212]毫秒内完成
first springmvc project:第一个

3.第二个请求
在这里插入图片描述
控制台输出

user params:rr,123456

4.第三个请求
在这里插入图片描述
控制台输出

User{
    username='admin', password='123', money='123', address='321', id=0, userInfo=UserInfo{
    info='321'}, date=Mon Oct 01 00:00:00 CST 2091}

总结

简单的对SpringMVC的使用配置和参数绑定就列举到此,本人也在继续学习,如果言诉错误的地方,欢迎指正,谢谢。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42717117/article/details/119185226

智能推荐

atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy-程序员宅基地

文章浏览阅读48次。atitit.解决net.sf.json.JSONExceptionThereisacycleinthehierarchy1.环境:使用hibernate4跟个,,要不个哪的对象系列化成个json的时候儿有这个问题了... 12.原因::hb默认的lazy方式造成的当有关联对象的时候儿... 13.#---解决::lazy=fal...

ESP8266和ESP32区别,以及优缺点分析!_esp8266为什么不建议使用-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏4次。高速主频240MHZ,对比STM32F1的72MHZ和STM32F4的168MHZ,速度快很多,而且价格上比起一直在涨价的STM系低出非常多;总的来说,STM32在国内的使用程度和受众程度是远大于ESP32的,毕竟STM32已经占据主流市场很久了,学习的资料比起ESP32起来会多,再加上一些开源问题,使用32的人群还是占据多数。2016年,乐鑫推出了ESP32,它是ESP8266的升级版本,速度更快还带有蓝牙4.2和蓝牙低功耗,价格在20元左右,在这个价格下几乎找不到对手可以“一战”。_esp8266为什么不建议使用

linux 分区简介,Linux硬盘分区知识简介-程序员宅基地

文章浏览阅读990次。Linux系统可以挂载多个不同接口类型的磁盘(disk),每一个磁盘又可以分成若干个分区(Partition),每个分区又可以拥有自己的文件系统类型(FileSystem)。Linux对于磁盘和分区又自己的一套标记方法。硬盘和分区的区分第一个SCSI(Small Computer System Interface)磁盘记为/dev/sda,第二个SCSI磁盘记为/dev/sdb;第一个SATA磁盘..._linux引导分区的标记可为

unity 网络游戏架构设计(第12课:网络游戏案例讲解)之美_网络游戏消息结构设计案例-程序员宅基地

文章浏览阅读656次。第12课:网络游戏案例讲解上章给读者介绍关于服务器之间的通信,本章通过案例给读者介绍如何将框架跟 Photon 结合起来,实现一个网络通信的框架设计。UI 架构设计模块已经介绍过,我们的 Demo 使用的 UI 是 UGUI,简单的用几个 Button 代替 Sprite,它们的原理是一样的。我们先创建一个 UI,如下图所示:这个 UI 主要有三个关键按钮,分别是 Create Roo..._网络游戏消息结构设计案例

Android-Gradle详解_grade编译运行安卓-程序员宅基地

文章浏览阅读548次。Android 构建系统非常灵活,可让你在不修改应用核心源代码文件的情况下执行自定义构建配置。本部分将介绍 Android 构建系统的工作原理,以及它如何帮助你对多个构建配置进行自定义和自动化处理。构建过程涉及许多将你的项目转换为 Android 应用程序包 (APK) 的工具和过程。构建过程非常灵活,因此了解一些幕后发生的事情很有用。下图为Android 应用模块的构建过程。Android 应用模块的构建过程(如上图所示)遵循以下一般步骤:1、编译器将你的源代码转换为 DEX(Dalv_grade编译运行安卓

linux网络配置后面加一条wheel,linux安全配置/etc/sudoers&wheel组-程序员宅基地

文章浏览阅读800次。/etc/sudoers 控制哪些用户能在哪些主机上以哪些用户的身份执行哪些命令。只有此文件权限为440时才能用户才能使用sudo命令,只有root用户才能使用visudo命令修改此文件。当然也可以先添加文件写权限,然后修改,再把文件权限改回来。此文件的一些配置规则定义别名:User_Alias UserName = user1,user2,kongoveHost_Alias HostName =..._%wheel all=(all) all

随便推点

九度OJ 1174 查找第K小数 (STL)_oj 第k小整数 c++-程序员宅基地

文章浏览阅读2.4k次。题目1174:查找第K小数时间限制:1 秒内存限制:32 兆特殊判题:否提交:5161解决:2081题目描述:查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。输入:输入有多组数据。每组输入n,然后输入n个整数(1输出:输出第k小的整数_oj 第k小整数 c++

阻容感基础10:电感器分类(1)-片式电感器_亨特h-程序员宅基地

文章浏览阅读814次,点赞3次,收藏4次。我们接触到的电感器是各种各样的:有绕着圈圈的,有贴片的(0805/0603/0402/0201),还有一些是四四方方的。那么这些电感有什么差别呢?本章我们来一起看贴片电感器和磁珠,我们大多只知道磁珠是耗能元件而电感是储能元件,从原理上为什么会是这样的效果呢?它们在结构上有差别么?ps:“暗物质”看不见摸不着,据说每秒钟有几吨的暗物质穿过我们的身体,那我们是怎么知道暗物质这玩意存在的呢?_亨特h

微信扫码下载APK遮罩提示示例-程序员宅基地

文章浏览阅读259次。由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时,界面显示一片空白,容易误导以为在下载呢。按照当前主流习惯,做一个提示用户在浏览器中打开下载的遮罩。网上很多现成的例子,解释的也很详细,但感觉没有直接上手可用的例子,因此,我打算写个示例。<!DOCTYPE html><html><head><met..._微信扫码下载apk遮罩提示

解决Windows 11系统C盘爆满:Docker 桌面版日志文件的疑难杂症_appdata\local\docker\log\host-程序员宅基地

文章浏览阅读4.5k次,点赞7次,收藏10次。通过上述方法,您不仅可以解决因Docker日志文件导致的C盘空间爆满问题,还可以应用这一技巧,管理系统中的任何其他大文件或文件夹。保持C盘的清爽,让您的Windows系统运行更加流畅!_appdata\local\docker\log\host

异步上传引出的血案..-程序员宅基地

文章浏览阅读54次。首先想到的是 js插件 ajaxSubmitForm1. http://www.cnblogs.com/DylanZ/p/6019611.html 1 function ajaxSubmitForm() { 2     var option = { 3    url : '${pageContext.request.contextPath}/userCo..._clientcallmode

交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装-程序员宅基地

文章浏览阅读8w次,点赞20次,收藏160次。aarch64-linux-gnu-gcc 是由 Linaro 公司基于 GCC 推出的的 ARM 交叉编译工具_aarch64-linux-gnu-gcc

推荐文章

热门文章

相关标签