1、HttpServletRequest
(1)获得请求行:
method:getMethod();POST/GET;
URI:getRequestURI();可以是网址可以是相对地址也可以是绝对地址;
URL:getRequestURL();只能是网址;
重要:WEB应用名称:getContextPath();应用于重定向;
url后面的字符串:只适用于get方式;post方式没有;getQueryString();
IP:可以获取IPv4或者是IPv6;getRemoteAddr();
login.jsp用户名:密码:
packagecom.oracle.web;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class LineServlet extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
response.setContentType("text/html;charset=UTF-8");//获取请求方式
String method =request.getMethod();//获取请求资源
String URI =request.getRequestURI();
StringBuffer URL=request.getRequestURL();//获取WEB应用名称
String webname =request.getContextPath();//获取url后面的字符串(get方式)
String str =request.getQueryString();//获取客户端的请求ip
String IP =request.getRemoteAddr();
System.out.println("请求方式"+method);
System.out.println("URI"+URI);
System.out.println("URL"+URL);
System.out.println("WEB名称"+webname);
System.out.println("url后面的字符串"+str);
System.out.println("请求IP"+IP);
response.getWriter().write("hello world!");
}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
doGet(request, response);
}
}
(2)获得请求头:
重要:getHeader("referer");用于做防盗链
packagecom.oracle.web;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class ReferServlet extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
response.setContentType("text/html;charset=UTF-8");//获取请求头中的referer
String referer = request.getHeader("referer");if(referer !=null&&referer.startsWith("http://localhost")){
response.getWriter().write("hello world!");
}else{
response.getWriter().write("你好世界");
}
}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
doGet(request, response);
}
}
但是:
(3)获得请求体:
获得单个参数:getParameter("name");
获得多个参数:Map getParameterMap();键值对
Insert title here用户名:密码:
爱好:足球乒乓球篮球羽毛球
packagecom.oracle.web;importjava.io.IOException;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class BodyServlet extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//get方式解决中文乱码
String username = request.getParameter("username");
String password= request.getParameter("password");
System.out.println(username+"..."+password);//获取表单所有元素的值//hobby,{zq,ppq,lq,ymq}
Map map =request.getParameterMap();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("hello world!");/*Set set = map.keySet();//hobby只有一个hobby
//增强for(变量类型:容器标识)
for (String s : set) {
String key = s;
String[] value = map.get(key);
for(String s1:value){
System.out.println(s+".."+s1);
}
}*/Set> set =map.entrySet();for(Entrys:set){for(String str:s.getValue()){
System.out.println(s.getKey()+"..."+str);
}
}
}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
doGet(request, response);
}
}
(4)中文乱码:
解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");
解决get,post提交的方式的乱码:只能作用一个,用一个写一个;
parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");
(5)request是一个域对象,作用范围:
一次请求中;访问时创建,响应结束时request销毁;
(6)请求转发:
getRequestDispatcher("/Servlet01")不用写项目名字;
requestDispathcer.forward(ServletRequest request, ServletResponse response);
packagecom.oracle.web01;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet01 extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setAttribute("name", "西红猫");//请求转发
request.getRequestDispatcher("/Servlet02").forward(request, response);
response.getWriter().write("你好世界!");
}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
doGet(request, response);
}
}
packagecom.oracle.web01;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet02 extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
String name= (String)request.getAttribute("name");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("hello world!"+name);
}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
doGet(request, response);
}
}
当改变时:
packagecom.oracle.web01;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet01 extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setAttribute("name", "西红猫");//请求转发
/*request.getRequestDispatcher("/Servlet02").forward(request, response);*/response.getWriter().write("你好世界!");
}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
doGet(request, response);
}
}
(7)重定向和请求转发区别:
重定向两次请求,转发一次请求;
重定向地址栏地址变化,转发地址不变;
重定向可以访问外部网站,转发只能访问内部资源
转发的性能要优于重定向;