一.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. 2、Vue构造器和扩展

    1.VUE构造器简介 VUE构造器是一个非常重要的语法. 每个Vue.js应用都是通过构造函数Vue创建一个根实例. New了Vue对象,然后调用了这个vue对象的构造器,并向构造器传入了数据. 在实 ...

  2. [個人紀錄] windows form , usercontrol design 模式不見

    windows form 跟 usercontrol 都變成cs檔 無法點擊進入設計模式 <Compile Include="Form1.cs"/> <Compi ...

  3. Spring Web MVC框架简介

    Web MVC framework框架 Spring Web MVC框架简介 Spring MVC的核心是`DispatcherServlet`,该类作用非常多,分发请求处理,配置处理器映射,处理视图 ...

  4. 使用 HttpWebRequest 类做 POST 请求没有应反

    这几天给系统做第三方集成, 需要调用另一个软件的一个接口, 通过 HTTP 的方式调用,调用代码也挺简单的: string serviceUrl = string.Format("{0}/{ ...

  5. 服务网格Istio初探

    1. 服务网格Istio初探 1.1. 什么是Istio 它是一个完全开源的服务网格.什么是服务网格? 这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互.随着规模和复杂性的增长,服务 ...

  6. 16、css实现div中图片占满整个屏幕

    <div class="img"></div> .img{ background: url("../assets/image/img.png&qu ...

  7. 【转】Vue项目报错:Uncaught SyntaxError: Unexpected token <

    这篇文章主要介绍了Vue项目报错:Uncaught SyntaxError: Unexpected token <,在引入第三方依赖的 JS 文件时,遇到的一个问题,小编觉得挺不错的,现在分享给 ...

  8. python可视化_matplotlib

    对于Python数据可视化库,matplotlib 已经成为事实上的数据可视化方面最主要的库,此外还有很多其他库,例如vispy,bokeh, seaborn,pyga,folium 和 networ ...

  9. day 28

    目录 操作系统发展史 穿孔卡片 联机批处理系统 脱机批处理系统 多道技术(基于单核情况下研究) 单道 多道技术 并发与并行 进程 程序与进程 进程调度 先来先服务调度 短作业优先调度 时间片轮转法 分 ...

  10. Excel 批量导入Mysql(创建表-追加数据)

    之前弄数据库的时候, 测试excel导mysql, 中间用pandas 处理后再入库.  直接上代码, 此种有真意, 尽在不言中. #!/usr/bin/env python # coding: ut ...