Request 请求头
Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()) {
String s1 = headerNames.nextElement();
System.out.println(s1 + " == " + req.getHeaders(s1).nextElement());
System.out.println(" ");
}
01 Request 通用方式获取请求参数
Map<String,String[]> getParameterMap(); //获取所有参数Map集合
String[] getParameterValues(String name); //根据名称获取参数值(数组)
String getParameter(String name); //根据名称获取参数值(单个值)
实例
//获取请求参数
String method = this.getMethod();
if("Get".equals(method)){
//Get方式获取请求参数
params = this.getQueryString();
}else if("Post".equals(method)){
//Post方式获取请求参数
BufferedReader reader = this.getReader();
params = reader.readLine();
}
02 测试工具:postman、Talend API Tester
一般的浏览器只能测试Get方法,无法测试Post方法
java接受数据一般用
req.getParameter("name");
封装对象:
- 如果前端传递了无数个参数,我们会对数据进行封装,应该用一个大容器去接受:JavaBean
- JavaBean:一般情况下如果这些数据内容相似,属于一个对象
- 以后,前端和后端发生交互的时候默认全部用对象
03 传递对象
如果想要将对象转换为json对象{"key":"value"}的形式,则需要进行封装,Java没有自己的api,所以会引用第三方jar包
前后端数据传递都通过json对象进行
04 前后端相互交互:
-
乱码处理
-
得到前端的数据
//Java得到前端的数据: String name = req.getParameter("username"); String pass = req.getParameter("password"); //Java传递数据 req.setAttribute("username",name); req.setAttribute("password",pass);
<%--前端发送数据--%> <input type="text" name="username"> <input type="password" name="password"> <%--前端接受数据--%> 用户名:${username} 密码:${password}
-
将数据封装到对象
-
进行逻辑处理(service层)
-
得到逻辑处理结果
-
将最终结果以json对象传递给调用者
Java里面最好不要出现魔法值:容易经常改变的值:
推荐使用枚举
05 请求转发
-
请求转发(forward):一种在服务器内部的资源跳转方式
-
实现方式
req.getRequestDispatcher("资源B路径").forward(req,resp);
-
请求转发资源间共享数据:使用Request对象
void setAttribute(String name,Object o); //存储数据到request域中 Object getAttribute(String name); //根据key,获取值 void removeAttribute(String name); //根据key,删除该键值对
如果只是单纯跳转页面,不要使用请求转发,因为请求转发需要传递数据
06 页面转发涉及到的作用域
servlet三大作用域:
-
request
数据只能在转发页面才能取到
-
session
req.getSession()
数据可以在同一个浏览器任意界面取到
-
application
req.getServletContext()
数据可以在任何页面取到,可以跨浏览器
三种域都可以视为 {key,value} 对象
07 req对属性进行设置
req.setAttribute("name",name);
req.getAttribute("name");
req.removeAttribute("name");
08 请求转发特点
- 浏览器地址栏不发生变化
- 只能转发到当前服务器的内部资源
- 一次请求,可以在转发的资源间使用request共享数据
response
01 response完成重定向
resp.sendRedirect("/success.jsp");
02 通过Response对象获取字符输入流
//通过Response对象获取字符输入流
PrintWriter writer = resp.getWriter();
//写数据
writer.write("aaa");
03 Response响应字节数据
//通过Response对象获取字节输出流
ServletOutputStream outputStream = resp.getOutputStream();
//写数据
outputStream.write(字节数据);
IOUtils工具类使用
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
IOUtils.copy(输入流,输出流)