请求对象 request
获取请求消息
设置通用编码格式 ,get方法时,不需要
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取根目录的真实路径
String realPath = this.getServletContext().getRealPath("/");
//获取请求方式
String method = request.getMethod();//get或者post
//获取客户端和服务端的端口号
int remotePort = request.getRemotePort();
int localPort = request.getLocalPort();
System.out.println(remotePort+"-----"+localPort);//13868-----8090
获取编码格式
String encoding = request.getCharacterEncoding();
//获取项目名
String contextPath = request.getContextPath(); /MyServletDemo2
//获取协议号
String protocol = request.getProtocol(); //HTTP/1.1
//获取请求参数
String queryString = request.getQueryString(); //username=1234&password=1234(get方法的方式)
需要注意get和post方法获取请求参数的方式不同
String readLine = request.getReader().readLine(); (post方法)
获取统一资源标识符和同意资源定位符
String requestURI = request.getRequestURI(); //MyServletDemo2/demo5
StringBuffer requestURL = request.getRequestURL(); //http://localhost:8090/MyServletDemo2/demo5
request.getDateHeader(name);//获取日期头
1. request.getParameter(name); 通过请求参数的名称来获取值
// System.out.println(parameter);
2 .request.getParameterValues("hobby"); 通过请求参数的名称,来获取值的数组 一般用于复选框
for(String key:keySet){
String[] value = parameterMap.get(key);
for(String s :value){
System.out.println(key+"="+s);
}
3.request.getParameterMap(); 获取所有参数的map集合
Set<String> keySet = parameterMap.keySet();
for(String key:keySet){
String[] value = parameterMap.get(key);
for(String s :value){
System.out.println(key+"="+s);
}
}
4.request.getParameterNames(); 获取所有参数的名称 枚举 不常用 了解 //复选框的时候,name取不同给的,否则只能拿到第一个
while (names.hasMoreElements()) {
String nextElement = names.nextElement();
String parameter = request.getParameter(nextElement);
System.out.println(nextElement+"="+parameter);
}
5.请求转发:
转发的特点:
1.一次请求一次响应
2.地址栏不发生变化
3.只能访问内部站点资源
代码:
request.getRequestDispatcher("/myservlet2").forward(request, response);
6.域对象: 请求域的范围中共享数据
在一次请求的多个资源之间共享数据
request.setAttribute("name","zhangsan");
request.getAttribute("name");
request.removeAttribute("name");
什么时候使用重定向?什么时候使用转发?
1.如果需要在请求的多个资源中共享数据,则使用重定向
2.如一次性的数据存入请求域中
建议以/开头
服务器内部跳转路径 不需要加项目名称 request.getRequestDispatcher("/demo2").forward(request, response);
<img src="/MyServlet/mydemo4" id="img1"></img>
一般来说我们写相对路径
使用方法:重定向与请求转发使用
前后两个页面 有数据传递 用请求转发,没有则用重定向。
比如servlet查询了数据需要在页面显示,就用请求转发。
比如servlet做了update操作跳转到其他页面,就用重定向。