0x01 前言

在JSP中最重要的就是请求与响应了
Java将其封装为HttpServletRequestHttpServletResponse对象
在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 小例子

写一个如何使用这个HttpServletRequestHttpServletResponse对象,方法的例子

  1. # 目录结构
  2. ├── src
  3. └── main
  4. └── webapp
  5. └── com
  6. └── Servlet
  7. ├── ...
  8. └── TestServlet2.java
  9. └── WEB-INF
  10. └── web.xml
  11. └── index.jsp
  1. package com.Servlet;
  2. import javax.servlet.annotation.WebServlet;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. @WebServlet("/TestServlet2")
  8. public class TestServlet2 extends HttpServlet {
  9. public TestServlet2() {
  10. super();
  11. }
  12. /**
  13. * @param request
  14. * @param response
  15. * @throws IOException
  16. */
  17. @Override
  18. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
  19. String id = request.getParameter("id");
  20. response.getWriter().write("id: " + id);
  21. }
  22. }
  23. // 接着打开运行:http://127.0.0.1:8081/mavenJspTest_war/TestServlet2?id=1
  24. // 返回结果
  25. // id: 1
  26. // request.getParameter 获取请求参数的值
  27. // response.getWriter().write 输出内容到响应中

0x05 小结

大概知道HttpServletRequestHttpServletResponse对象,哪一些方法是常用的即可
心里面有个底子,以后要进行代码审计了,就可以快速知道那些东西是前端可控的