接收请求常用方法
1,方法
| getRequestURL() | 获取客户端发出的请求时的完整URL |
|---|---|
| getRequestURI() | 返回请求行中的资源名部分 |
| getQueryString() | 返回请求行中的参数部分 |
| getRemoteAddr() | 返回发出请求的客户机的IP地址 |
| getMethod() | 得到客户机请求方式 |
| getContextPath() |
2,示例
public void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {/*getRequestURL方法 -- 返回客户端发出请求完整URLgetRequestURI方法 -- 返回请求行中的资源名部分getQueryString方法 -- 返回请求行中的参数部分getRemoteAddr方法 -- 返回发出请求的客户机的IP地址getMethod -- 得到客户机请求方式getContextPath -- 获得当前web应用虚拟目录名称 -- 在写路径时不要将web应用的虚拟路径的名称写死, 应该在需要写web应用的名称的地方通过getContextPath方法动态获取*///urlStringBuffer requestURL = request.getRequestURL();System.out.println("url:"+requestURL);//统一完整路径名,包括协议,虚拟主机和资源,url:http://localhost:8080/javaweb/demo//uriString uri=request.getRequestURI();System.out.println("uri:"+uri);// 统一资源路径名 uri:/javaweb/demo//queryStringString qs=request.getQueryString();System.out.println("qs:"+qs);//显示访问连接?后面的参数//ipString addr = request.getRemoteAddr();//alt+shift+L,可以默认提示变量名System.out.println("addr:"+addr);//addr:127.0.0.1//methodString method = request.getMethod();System.out.println(method);//GET//contextpathString 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()获取数据。

