杭州手机网站制作公司哪家好/seo引擎优化服务
Request原理
1、request对象和responset对象是由服务器创建的,我们来使用他们。
2、request对象用来获取请求消息,response对象用来设置响应消息。
Request功能
获取请求消息数据
-
获取请求行数据
请求行格式:
GET /learning/demo1?name=zhangsan HTTP/1.1
方法:1、获取请求方式 String getMethod()2、(**)获取虚拟目录String getContextPath()3、获取Servlet路径(资源路径)String getServletPath()4、获取get方式请求参数String getQueryString()5、(***)获取请求uri及urlString getRequestURI() /learning/demo1StringBuffer getRequestURI() http:localhost/learning/demo1URI:统一资源定位符,范围大,例如共和国URL:统一资源标识符,范围小,例如 中华人民共和国6、获取协议及版本 HTTP/1.1String getProtocol()7、获取客户机的IP地址String getRemoteAddr()
@WebServlet( "/requestDemo1")
public class RequestDemo1 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1 获取请求方式 GETString method = request.getMethod();System.out.println(method);//2获取虚拟目录String contextPath = request.getContextPath();System.out.println(contextPath);//3 获取资源目录/requestDemo1String servletPath = request.getServletPath();System.out.println(servletPath);//4 获取get请求参数name=lisiString queryString = request.getQueryString();System.out.println(queryString);//5 获取uri/requestDemo1String requestURI = request.getRequestURI();StringBuffer requestURL = request.getRequestURL();System.out.println(requestURI);System.out.println(requestURL);//http://localhost:8080/requestDemo1//6 获取主机 0:0:0:0:0:0:0:1String remoteAddr = request.getRemoteAddr();System.out.println(remoteAddr);//7 获取协议 HTTP/1.1String protocol = request.getProtocol();System.out.println(protocol);}
}
- 获取请求头
方法:
(1)获取请求头的所有name:
Enumeration getHeaderNames();
(2)获取请求头的值
String getHeader(name);
@WebServlet("/request/RequestDemo2")
public class RequestDemo2 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求头Enumeration<String> headerNames = request.getHeaderNames();//遍历while(headerNames.hasMoreElements()){//System.out.println(headerNames.nextElement());String name = headerNames.nextElement();//(***)获取请求头的值String header = request.getHeader(name);System.out.println(name+":"+header);}}
}
(3)根据请求头user-agent的值解决不同浏览器的兼容
@WebServlet("/request/RequestDemo3")
public class RequestDemo3 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String header = request.getHeader("user-agent");if(header.contains("Firefox"))System.out.println("火狐来了");else if(header.contains("IE"))System.out.println("ie 来了");}
}
- 获取请求体
通过post方式的才有请求体
步骤:1、获取流对象
字节输入流getInputStream()
字符输入流getReader()
2、再从流对象中拿数据
@WebServlet( "/RequestDemo5")
public class RequestDemo5 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求消息体-消息参数BufferedReader br = request.getReader();//读取数据,从br里把数据读取出来String line = null;while((line=br.readLine())!=null){System.out.println(line);//username=lll&password=123}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
Request其他功能
1、获取请求参数通用方式:不论get还是post都可以
(1)String getParamter(String name)
(2)String[] getParamterValues(String name)
(3)getParamterNames()
(4)Map<String,String[]> getParamterMap
(5) tip:获取参数前,设置编码
request.setCharacterEncoding(“utf-8”);
2、请求转发:一种在服务器内部的url跳转方式
(1)步骤
①通过request对象获取请求转发器对象:
②使用 进行转发:forward (*****)
request.getRequestDispatcher(转发资源路径).forward(request,response);
(2)特点
①浏览器地址栏路径不发生变化
②只能转发到当前服务器内部资源中
③转发是一次请求
3、共享数据
*域对象:一个有作用范围的对象,在范围内共享数据
request域:代表一次请求的范围,用于请求转发的多个资源中共享数据
*方法:
(1)setAttribute():存储数据
(2)getAttribute():获取
(3)removeAttribute():移除
4、获取ServletContext
ServletContext servletContext = request.getServletContext();
//获取请求参数通用方式
@WebServlet( "/RequestDemo6")
public class RequestDemo6 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");String username = request.getParameter("username");
// System.out.println("post");
// System.out.println(username);String[] hobbies = request.getParameterValues("hobby");
// for (String hobby : hobbies) {
// System.out.println(hobby);
// }Enumeration<String> parameterNames = request.getParameterNames();
// while(parameterNames.hasMoreElements()){
// String name = parameterNames.nextElement();
// System.out.println(name);
// String parameter = request.getParameter(name);
// System.out.println(name+":"+parameter);
// }Map<String, String[]> parameterMap = request.getParameterMap();//遍历entrySet和keySet两种方法Set<String> keySet = parameterMap.keySet();Iterator<String> iterator = keySet.iterator();while(iterator.hasNext()){String it = iterator.next();System.out.println(it);String[] values = parameterMap.get(it);for (String value : values) {System.out.println(value);}System.out.println("------");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
//请求转发和共享数据
@WebServlet( "/RequestDemo7")
public class RequestDemo7 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("demo7 comes");//存储数据到request域中request.setAttribute("msg","hello");//转发到demo8资源request.getRequestDispatcher("/RequestDemo8").forward(request,response);}
}