接收请求常用方法
1,方法
getRequestURL() | 获取客户端发出的请求时的完整URL |
---|---|
getRequestURI() | 返回请求行中的资源名部分 |
getQueryString() | 返回请求行中的参数部分 |
getRemoteAddr() | 返回发出请求的客户机的IP地址 |
getMethod() | 得到客户机请求方式 |
getContextPath() |
2,示例
public void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
/*getRequestURL方法 -- 返回客户端发出请求完整URL
getRequestURI方法 -- 返回请求行中的资源名部分
getQueryString方法 -- 返回请求行中的参数部分
getRemoteAddr方法 -- 返回发出请求的客户机的IP地址
getMethod -- 得到客户机请求方式
getContextPath -- 获得当前web应用虚拟目录名称 -- 在写路径时不要将web应用的虚拟路径的名称写死, 应该在需要写web应用的名称的地方通过getContextPath方法动态获取*/
//url
StringBuffer requestURL = request.getRequestURL();
System.out.println("url:"+requestURL);//统一完整路径名,包括协议,虚拟主机和资源,url:http://localhost:8080/javaweb/demo
//uri
String uri=request.getRequestURI();
System.out.println("uri:"+uri);// 统一资源路径名 uri:/javaweb/demo
//queryString
String qs=request.getQueryString();
System.out.println("qs:"+qs);//显示访问连接?后面的参数
//ip
String addr = request.getRemoteAddr();//alt+shift+L,可以默认提示变量名
System.out.println("addr:"+addr);//addr:127.0.0.1
//method
String method = request.getMethod();
System.out.println(method);//GET
//contextpath
String contextPath = request.getContextPath();
System.out.println(contextPath);//javaweb 会动态变化,万分注意!
}
请求转发
请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的URL不会改变,得到相应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。可以达到多个资源协同响应的效果。req.getRequestDispatcher(url).forward(req,resp);
特点:
1,浏览器地址栏不变
2,服务器行为
3,从始至终只有一个请求
4,数据可以共享
可以让请求从服务端跳转到客户端(或跳转到指定的servlet)
服务端行为
注意:
1,当servlet页面转发到jsp或html或servlet页面时,浏览器地址栏不会变,但网页显示相对应的内容。
注意
请求转发只能转发到当前的项目。
例如;从iavaweb项目的zf1实例转发到javaweb项目的zf2实例
zf1:本来写的是req.getRequestDispatcher("zf2").forward(req,resp);
改成如下:
浏览器结果是:
直接是把路径跟在了项目的后面。所以要想把数据传送到不同项目的实例中用重定向进行get传值。但这样是使用了两次请求。
request作用域
通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效。
//设置域对象内容
request.setAttribute(String name,String value);
//获取域对象内容
request.getAttribute("String name");
//删除域对象内容
request.removeAttribute("String name");
request域对象中的数据在一次请求中有效,则经过请求转发,request域中的数据依然存在,则在请求转发的过程中可以来传输共享数据。
可以配合着去请求转发,在原来数据的基础上添加新的数据。
注意:
1,通过post或get请求传输过来的数据只能用request.getParameter(Strting name);获取数据
2,而使用request.setAttribute()添加的数据,只能使用request.getAttribute()获取数据。