2.学习SpringMVC注解入门篇

一.SpringMVC执行流程

二.创建项目学习SpringMVC注解

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

1.RequestMapping注解

 1 //控制器类
 2 @Controller
 3 @RequestMapping("/user")
 4 public class HelloController {
 5
 6     @RequestMapping(path = "/hello")
 7     public String sayHello() {
 8
 9         System.out.println("hello SpringMvc");
10         return "success";
11     }
12 }

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>Title</title>
 5 </head>
 6 <body>
 7 <h3>入门程序</h3>
 8 <a href="/user/hello">入门程序</a>
 9
10 </body>
11 </html>

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

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

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

  • 绑定机制:

  • 支持的类型:

  • 使用要求:

实现代码:

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

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

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

创建实体类:

创建Account实体类

 1 public class Account implements Serializable {
 2
 3     private String username;
 4     private String password;
 5     private Double money;
 6
 7     private List<User> list;
 8     private Map<String ,User> map;
 9
10     public List<User> getList() {
11         return list;
12     }
13
14     public void setList(List<User> list) {
15         this.list = list;
16     }
17
18     public Map<String, User> getMap() {
19         return map;
20     }
21
22     public void setMap(Map<String, User> map) {
23         this.map = map;
24     }
25
26     //    private User user;
27
28 //    public User getUser() {
29 //        return user;
30 //    }
31 //
32 //    public void setUser(User user) {
33 //        this.user = user;
34 //    }
35
36     public String getUsername() {
37         return username;
38     }
39
40     public void setUsername(String username) {
41         this.username = username;
42     }
43
44     public String getPassword() {
45         return password;
46     }
47
48     public void setPassword(String password) {
49         this.password = password;
50     }
51
52     public Double getMoney() {
53         return money;
54     }
55
56     public void setMoney(Double money) {
57         this.money = money;
58     }
59
60     @Override
61     public String toString() {
62         return "Account{" +
63                 "username=‘" + username + ‘\‘‘ +
64                 ", password=‘" + password + ‘\‘‘ +
65                 ", money=" + money +
66                 ", list=" + list +
67                 ", map=" + map +
68                 ‘}‘;
69     }
70 }

创建User实体类

 1 public class User implements Serializable {
 2
 3     private String uname;
 4     private Integer age;
 5
 6     private Date date;
 7
 8     public Date getDate() {
 9         return date;
10     }
11
12     public void setDate(Date date) {
13         this.date = date;
14     }
15
16
17     public String getUname() {
18         return uname;
19     }
20
21     public void setUname(String uname) {
22         this.uname = uname;
23     }
24
25     public Integer getAge() {
26         return age;
27     }
28
29     public void setAge(Integer age) {
30         this.age = age;
31     }
32
33     @Override
34     public String toString() {
35         return "User{" +
36                 "uname=‘" + uname + ‘\‘‘ +
37                 ", age=" + age +
38                 ", date=" + date +
39                 ‘}‘;
40     }
41 }

编写jsp代码:

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

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

编写Controller类方法

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

Account类修改:

编写jsp代码:

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

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

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

 1 <!-- 配置过滤器,解决中文乱码的问题 (注意顺序写filter和servlet这样web-app不会有红色下划线)-->
 2   <filter>
 3     <filter-name>characterEncodingFilter</filter-name>
 4     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 5
 6     <!-- 指定字符集 -->
 7     <init-param>
 8       <param-name>encoding</param-name>
 9       <param-value>UTF-8</param-value>
10     </init-param>
11   </filter>
12
13   <filter-mapping>
14     <filter-name>characterEncodingFilter</filter-name>
15     <url-pattern>/*</url-pattern>
16   </filter-mapping>

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

添加日期类型转换类:StringToDateConverter

 1 /**
 2  * 字符串转日期
 3  * @author USTC_WZH
 4  * @create 2019-11-22 15:51
 5  */
 6 public class StringToDateConverter implements Converter<String, Date> {
 7
 8     /**
 9      * @param s 传入的字符串
10      * @return
11      */
12     @Override
13     public Date convert(String s) {
14
15         //判断
16         if (s == null){
17             throw new RuntimeException("请您传入数据");
18         }
19
20         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
21
22         try {
23             //把字符串转换为日期
24             return df.parse(s);
25         } catch (Exception e) {
26             throw new RuntimeException("数据类型转换出现错误");
27         }
28
29     }
30 }

修改springmvc.xml:

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

编写jsp代码:

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

编写控制器类的方法:

 1     /**
 2      * 请求数据绑定把数据封装到JavaBean的类中
 3      * @return
 4      */
 5     @RequestMapping("/saveUser")
 6     public String saveUser(User user){
 7
 8         System.out.println("执行了...");
 9         System.out.println(user);
10
11         return "success";
12     }

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

