一.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";
}

最新文章

  1. node.js中使用https请求报CERT_UNTRUSTED的问题解决
  2. php for循环嵌套
  3. boost构造,解析json
  4. javascript 数字字符串转为数字
  5. ListVeiw新增记录及 滚动条移动到指定位置
  6. j2ee基础
  7. Unity C# 一些关于Camera的心得!
  8. [转]Python UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character 解决方法
  9. 【Python】Elasticsearch和elasticsearch_dsl
  10. Reading comprehension HDU - 4990
  11. 自定义Write节点的afterrender属性
  12. Ceph/共享存储 汇总
  13. java第二次实验报告
  14. Axure 验证码、进度条、分页条(翻页)、搜索框、选项卡
  15. Word中回车和网页换行替换
  16. N个数中第k个最大者
  17. Java编程题每日一练day1
  18. Ubuntu下tensorboard的使用
  19. Git Brash在Windows下乱码问题
  20. java字符串和时间类型的相互转换

热门文章

  1. -Git 使用技巧 总结 MD
  2. 【Linux】CentOS7 打开关闭防火墙及端口
  3. HTTP协议随笔
  4. APS.NET MVC + EF (02)---ADO.NET Entity FrameWork
  5. 指针 vs 引用 (2)
  6. springMVC执行流程及架构
  7. CodeForces 309B Context Advertising
  8. Matlab桥接模式
  9. 【转载】C#通过InsertAt方法在DataTable特定位置插入一条数据
  10. toString()和Object.prototype.toString.call() 不一样