一.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. Vue传递方法给页面调用

    很多人在使用vue的时候苦于在vue中写方法,但是在外部甚至在另一个js该如何调用呢? 这个方法就是显示了vue的可以传递方法到页面使得页面任何地方都可以调用 前提得引用文件 这个方法一般多用于加载周 ...

  2. css元素水平垂直居中

    温习一下元素水平垂直居中的几种方法 元素有具体宽度 1.absolute+负边距 .LV_center{ border: 1px solid red; position: absolute; widt ...

  3. c#十进制转换

    1.方法定义 /// <summary> /// 十进制转换 /// </summary> /// <param name="hexChar"> ...

  4. 冒泡排序法vs快速排序法

    闲着没事,想思考一下两种排序法的直观对比,写了个小程序,代码如下,分析见后面: class Program { static DateTime t1, t2; static TimeSpan ts1, ...

  5. kubernetes(k8s)集群安装calico

    添加hosts解析 cat /etc/hosts 10.39.7.51 k8s-master-51 10.39.7.57 k8s-master-57 10.39.7.52 k8s-master-52 ...

  6. Spring Security实现OAuth2.0授权服务 - 基础版

    一.OAuth2.0协议 1.OAuth2.0概述 OAuth2.0是一个关于授权的开放网络协议. 该协议在第三方应用与服务提供平台之间设置了一个授权层.第三方应用需要服务资源时,并不是直接使用用户帐 ...

  7. Ubuntu 使用scrapy-splash

    配置docker 1.更新apt索引: $ sudo apt-get update 2.安装包允许apt通过HTTPS使用仓库:  sudo dpkg --configure -a  sudo apt ...

  8. Python删除列表元素的3种方法

    之前看教程的时候比较着急,对这些基础掌握不好,过来回顾一下 使用del语句删除 lis = [1, 2, 3, 'a', 'b'] print(lis) del lis[0] print(lis) 输 ...

  9. webpack面试题

    1.webpack的核心概念 Entry:入口,Webpack进行打包的起始点(文件) Output:出口,webpack编译打包生成的bundle(打包文件) Loader:模块加载(转换)器,将非 ...

  10. 英语aeroides海蓝宝石aeroides单词

    海蓝宝石(aeroides,Aquamarine)是一种含铍.铝的硅酸盐,与祖母绿.乌兰孖努以及碧玺等统称为彩色宝石.海蓝宝石的颜色为天蓝色至海蓝色或带绿的蓝色,它的颜色形成主要是由于含微量的二价铁离 ...