使用Servlet处理http请求

作用:实现静态页面的请求展示,可以在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方法;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值