1.常用API
- 获取客户端IP:getRemoteAddr()
- 获取请求方式:getMethod()
- 获取请求头:getHeader(),getIntHeader(),getLongHeader()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("IP:"+req.getRemoteAddr());
System.out.println("method:"+req.getMethod());
String browser = req.getHeader("User-Agent");
if(browser.contains("Chrome")){
System.out.println("你使用的是谷歌浏览器。");
}else if(browser.contains("Mozilla")){
System.out.println("你使用的是火狐浏览器。");
}else if(browser.contains("Safari")){
System.out.println("你使用的是苹果浏览器。");
}
}
2.获取请求路径相关方法(http://localhost:8080/javaWeb/A?name=steven)
- 获取请求协议:getScheme()
- 获取服务器名称:getServerName()
- 获取服务器端口号:getServerPort()
- 获取项目名称:getContextPath()
- 获取Servlet名称:getServletPath()
- 获取请求参数字符串:getQueryString()
- 获取项目名称和Servlet名称:getRequestURI()
- 获取不包括请求参数的url:getRequestURL()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("获取请求协议:"+req.getScheme());
System.out.println("获取服务器名称:"+req.getServerName());
System.out.println("获取服务器端口号:"+req.getServerPort());
System.out.println("获取项目名称:"+req.getContextPath());
System.out.println("获取Servlet名称:"+req.getServletPath());
System.out.println("获取请求参数字符串:"+req.getQueryString());
System.out.println("获取项目名称和Servlet名称:"+req.getRequestURI());
System.out.println("获取不包括请求参数的url:"+req.getRequestURL());
}
3.使用Referer请求头完成防盗链
<a href="http://localhost:8080/javaWeb/A">A</a>
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String referer = req.getHeader("Referer");
if(referer.contains("localhost")){
System.out.println("该请求是本站发出的!");
}else{
System.out.println("该请求不是本站发出的!");
}
}
}
4.获取请求参数
- getParameter(String name)
- getParameterValues(String name)
5.请求转发(留头不留体)
当客户端请求Servlet时,Servlet不能完成请求处理,而是将请求转发给其他Servlet处理,这样的过程叫做请求转发。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("AAA");
resp.setHeader("aaa","AAA");
resp.getWriter().print("hello");
req.getRequestDispatcher("/B").forward(req,resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("BBB");
resp.getWriter().print("hello,world");
}
6.url编码
客户端采用url编码来避免服务器和客户端在传输参数的过程中造成中文字节的丢失,post请求默认使用url编码,get请求不使用url编码,tomcat会自动完成url的解码。
7.路径
- Servlet路径:url-pattern
- 转发:以“/”开头,是相对http://localhost:8080/javaWeb/的路径
- 重定向路径(客户端路径):相对当前主机http://localhost:8080/的路径,所以需要自己手动添加项目名,如response.sendRedirect("/javaWeb/Aservlet")
- ServletContext获取资源路径:相对当前项目目录,即当然index.jsp所在目录
- ClassLoader获取资源路径:相对classes目录
- Class获取资源路径:以“/”开头相对classes目录,不以“/”开头相对当前.class文件所在目录