一.SpringMVC执行流程

二.创建项目学习SpringMVC注解

按照我之前的SpringMVC创建项目,首先创建一个项目springmvc01,配置好pom.xml,web.xml,springmvc.xml文件之后创建一个HelloController。

1.RequestMapping注解

 //控制器类
@Controller
@RequestMapping("/user")
public class HelloController { @RequestMapping(path = "/hello")
public String sayHello() { System.out.println("hello SpringMvc");
return "success";
}
}

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>入门程序</h3>
<a href="/user/hello">入门程序</a> </body>
</html>

补:RequestMapping的method属性用来配置请求方式:

RequestMapping的params属性:用来限制请求参数的条件

2.补充内容为请求参数的绑定

  • 绑定机制:

  • 支持的类型:

  • 使用要求:

实现代码:

  • 基本类型:只需要编写jsp页面代码和Controller代码

<a href="/param/testParam?username=wzh&password=123">入门程序</a>

     /**
* 请求数据绑定入门
* @param username
* @param password
* @return
*/
@RequestMapping("/testParam")
public String testParam(String username,String password){ System.out.println("执行了...");
System.out.println("用户名:"+ username + ",密码:"+ password);
return "success";
}
  • POJO类型:(参数名和属性名要保持一致)

创建实体类:

创建Account实体类

 public class Account implements Serializable {

     private String username;
private String password;
private Double money; private List<User> list;
private Map<String ,User> map; public List<User> getList() {
return list;
} public void setList(List<User> list) {
this.list = list;
} public Map<String, User> getMap() {
return map;
} public void setMap(Map<String, User> map) {
this.map = map;
} // private User user; // public User getUser() {
// return user;
// }
//
// public void setUser(User user) {
// this.user = user;
// } public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public Double getMoney() {
return money;
} public void setMoney(Double money) {
this.money = money;
} @Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", list=" + list +
", map=" + map +
'}';
}
}

创建User实体类

 public class User implements Serializable {

     private String uname;
private Integer age; private Date date; public Date getDate() {
return date;
} public void setDate(Date date) {
this.date = date;
} public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "User{" +
"uname='" + uname + '\'' +
", age=" + age +
", date=" + date +
'}';
}
}

编写jsp代码:

如果类中还有对象则使用对象名.属性传值

 <%--把数据封装到Account中--%>
<form action="/param/saveAccount" method="post">
姓名:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
金额:<input type="text" name="money"><br>
用户的姓名:<input type="text" name="user.uname"><br>
用户年龄:<input type="text" name="user.age"><br>
<input type="submit" value="提交">
</form>

编写Controller类方法

 /**
* 请求数据绑定把数据封装到JavaBean的类中
* @return
*/
@RequestMapping("/saveAccount")
public String saveAccount(Account account){ System.out.println("执行了...");
System.out.println(account); return "success";
}
  • 使用集合类型List和Map:

Account类修改:

编写jsp代码:

 <%--把数据封装到Account中,类中存在list和map的集合--%>
<form action="/param/saveAccount" method="post">
姓名:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
金额:<input type="text" name="money"><br> 用户的姓名:<input type="text" name="list[0].uname"><br>
用户年龄:<input type="text" name="list[0].age"><br> 用户的姓名:<input type="text" name="map['one'].uname"><br>
用户年龄:<input type="text" name="map['one'].age"><br>
<input type="submit" value="提交">
</form>

控制器方法不变,当前端输入提交之后控制器将获得list和map中的值。

补:解决中文乱码问题:在web.xml中添加过滤器

 <!-- 配置过滤器,解决中文乱码的问题 (注意顺序写filter和servlet这样web-app不会有红色下划线)-->
<filter>
<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

补:自定义类型转换器(当输入Date类型不是yyyy/MM/dd而是yyyy-MM-dd时就需要类型转换器了)

添加日期类型转换类:StringToDateConverter

 /**
* 字符串转日期
* @author USTC_WZH
* @create 2019-11-22 15:51
*/
public class StringToDateConverter implements Converter<String, Date> { /**
* @param s 传入的字符串
* @return
*/
@Override
public Date convert(String s) { //判断
if (s == null){
throw new RuntimeException("请您传入数据");
} DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try {
//把字符串转换为日期
return df.parse(s);
} catch (Exception e) {
throw new RuntimeException("数据类型转换出现错误");
} }
}

修改springmvc.xml:

     <!-- 注册自定义类型转换器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="edu.ustc.utils.StringToDateConverter"/>
</set>
</property>
</bean> <!-- 配置spring开启注解mvc的支持,并配置自定义类型转换器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

编写jsp代码:

 <%--把数据封装进User中,但是User中Date格式不是yyyy/MM/dd改为了yyyy-MM-dd需要自定义类型转换器--%>
<form action="/param/saveUser" method="post">
用户的姓名:<input type="text" name="uname"><br>
用户年龄:<input type="text" name="age"><br>
用户生日:<input type="text" name="date"><br>
<input type="submit" value="提交">
</form>

