request

request代表请求,所以我们可以通过该对象分别获得Http请求的请求行,请求头和请求体。
1.通过request获得请求行
获得客户端的请求方式:String getMethod()
获得请求的资源:String getRequestURI(所有的地址);StringBuffer getRequestURL();String getContextPath(web应用的名字);String getQueryString(get提交的url地址后的参数字符串);
获得请求方式
String method=request.getMethod();
System.out.println("method"+method);
获得请求的资源地址
String requestURI=request.getRequestURI();
StringBuffer requestURL=request.getRequestURL();
System.out.println("requstURI"+requestURI);
System.out.println("requestURL"+requestURL);
获得web应用的名称
String contextPath=request.getContextPath();
System.out.println("web应用"+contextPath);
地址后的参数的字符串
String queryString=request.getQueryString();
System.out.println(queryString);
注意:request获得客户机(客户端)的一些信息,request.getRemoteAddr()获得客户端ip地址
获得客户机的信息---获得访问这的ip地址
String remoteAddr=request.getRemoteAddr();

System.out.println(remoteAddr);

2.通过request获得请求头
long getDateHeader(String name);
String getHeader(String name);
Enumeration getHeaderNamers();
Enumeration getHeaders(String name);
int getIntHeader(String name);
referer头的作用:执行该此访问的来源,做防盗链

<body>
<a href="/WEB/referer">访问header资源</a>
	<form action="/WEB/headerServlet" method="post">
		<input type="text" name="username"><br/>
		<input type="password" name="password"><br/>
		<input type="submit" value="提交"><br/>
	</form>
</body>
news.html
<body>
	<a href="/WEB/referer">奥运会金牌100块</a>
</body>
RefererServelt.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//对该新闻的来源进行判断
		String header=request.getHeader("referer");
		if(header!=null&&header.startsWith("http://localhost")){//指定域名,从该域名访问的可以看新闻
			//是从我自己的网站跳转过去的 可以看新闻
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().write("中国确实已经拿到100块金牌");
		}else{
			response.getWriter().write("你是盗版者,可耻");
		}
	}
3.通过request获得请求体
请求体中的内容是通过post提交的请求参数,格式是:
username=zhangsan&password=123&hobby=football;
以上面参数为例,通过以下方法获得请求参数
String getParameter(String name);
String[] getParameterValues(String name);
Enumeration getParameterNames();
Map getParameterMap();
注意:get请求方式的请求参数 上述的方法一样可以可以获得

<form action="/WEB/content" method="post">
		<input type="text" name="username"><br/>
		<input type="password" name="password"><br/>
		<input type="checkbox" name="hobby" value="zq">足球
		<input type="checkbox" name="hobby" value="pq">排球
		<input type="checkbox" name="hobby" value="ppq">乒乓球
		<input type="submit" value="提交"><br/>
</form>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
		//获得单个表单值
		String username=request.getParameter("username");
		System.out.println(username);
		String password=request.getParameter("password");
		System.out.println(password);
		//获得多个表单值
		String[] hobbys=request.getParameterValues("hobby");
		for(String hobby:hobbys){
			System.out.println(hobby);
		}
		//获得所有的请求参数的名称
		Enumeration<String> parameterNames=request.getParameterNames();
		while(parameterNames.hasMoreElements()){
			System.out.println(parameterNames.nextElement());
		}
		System.out.println("---------------");
		//获得所有的参数封装到map<String,String[]>
		Map<String,String[]> parameterMap=request.getParameterMap();
		for(Map.Entry<String,String[]>entry:parameterMap.entrySet()){
			System.out.println(entry.getKey());
			for(String str:entry.getValue()){
				System.out.println(str);
			}
			System.out.println("--------------");
		}
	}

4.request的其他功能
(1)request是一个域对象
request对象也是一个存储数据的区域对象,setAttribute(String name,Object o),getAttribute(String name),removeAttribute(String name);
(2)request完成请求转发
获得请求转发器:RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发forward(ServletRequst request,ServletResponse response);
向request中存储对象
request.setAttribute("name","tom");
servlet1将请求转发给servlet2
RequestDispatcher dispatcher=request.getRequestDispatcher("/servlet2");
执行转发的方法
dispatcher.forward(request, response);
5.servletContext域与Request域的生命周期比较?
ServletContext:
创建:服务器启动
销毁:服务器关闭
域的作用范围:整个web应用
Request:
创建:访问时创建
销毁:响应结束
域的作用范围:一次请求中
6.转发与重定向的区别?
1)重定向两次请求,转发一次请求
2)重定向地址栏改变,转发地址不变
3)重定向可以访问外部网站,转发只能访问内部资源
4)转发的性能要优于重定向
7.客户端地址与服务器端地址的写法?
客户端地址
是客户端访问服务器的地址,服务器外部地址,特点:写上web应用的名称
直接输入地址:
重定向地址:
服务器端地址
服务器内部资源的跳转的地址,特点:不需要写web应用的名称
转发:
7.表单提交编码问题解决
post:
request.setCharacterEncoding("utf-8");
get:
String username=request.getParameter("username");
username=new String(username.getBytes("iso8859-1"),"utf-8");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值