在Servlet中request和response都是由tomcat给我们创建的。
相关类的继承关系
Servlet->HttpServletRequest->org.apache.catalina.connector.RequestFacade
request相关方法
相关方法 | 描述 |
---|---|
String getMethod() | 获取请求方式 :GET |
String getContextPath() | 获取虚拟目录:/project(tomcat中配置) |
String getServletPath() | 获取Servlet路径: /demo |
String getQueryString() | 获取get方式请求参数:key=value |
String getRequestURI() | 获得URI,/project/demo |
StringBuffer getRequestURL() | 获得URL,:http://localhost/project/demo |
String getProtocol() | 获取协议及版本:HTTP/1.1 |
String getRemoteAddr() | 获取客户机的IP地址: |
String getHeader(String name) | 获取请求头某参数的值 |
Enumeration getHeaderNames() | 获取请求头所有key |
BufferedReader getReader() | 获得请求体字符流 |
ServletInputStream getInputStream() | 获取请求体字节流 |
其他方法
方法 | 描述 |
---|---|
String getParameter(String name) | 根据参数名称获取参数值 username=wang&password=123 |
String[] getParameterValues(String name) | 常应用于复选框,checkedbox ,list=xx&list=yy |
Enumeration getParameterNames() | 获取所有请求的参数名称 |
Map<String,String[]> getParameterMap() | 获取所有参数的map集合 |
form表单中get和post方法传入的参数都是username=wang&password=123格式,在使用String getParameter(String name)等方法的时候doGet和doPost通用。
form的get方式,更像是帮助用户拼写url,如果懂的话可以直接写url。
request传入doGet或doPost
request对象是自动传入doGet和doPost参数里的,上面所介绍的方法都是在doGet和doPost方法里进行操作的
@WebServlet(name = "Servlet")
public class Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
中文乱码
通过get方式不会出现乱码
post方法因为tomcat以字节流读入,所以要设置request.setCharacterEncoding(“utf-8”);
请求转发
请求转发步骤:
1.获取转发器对象:RequestDispatcher getRequestDispatcher(String path)
2.向转发器转入request和response对象:forward(ServletRequest request, ServletResponse
请求转发的特点:
- 路径不归更改
- 只能在服务器内部转发
- 转发只有一次请求
转发中数据共享
共享数据由request携带
方法|描述
–|--
void setAttribute(String name,Object obj)|存储数据
Object getAttitude(String name)|通过键获取值
void removeAttribute(String name)|通过键移除键值对
例子
request.getRequestDispatcher("/demo").forward(request,response);