20111019

来源:互联网 发布:男生自慰肛门知乎 编辑:程序博客网 时间:2024/05/29 15:54
 

 深入体验Java Web开发内幕

一..获取请求行的相关信息

1.HTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:

       GET /it315/servlet/RequestURI?param1=a&param2=b HTTP/1.1

2.getMethod方法返回HTTP请求消息中的请求方式。

3.getRequestURI方法返回请求行中的资源名部分。

4.getQueryString 方法返回请求行中的参数部分。

5.getProtocol方法返回请求行中的协议名和版本。

6.getContextPath方法返回请求资源所属于的WEB应用程序的路径。

7.getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。

8.getPathTranslated方法返回URL中的额外路径信息所对应的资源的真实路径。

9.getServletPath方法返回Servlet的名称或Servlet所映射的路径。

二..获取网络连接信息

1.     getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。 (*)

2.getRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.it315.org”这种格式。

3.getRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。

4.getLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。

5.getLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。

6.getLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。

7.getServerName方法返回当前请求所指向的主机名。

8.getServerPort方法返回当前请求所连接的服务器端口号。

9.getScheme方法返回请求的协议名,例如http、https或ftp。

10.getRequestURL方法返回客户端发出请求时的完整URL。  

三..获取请求头信息

1.getHeader方法

2.getHeaders方法

3.getHeaderNames方法

4.getIntHeader方法

5.getDateHeader方法

6.getContentType方法

7.getContentLength方法

8.getCharacterEncoding方法

四.. 获取所有请求头的编程实例

 

Enumeration headerNames = request.getHeaderNames();

while(headerNames.hasMoreElements())

{

String headerName = (String)headerNames.nextElement();

out.print(headerName + " : " + request.getHeader(headerName) + "<br>");

/*如果要考虑同一个请求头名可能出现多次,

那么应该用下面的代码段代替上面一行程序代码*/

/*Enumeration values = request.getHeaders(headerName);

while(values.hasMoreElements())

 {

        out.print(headerName + " : " + (String)values.nextElement() + "<br>");

}*/

 

 

 

地址栏中:http://localhost:8080/demo/servlet/test

请求消息:不包含消息头字段Referer

 

 

 

MyHtml.html

<a href="http://localhost:8080/demo/servlet/tes向

点击超链接,是向web服务器第二次发送了一个servlet请求

请求消息:包含Referer头字段.超链接所在的html页面的url地址

Referer:http://localhost:8080/demo/MyHtml.html

 

 

 

servlet:获取请求消息封装的Referer头字段

如果Referer字段的值为空:

如果不为空,

"http://"+request.getServerName()

http://localhost

 

五.利用Referer请求头阻止“盗链”

String referrer = request.getHeader("referer");

String sitePart = "http://" + request.getServerName();

if(referrer!=null && referrer.startsWith(sitePart))

{

       //处理正当的下载请求,这里只进行示意

       out.println("dealing download ...");

}

else

{

       //非法下载请求跳转到本站的下载说明页

       RequestDispatcher rd = request.getRequestDispatcher("/down.html");

       rd.forward(request,response);

}

 

六..利用Referer请求头
隐藏JavaScript源码

String referrer = request.getHeader("referer");

String sitePart = "http://" + request.getServerName();

if(referrer!=null && referrer.startsWith(sitePart))

{

//向客户端输出javascript的document.write(...)语句

out.println(

        "document.write('假设这是很多重要的Javascript代码的执行结果');");

}

浏览器传递参数信息的细节

 

一..使用GET方式传递参数

1.在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。

2.如果网页中的<form>表单元素的method属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。

3.使用GET请求方式给WEB服务器传递参数的格式:

       http://www.it315.org/counter.jsp?name=zhangsan&password=123

4.使用GET方式传送的数据量一般限制在1KB以下。

留心 :不要使用GET方式提交包含口令的FORM表单

二..使用POST方式传递参数

1.POST请求方式主要用于向WEB服务器端程序提交FORM表单中的数据。

2.POST方式将各个表单字段元素及其数据作为HTTP消息的实体内容发送给WEB服务器,传送的数据量要比使用GET方式传送的数据量大得多。 

3.<form>表单元素的enctype属性用于指定浏览器使用哪种编码方法将表单中的数据传送给WEB服务器,该属性可以有两种取值:

application/x-www-form-urlencoded

multipart/form-data

3      POST请求消息的格式:

POST /counter.jsp HTTP/1.1

referer: http://localhost:8080/Register.html

content-type: application/x-www-form-urlencoded

host: localhost:8080

content-length: 43

name=zhangsan&password=123

三..提交、重置、普通按钮如何传送参数

总结:

①     在一个FORM表单中可以有多个提交按钮,单击任何一个提交按钮都可以提交表单,只有被单击的提交按钮的名称和值才被作为参数传递,其它提交按钮的信息不会作为参数传递。

②     表单中的普通按钮与重置按钮的名称和值不会作为参数传递。

③     没有设置name属性的表单字段元素的信息不会作为参数传递。

 

四..使用Javascript防止重复提交表单

<script>

var isCommitted = false;

function checkPost()

{

       if(!isCommitted)

       {

              isCommitted = true;

              return true;

       }

       else

       {

              alert("不能重复提交表单");

              return false;

       }

}

</script>

<form action="servlet/RepeateFormServlet" method="POST" onsubmit="return checkPost()">...

五..单选列表框的处理经验

前台的网页代码:

<select name="subject">

    <option value="">--不选--</potion>

    <option value="0">java</option>

    <option value="1">c++</option>

    <option value="2">jsp</option>

</select>

 

服务器端的程序处理代码:

String subject = request.getParameter ("subject");

//如果没有选择或是选择了“—不选--”项

if(subject == null || "".equals(subject))

{

       //这里是用户没有选择时的处理语句

}

else

{

       //这里是用户进行了选择时的处理语句

}

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击