编写控制器类的方法:

     /**
* 请求数据绑定把数据封装到JavaBean的类中
* @return
*/
@RequestMapping("/saveUser")
public String saveUser(User user){ System.out.println("执行了...");
System.out.println(user); return "success";
}

补:想要在SpringMVC框架中获得Servlet原生API

编写jsp代码:

 <%--测试原生的Servlet的API--%>
<a href="/param/testServlet">Servlet原生API</a>

编写控制器类的方法:

 /**
* 测试原生的Servlet的API
* @return
*/
@RequestMapping("/testServlet")
public String testServlet(HttpServletRequest request, HttpServletResponse response){ System.out.println("执行了..."); System.out.println(request); HttpSession session = request.getSession();
System.out.println(session); ServletContext servletContext = session.getServletContext();
System.out.println(servletContext); System.out.println(response); return "success";
}

2.学习SpringMVC注解入门篇的更多相关文章

  1. 一起学SpringMVC之入门篇

    本文属于SpringMVC的入门篇,属于基础知识,仅供学习分享使用,如有不足之处,还请指正. 什么是SpringMVC ? SpringMVC是一个基于Spring的MVC框架,继承了Spring的优 ...

  2. 从零开始学习jQuery (一) 入门篇

    本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些 ...

  3. 腾讯QQ会员技术团队:人人都可以做深度学习应用:入门篇(下)

    四.经典入门demo:识别手写数字(MNIST) 常规的编程入门有"Hello world"程序,而深度学习的入门程序则是MNIST,一个识别28*28像素的图片中的手写数字的程序 ...

  4. STM32学习之路入门篇之指令集及cortex——m3的存储系统

    STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... ...

  5. 3.学习SpringMVC注解深入

    一.SpringMVC注解: 1.RequestParam注解: 其中required属性默认为true(必须得传而且传的名字一样),为false时可以不传. 编写jsp代码: <a href= ...

  6. Java 系列之spring学习--springmvc注解方式(五)

    一.springmvc注解方式 注解方式使用的更多,更加灵活.在上一篇的博客的基础上修改springmvc-servlet.xml配置文件. <?xml version="1.0&qu ...

  7. Java工程师学习指南(入门篇)

    Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  8. python学习之路入门篇

    本文是up学习python过程中遇到的一些问题及总结归纳,本小节是入门篇. python基本语法 循环.分支不多赘述. 模块:一个.py文件就是一个模块. 文件和异常 模式 含义解释 “r” 读模式 ...

  9. 【腾讯Bugly干货分享】人人都可以做深度学习应用:入门篇

    导语 2016年,继虚拟现实(VR)之后,人工智能(AI)的概念全面进入大众的视野.谷歌,微软,IBM等科技巨头纷纷重点布局,AI 貌似将成为互联网的下一个风口. 很多开发同学,对人工智能非常感兴趣, ...

随机推荐

  1. sqlserver读取日志以及复制

    首选,在事务日志中,到底有多少是需要复制的?使用以下命令,可以确定事务日志中被标志为复制的命令有多少. USE test GO SELECT count(*) FROM ::fn_dblog(NULL ...

  2. docker镜像上传阿里云仓库

    推送至阿里云镜像:1.首先在阿里云上选择容器镜像服务,创建命名空间以及镜像仓库2. docker login --username=zhangshitongsky@163.com registry.c ...

  3. java基本数据类型的变量

    一.整型变量 短整型(short).整型(int)和长整型(long),它们都可以定义整型变量,但是由于分配的内存空间不同,所能表示的数据的长度也不同. 我们可以定义并初始化一个整型变量: int a ...

  4. linux学习 - 基本命令篇

    关机重启命令 基本操作之修改用户名(Ubuntu) 查看系统版本号 查看系统是32位还是64位 系统进程信息查看 查看某个端口被占用的情况 查看磁盘分区使用情况 df 命令 fdisk 关机重启命令 ...

  5. 彻底理解javascript中的this指针

    http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/ https://www.benn ...

  6. 基于tensorflow的简单鼠标键盘识别

    import cv2 as cvimport tensorflow as tfimport numpy as npimport random ##以下为数据预处理,分类为cata,总共样本为cata* ...

  7. 详细的Hadoop的入门教程-单机模式 Standalone Operation

    一. 单机模式Standalone Operation 单机模式也叫本地模式,只适用于本地的开发调试,或快速安装体验hadoop,本地模式的安装比较简单,下载完hadoop安装包就可以直接运行. 1. ...

  8. Django:RestFramework之-------版本控制

    6.版本控制 从URL通过get传参获取版本. 6.1自定义版本控制 from rest_framework.views import APIView class ParamVersion(objec ...

  9. 为元素添加 title 属性

    ---恢复内容开始--- 可以使用title属性(不要与title元素混淆)为网站上任何部分加上提示标签. ... <ul title="Table of Contents" ...

  10. 从 Vue 的视角学 React(一)—— 项目搭建

    虽然 Vue 在国内一家独大,但在全球范围内,React 依然是最流行的前端框架 最近和一些朋友聊天,发现很多项目都选择了 React 技术栈,而且公司的新项目也决定使用 React 我一直以来都是走 ...