0x01 前言
在JSP中最重要的就是请求与响应了
Java将其封装为HttpServletRequest
与HttpServletResponse
对象
在JSP里面可以很方便的操作这两个对象,例如使用doGet()
或doPost()
这些方法,里面有两个参数
分别表示request(HttpServletRequest)
和 response(HttpServletResponse)
HttpServletRequest
对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法就可以获取到客户端请求的所有信息
HttpServletResponse
对象用于响应客户端的请求,通过这个对象提供的方法就可以处理服务端对客户端请求响应
0x02 HttpServletRequest常用方法
方法 | 说明 |
---|---|
getParameterNames() | 获取所有的参数名 |
getParameter(String name) | 通过参数名获取对应的值,如果有重复的名,则返回第一个的值 |
getParameterValues(String name) | 通过参数名获取指定参数的所有值,返回为String数组 |
getMethod() | 获取请求发送的方式,例如:GET/POST |
getQueryString() | 获取请求的URL地址中附带的参数 |
getRequestURL() | 获取请求的资源 |
getRequestURL().toString() | 获取请求的URL地址 |
getRemoteAddr() | 获取客户端的IP地址 |
getRemoteHost() | 获取客户端的名字 |
getRemotePort() | 获取客户端使用的网络端口号 |
getRemoteUser() | 获取发出请求的客户机的完整主机名 |
getLocalAddr() | 获取WEB服务器的IP地址 |
getLocalName() | 获取WEB服务器的主机名 |
getRequestURI() | 获取发出请求字符串的客户端地址 |
setAttribute(String name,Object) | 将数据作为request对象的一个属性存放到request对象中 |
getAttributeNames() | 获取request对象的所有属性名 返回为Enumeration |
getAttribute(String name) | 获取request对象的name属性的值 |
removeAttribute(String name) | 移除request对象的name属性 |
getCookies() | 获取客户端的所有Cookie对象 返回为Cookie数组 |
getSession() | 获取Session会话对象 |
getHeaderNames() | 获取所有request Header的属性名 返回为Enumeration |
getHeader(String name) | 获取指定名字的request Header的所有值 |
getHeaders(String name) | 获取指定名字的request Header的所有值 返回为Enumeration |
getContentLength() | 获取请求的Body的长度 |
getCharacterEncoding() | 获取请求中的字符编码方式 |
0x03 HttpServletResponse常用方法
方法 | 说明 |
---|---|
setContentType(String var1) | 设置当前响应的MIME类型 |
setCharacterEncoding(String var1) | 设置当前响应的字符编码 |
getWriter() | 获取响应打印流对象 |
getOutputStream() | 获取响应流对象 |
addCookie(Cookie var1) | 添加指定的Cookie加入到当前响应中 注:遇到同名,依然会进行新增操作 |
addHeader(String name, String value) | 添加指定的名称与值到响应的header头信息中 注:遇到同名,依然会进行新增操作 |
setHeader(String var1, String var2) | 设置指定的名称与值到响应的header头信息中 注:遇到同名,会进行修改操作 |
sendError(int var1, String var2) | 使用指定状态码与内容发送一个错误到客户端 |
sendRedirect(String var1) | 请求重定向 例如:responst.sendRedirect(“index.jsp”); 例如:responst.sendRedirect(“http://baidu.com“); |
setStatus(int var1) | 设置状态码,例如:302重定向 304控制缓存 |
addDateHeader(String var1, long var2) | 添加HTTP响应头中的日期,加入对应名称的日期头信息 注:遇到同名,依然会进行新增操作 |
setDateHeader(String var1, long var2) | 设置HTTP响应头中的日期,加入对应名称的日期头信息 注:遇到同名,依然会进行新增操作 |
0x04 小例子
写一个如何使用这个HttpServletRequest
与HttpServletResponse
对象,方法的例子
# 目录结构
├── src
│ └── main
│ └── webapp
│ └── com
│ └── Servlet
│ ├── ...
│ └── TestServlet2.java
│ └── WEB-INF
│ └── web.xml
│ └── index.jsp
package com.Servlet;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/TestServlet2")
public class TestServlet2 extends HttpServlet {
public TestServlet2() {
super();
}
/**
* @param request
* @param response
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String id = request.getParameter("id");
response.getWriter().write("id: " + id);
}
}
// 接着打开运行:http://127.0.0.1:8081/mavenJspTest_war/TestServlet2?id=1
// 返回结果
// id: 1
// request.getParameter 获取请求参数的值
// response.getWriter().write 输出内容到响应中
0x05 小结
大概知道HttpServletRequest
与HttpServletResponse
对象,哪一些方法是常用的即可
心里面有个底子,以后要进行代码审计了,就可以快速知道那些东西是前端可控的