您的位置:首页 > 理论基础 > 计算机网络

使用Servlet处理http请求

2016-12-20 22:43 281 查看
作用:实现静态页面的请求展示,可以在Get方法中实现页面内容的展示;

一、http请求包含:

请求行:http方法、请求的url、http版本

请求方式:GET主要是请求获取数据;

1、地址栏直接输入服务器资源,默认是get提交; 2、通过js直接访问是get提交 3、超链接访问:

Post是请求上传资源:在表单中直接上传内容为post提交;主要用于传输数据使用可以发送文本数据及二进制数据;

GET与Post的区别

特征GET方法POST方法
提交数据类型文本文本,二进制文本
提交数据长度不超过255个字符没有限制
提交数据可见性作为URL地址一部分,显示在浏览器地址栏作为请求的消息体,不可见
提交数据缓存婚存在浏览器URL历史状态中不会被浏览器缓存
使用场景:

1、GET方法:请求一个静态页面或者图形文件时使用GET方法,因为仅仅需要发送文件名

2、Post方法:发送大数据、上传文件时、发送用户名、密码或其他保密信息的时候;

【补充内容】:

get提交的中文都不能被解析,需要手动调成中文:String newName = new

request.setCharacterEncoding("utf-8");

String name = request.getParameter("username");

//get提交中文默认乱码,需要自己处理编码集

String newName = new String(name.getBytes("ISO8859-1"),"UTF-8");

设置在thml中:<form name="username" method="Get"></form>在密码中设置name=“pwd”;

二、httpServiceRequest对象封装了http传送的请求行的全部内容;

//获取客户端请求的方法:

String method = request.getMethod();

//获取到请求的地址:

request.getRequestURL().toString(); 统一资源定位符(实实在在找到文件的全路径)

request.getRequestURI(); 统一资源标识符

//获取到请求附带的参数:

request.getQueryString();

//获取客户端的ip,端口;

request.getRemoteAddr();

//获取服务器的内容;

request.getLocationPort();
三、获取到请求头的方法:

//request.getHeader(name):返回指定的请求头的值

//获取到所有的请求头,返回枚举类型Enumeration;

Enumeration num = request.getHeaderNames();

while(num.hasMoreElements()){

String s = (String) num.nextElement();

System.out.print("请求头:"+s);

System.out.println("值:"+request.getHeader(s));

}

//返回一个日期类型

//request.getDateHeader(arg0)
四、获取消息体的内容:

[细节]:1/在设置的html的对应标签的属性设置name=“”;

2/设置请求的编码集,request.setCharacterEncoding("UTF-8");

3、显示的是value(),如果没有value,直接显示文本内容;没有文本内容显示on表示选中

【总结:select比较方便、单选框,复选框最好设置value值】;

request.getParameter("pwd");

//获取复选框选中内容:

在checkbox中获取客户端传递的多个数据换个方法:request.getParameterValues("like");

//

五、请求派发/内部派发:每个客户请求可以传递给很多Servlet以及Web应用程序中的其它资源

特点:1、整个过程完全是在服务端完成

2、不需要任何客户端浏览器的行为

3、不需要客户端浏览器和服务器端之间传递特殊信息;

4、通过javax.servlet.RequestDispatcher对象实现;

与重定向区别:

1、请求派发状态码是307 重定向是302;

2、请求派发是在服务器端完成的,不影响客户端;地址栏是不会变化的, 重定向是客户端来完成;

3、请求派发只能在本服务器完成; 重定向可以访问其他服务器的资源;

4、请求派发对服务器处理有压力 重定向:对服务器好,但是处理速度慢;

请求派发跳转后将客户端响应控制权交给下一资源 重定向则会;

代码实现:

RequestDispatcher rd = request.getRequestDispatcher("students");
rd.include(request, response);

//请求直接跳转网页:

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

//将请求往后面的网页传递,并且实现网页跳转,将客户端响应权传递下去;

rd.forward(request, respone);

//将资源控制权占时移交给跳转方,等其执行完又将控制权回收回来;

rd.include(request, respone);
内部派发细节:

重定向:只要是从客户端访问过来的只能达到Webapps,都必须要加上项目名字;(js提交,超链接提交,重定向都要加上项目名字)

// response.sendRedirect("/JavaWeb_01/students");

内部派发里面的/表示工程项目名,请求派发默认调用doPost方法;而不是doGet方法;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: