request对象--设置请求信息
Get /day14/demo1/name=zhangsan HTTP/1.1
String getMethod()
String getContextPath()
String getServletPath()
String getQueryString()
String getRequestURI() /day14/demo1
StringBuffer getRequestURL() http//localhost/day14/demo1
String getProtocol()
String getRemoteAddr()
-----------------------------------------------------------------------------------
注意:(URI范围比URL大)
URL:统一资源定位符 http//localhost/day14/demo1
URI:统一资源标识符 /day14/demo1
-----------------------------------------------------------------------------------
//通过请求头的名称获取请求头的值
String getHeader(String name)
//获取所有的请求名称
Enumeration
请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
步骤
//获取字符输入流,只能操作字符数据
BufferedReader getReader()
//获取字节输入流,可以操作所有类型数据
ServletInputStream getInputStream()
注意request在获取请求数据的中文乱码问题在使用request或者response时在编码前加上两句
///解决中文乱码问题
request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
(不论get还是post请求方式都可以使用下列方法获取请求参数)
//1,根据参数名获取参数值
String getParameter(String name)
-------------------------------------------------------------------------
//2,根据参数名获取参数值得数组(多用于复选框)
String[] getParameterValues(String name)
例如:
Jsp表现层
<form action="LoginServlet" method="get">
<input type="checkbox" name="box" value="str">
<input type="checkbox" name="box" value="int">
<input type="checkbox" name="box" value="char">
<input type="submit" value="查询">
form>
Servlet控制层
String[] box=request.getParameterValues("box");
for (String string : box) {
System.out.println(string);
}
-------------------------------------------------------------------------
//3,获取所有请求的参数名称
Enumeration
例如:
//根据参数名称获取参数值数组
Enumeration
while(gpn.hasMoreElements()){
//获取参数name
String name=gpn.nextElement();
//获取参数value
String value=request.getParameter(name);
}
----------------------------------------------------------------------
//4,获取所有参数返回到map集合
Map
//遍历
Set
for(String name:keyset){
//获取键获取值
String[] value=parameterMap.get(name);
System.out.println(name);
for (String string : value) {
System.out.println(value);
}
}
-----------------------------------------------------------------------
我们程序设计要求功能尽量的单一尽量的细化,不要讲功能都写在一个类或者方法
里面,导致后期难以维护,不利于分工协作。可以通过数据转发给各个servlet分布式操作
【1】通过request对象获取请求转发器的对象:RequestDispatcher getRequestDispatcher(String path)
【2】使用RequestDispatcher 对象进行转发:forward(HttpServletRequest request,HttpServletResponse response);
//将数据转发到指定的资源路径url
request.getRequestDispatcher("url").forward(request, response);
【1】浏览器地址栏不发生改变
【2】只能转发到当前服务器内部资源中
【3】转发是一次请求
-----------------------------------------------------------------------------------
域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求,一般用于请求转发的多个资源中共享数据(虽然只请求一次,但是只要在其范围内共享数据)
//通过键值对存储数据
【1】void setAttribute(String name, Object obj);
//通过键获取值
【2】Object getAttribute(String name);
//通过键移除键值对
【3】void removeAttribute(String name);