2011-10-19课堂笔记

来源:互联网 发布:多益网络线上笔试题 编辑:程序博客网 时间:2024/06/06 09:26
 

 深入体验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

{

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

}

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 卵泡已经长到28x19mm怎么办 多囊卵巢卵泡长不大怎么办 优势卵泡19不排怎么办 多囊卵泡不排卵怎么办 卵泡两天长2mm怎么办 子宫小43*38*26怎么办 优势卵泡打破卵针后并不破怎么办 ktv禁止自带酒水怎么办 记名西瓜卡丢了怎么办 日本电车卡丢了怎么办 网贷暂时没钱还怎么办 华泰倒闭了汽车怎么办 猫躲起来找不到了怎么办 狗生病了不吃饭怎么办 猫猫托运后害怕怎么办 新来的猫害怕怎么办 升工资老板不公平对待怎么办 自酿啤酒苦味重怎么办 自酿啤酒酸味重怎么办 微信电话费充错了怎么办 支付宝电话费充错了怎么办 在淘宝上充错电话费了怎么办 话费1000充错了怎么办 东西掉在地铁上怎么办 高铁安检丢东西怎么办 东西掉成都地铁上怎么办 东西掉在成都地铁上怎么办 成都地铁上掉东西了怎么办 地铁站丢了东西怎么办 在地铁站丢了东西怎么办 没有签劳动合同不发工资怎么办 没有劳动合同辞职不给工资怎么办 地铁安检要交押金怎么办 在广州地铁上人走丢了怎么办 海尔全自动洗衣机程系乱了怎么办 河南危险化学品经营许可证怎么办 甲方不给付监理费怎么办 甲方不按合同付工程款怎么办 撞车对方全责不赔钱怎么办 电梯坏了没人修怎么办 电工超作证丢了怎么办