编写jsp代码:

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

编写控制器类的方法:

 1 /**
 2      * 测试原生的Servlet的API
 3      * @return
 4      */
 5     @RequestMapping("/testServlet")
 6     public String testServlet(HttpServletRequest request, HttpServletResponse response){
 7
 8         System.out.println("执行了...");
 9
10         System.out.println(request);
11
12         HttpSession session = request.getSession();
13         System.out.println(session);
14
15         ServletContext servletContext = session.getServletContext();
16         System.out.println(servletContext);
17
18         System.out.println(response);
19
20         return "success";
21     }

原文地址:https://www.cnblogs.com/zhihaospace/p/11961893.html

时间: 2024-10-16 07:09:07

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

Struts学习傻瓜式入门篇

或许有人觉得struts不容易学,似乎里面的一些概念让未接触过的人迷惑,MVC1.MVC2.模式……我写这篇文章是想让从来没有接触过struts的人,能有个简单的入门指引,当然,系统地学习struts是必要的,里面有很多让人心醉的东东,那是后话了. 该案例包括首页,用户登陆.网站向导页面.就这么简单,没有深奥的struts概念,主要靠动手,然后用心体会. WEB Server用tomcat4.到http://jakarta.apache.org下载struts1.1,把zip文 件释放到c:\s

现代C++学习笔记之一入门篇:智能指针(C++ 11)

原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 在现代 C++ 编程中,标准库包含智能指针,该指针用于确保程序不存在内存和资源泄漏且是异常安全的. 在现代 C++ 中,原始指针仅用于范围有限的小代码块.循环或者性能至关重要且不会混淆所有权的 Helper 函数中. 1 void UseRawPointer() 2 { 3 // Using a raw pointer -- not recommended

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

一.springmvc注解方式 注解方式使用的更多,更加灵活.在上一篇的博客的基础上修改springmvc-servlet.xml配置文件. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchem

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

Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线. 所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程.今天我们要讲的是,

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

一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章是入门第一篇, 主要是简单介绍jQuery, 通过简单示例指导大家如何编写jQuery代码以及搭建开发环境. 详细讲解了如何在Visual Studio中配合使用jQuery. 转载请注明子秋出品!博客园首发! 二.前言 首先道个歉! "从零开始学习ASP.NET MVC"系列文章在即将介绍Filter时就没有更新了, 原因就是

大数据学习步骤,入门篇

目前大数据行业异常火爆,不少人都对大数据充满了兴趣,其中有大部分人都是之前没有接触过计算机技术的,对编程语言也不太了解,那是不是这部分零基础的朋友就学不了大数据了呢?答案当然是否定的.大数据学习并不是高深莫测的,虽然它并没有多简单,但是通过努力,零基础的朋友也是完全可以掌握大数据的. 推荐一个大数据学习群142974151每天晚上20:10都有一节[免费的]大数据直播课程,专注大数据分析方法,大数据编程,大数据仓库,大数据案例,人工智能,数据挖掘都是纯干货分享, 零基础学习大数据一般有以下几步:

人人都可以做深度学习应用:入门篇

一.人工智能和新科技革命 2017年围棋界发生了一件比较重要事,Master(Alphago)以60连胜横扫天下,击败各路世界冠军,人工智能以气势如虹的姿态出现在我们人类的面前.围棋曾经一度被称为"人类智慧的堡垒",如今,这座堡垒也随之成为过去.从2016年三月份AlphaGo击败李世石开始,AI全面进入我们大众的视野,对于它的讨论变得更为火热起来,整个业界普遍认为,它很可能带来下一次科技革命,并且,在未来可预见的10多年里,深刻得改变我们的生活. 其实,AI除了可以做我们熟知的人脸.

人人都能够做深度学习应用:入门篇

一.人工智能和新科技革命 2017年围棋界发生了一件比較重要事,Master(Alphago)以60连胜横扫天下,击败各路世界冠军.人工智能以气势如虹的姿态出现在我们人类的面前.围棋以前一度被称为"人类智慧的堡垒",现在.这座堡垒也随之成为过去.从2016年三月份AlphaGo击败李世石開始,AI全面进入我们大众的视野,对于它的讨论变得更为火热起来.整个业界普遍觉得,它非常可能带来下一次科技革命,而且,在未来可预见的10多年里,深刻得改变我们的生活. 事实上.AI除了能够做我们熟知的人

Sass学习笔记之入门篇

Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样式表.以下是我的学习笔记. Sass安装环境 1.安装sass(mac) ①:Ruby安装 ②:安装sass sudo gem install sass 可以通过 sass -v检测是否完成安装   2.更新sass gem update sass 3.卸载(删除)sass gem uninstal