1.复习servlet(重要)
客户端发请求到服务器:请求地址,请求头(例子见图),请求体(请求报文)
网络传输中的数据类型:(可按以下步骤查看)
(video音频文件,image/bmg图片文件....)
但主要的就最上面图里的三种(浏览器到服务器的数据类型):
①.application/x-www-form-urlencoded
(k=v的参数字符串,eg:见图。对应请求头:content_type:application/x-www-form-urlencoded)
②.application/json
(json格式字符串,eg:见图。)
③.multipart/form-data
(byte流或者说字节数组或者说文件数据,eg:见图。)
请求方式get/post。区别见图。
服务器回传浏览器的数据:五花八门
包,类如下:
代码如下:
public class Sysuser {
private String uname;
private String upwd;
private Integer id;
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
第一种请求类型:
//url映射:把一个url字符串对应到一个httpServlet对象中.
@WebServlet("/user")
public class UserController extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest)req; //请求对象,封装的是客户端数据输入流
HttpServletResponse response = (HttpServletResponse)res; //响应对象
//1.如果请求头content_type:application/x-www-form-urlencoded的话
String uname = request.getParameter("uname");
String upwd = request.getParameter("upwd");
Sysuser u = new Sysuser();
u.setUname(upwd);
u.setUpwd(upwd);
System.out.println(u);
}
}
启动服务器,打开postman。
(用application/x-www-form-urlencoded,tomcat自动读取,按照&分割,放到request里的map里存起来,getParameter在map里根据key取value)
第二种请求类型:
//url映射:把一个url字符串对应到一个httpServlet对象中.
@WebServlet("/user")
public class UserController extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest)req; //请求对象,封装的是客户端数据输入流
HttpServletResponse response = (HttpServletResponse)res; //响应对象
//2.如果请求头content_type:application/json的话
ServletInputStream in = request.getInputStream();
byte[] bytes = new byte[2048];
int r;
StringBuilder s = new StringBuilder();
while((r=in.read(bytes))!=-1){
s.append(new String(bytes,0,r));
}
String s1 = s.toString();
Sysuser sysuser = JSON.parseObject(s1, Sysuser.class);
System.out.println(s1);
}
}
(拿到请求体里的流,用原生方式读取)
(发送json形式的,tomcat不会帮助解析,自己读流解析)
第三种:
@WebServlet("/user")
@MultipartConfig //表示此serlvet可以解析请求头content_type:muilpart/form-data的请求数据
public class UserController extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest)req; //请求对象,封装的是客户端数据输入流
HttpServletResponse response = (HttpServletResponse)res; //响应对象
//3,如果请求头content_type:multipart/form-data的话
Part uimg = request.getPart("uimg");
String submittedFileName = uimg.getSubmittedFileName(); //文件名
String name = uimg.getName();
InputStream inputStream = uimg.getInputStream(); //文件内容流
String target = "D:/"+submittedFileName;
OutputStream out = new FileOutputStream(target);
byte[] bytes= new byte[2048];
int r;
while((r=inputStream.read(bytes))!=-1){ //从流里读数据到byte数组
out.write(bytes,0,r); //将数组数据写出去
}
out.flush();
out.close();
}
}
(不用读流得到字节数组那样,文件数据字节数组特殊,不全是文件内容,比如:0-100描述后面101-200,200-end是文件内容 101-200表示文件名,文件大小;)
假如传个人头像
服务器返回给客户端的内容:
状态行,响应头,响应体。
服务器到浏览器的数据类型:
常见的(见图。text/html...)
返回数据的代码:
若为text/html数据类型:(同步里使用)
(postman不能渲染,需要用浏览器)
若为text/plain,同理。
若为application/json,如下(异步里才用)
PrintWriter writer = response.getWriter();
response.setContentType("application/json;charset=utf-8");
String str = "{'uname':'fyt'}";
writer.print(str);
writer.flush();
writer.close();
同步:服务器返回给客户端的永远是页面。发给服务器的是数据,返回的是页面。
异步:只把操作以后的json结果返回给客户端。来回传递的只有数据。
springmvc
2.springmvc作用
springmvc就是对原生servlet的封装,简化获取不同类型参数的代码,简化返回数据的代码,提高开发效率.
servlet一个url是映射到一个类上,一个类只能处理一个业务.
3.快速入门
springmvc是spring框架中的一个小模块.
①.需要添加的jar包:
-
添加spring的核心包+一个日志包
-
切面相关包
-
测试整合包
-
添加spring-web;spring-webmvc两个包
-
添加jackson组件的三个包.此json组件是springmvc默认支持的.不需要进行配置直接生效(若用fastjson等还要配置)
②.创建springmvc.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/co