提示:以下是本篇文章正文内容,下面案例可供参考
1 springMVC学习
1.1 springMVC传参
1.1.1 请求路径传参
//请求路径传参数
@RequestMapping("/t1")
public void test1(String name,Integer age){
//servlet中需要频繁的强制转换,springMVC框架可以自动转换
System.out.println("name:"+name);
System.out.println("age:"+age);
}
1.1.2 通过HttpServletRequest对象获取参数
导入servlet-api依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
IDEA中输出语句System.out.println();的快捷键:sout
//通过HttpServletRequest对象获取参数
@RequestMapping("/t2")
public void test2(HttpServletRequest request){
String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("name:"+name);
System.out.println("age:"+age);
}
1.1.3 通过表单的name属性值作为参数传到后台
1.1.3.1 get请求
1.1.3.1.1 get请求实现
先新建一个表单jsp页面(用get请求,默认get),表单标签里加 action="/t3" method=“get”( t3 是后台 @RequestMapping("/t3") )
<%--
Created by IntelliJ IDEA.
User: 16338
Date: 2021/2/23
Time: 13:57
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/t3" method="get">
<p>
用户名:<input type="text" name="username" placeholder="请输用户名">
</p>
<p>
密码:<input type="password" name="pwd" placeholder="请输密码">
</p>
<p>
邮箱:<input type="text" name="email" placeholder="请输邮箱">
</p>
<p>
<input type="submit" value="注册">
</p>
</form>
</body>
</html>
后台:
//通过表单的name属性值作为参数传到后台
@RequestMapping("/t3")
public void test3(String username,String pwd,String email){
System.out.println("username:"+username);
System.out.println("pwd:"+pwd);
System.out.println("email:"+email);
}
1.1.3.1.2 处理get请求乱码问题
处理get请求乱码问题:tomcat依赖里添加 uriEncoding 标签使用utf-8
<!-- 导入tomcat插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8066</port>
<path>/</path>
<uriEncoding>utf-8</uriEncoding>
</configuration>
</plugin>
1.1.3.2 post请求
1.1.3.2.1 post请求实现
若表单内改为post请求
后台 @RequestMapping改为:
@RequestMapping(value = "/t3",method = RequestMethod.POST)
1.1.3.2.2 处理post请求乱码问题
处理post请求乱码问题:
在web.xml文件 web-app 标签里添加过滤器
<!-- 乱码处理filter过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 指定编码集 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<!-- 指定拦截方式 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
1.1.3.3 get和post请求
若表单内get和post请求都可以
后台 @RequestMapping改为:
@RequestMapping(value = "/t3",method = {RequestMethod.POST,RequestMethod.GET})
1.1.4 封装实体类传参
假如表单中提交的参数很多用test3这种传参方式就不太合适
所以针对提交参数多的表单,可以使用表单的name属性值封装对象,传对象到服务端即可
保证封装对象的属性和表单的name属性值一致, SpringMVC 就会完成自动封装
如将表单中的name属性封装到 User 类
在pojo包中新建User类,将属性生成 get set toString 方法
package com.qst.pojo;
public class User {
//这个类属性表单name属性一致
private Integer id;
private String username;
private String pwd;
private String email;
//生成 get set toString 方法
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", pwd='" + pwd + '\'' +
", email='" + email + '\'' +
'}';
}
}
在后台中直接用封装的User类
@RequestMapping(value = "/t5",method = RequestMethod.POST)
public void tset5(User user){
System.out.println(user);
}
1.1.4 使用ajax传参
略
1.2 服务端如何响应数据给客户端
1.2.1 使用ModelAndView 封装视图和模型
新建test.jsp
<%--
Created by IntelliJ IDEA.
User: 16338
Date: 2021/2/24
Time: 10:16
To change this template use File | Settings | File Templates.
--%>
<%@page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--EL表达式--%>
<h2>欢迎 ${username} 登录系统</h2>
</body>
</html>
后台新建Test1Controller类:
/*服务端如何响应数据给客户端*/
@Controller
@RequestMapping("/admin")//访问:localhost:8066/admin/t1
public class Test1Controller {
//使用ModelAndView 封装视图和模型
@RequestMapping("/t1")
public ModelAndView test1(ModelAndView modelAndView){
//使用ModelAndView封装数据
modelAndView.addObject("username","张三");
//使用ModelAndView封装视图
modelAndView.setViewName("test");//视图名称
return modelAndView;
}
}
1.2.2 使用Model对象封装数据返回
test.jsp页面将 EL表达式改了即可
后台:
//使用Model对象封装数据返回
@RequestMapping("/t2")
public String test2(Model model){
model.addAttribute("address","江苏如皋");
model.addAttribute("price","888");
return "test";
}
1.2.3 使用HttpServletRequest绑定数据
test.jsp页面将 EL表达式改了即可
后台:
//使用HttpServletRequest绑定数据
@RequestMapping("/t3")
public String test3(HttpServletRequest request){
request.setAttribute("address","江苏如皋");
request.setAttribute("price","888");
return "test";//视图名 默认是转发
}
1.2.4 使用HttpSession绑定数据
test.jsp页面将 EL表达式改了即可
后台:
//使用HttpSession绑定数据
@RequestMapping("/t4")//HttpServletRequest request或传HttpSession,HttpServletRequest里包含HttpSession
public String test4(HttpServletRequest request){
HttpSession session = request.getSession();
//使用session绑定数据
session.setAttribute("name","张三");
session.setAttribute("code","7799");
return "test";//视图名 默认是转发
}
1.2.5 使用ServletContext绑定数据
test.jsp页面将 EL表达式改了即可
后台:
//使用ServletContext绑定数据
@RequestMapping("/t5")
public String test5(HttpServletRequest request){
ServletContext context = request.getServletContext();
//使用context绑定数据
context.setAttribute("email","123456789@qq.com");
context.setAttribute("code","7788");
return "test";//视图名 默认是转发
}
1.2.6 使用HttpServletResponse响应对象
test.jsp页面将 EL表达式改了即可
后台:
//使用HttpServletResponse响应对象
@RequestMapping("/t6")
public void test6(HttpServletResponse response)throws IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.write("code:7788");
}
1.3 json
现在公司页面视图常常选用html,因为快,效率高。
html往往发送ajax请求,服务端返回的数据类型叫json,jsp也可以发送ajax请求。
优点:轻量级,结构清晰,解析速度快
JSON格式 如:
“{“name”:“zhangsan”,“age”:10}”
即"{key:value,key:value,key:value…}"
导入插件
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
后台:
//将一个对象转成json字符串输出
//在Springmvc中提供了一个注解@ResponseBody, 能够将字符串、对象、集合转成JSON字符串
@RequestMapping("/t7")
@ResponseBody
public User toJson1(){
//首先给User封装数据
User user = new User();
user.setId(1);
user.setUsername("张三");
user.setPwd("123456");
user.setEmail("123456789@qq.com");
//会以JSON格式输出{"id":1,"username":"张三","pwd":"123456","email":"123456789@qq.com"}
return user;
}