学习总结之 Servlet入门知识 处理Request
2014-05-13 22:59
691 查看
l使用GET方式向服务器请求资源
浏览器向服务器发送的信息:GET /?username=213&psw=321HTTP/1.1 //请求行
Accept: */* //以下都是请求头
Accept-Language: zh-cn
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:8888
Connection: Keep-Alive
//请求头
//一个空行
l使用POST方式向服务器请求资源
POST / HTTP/1.1 //请求行Accept: */* //以下都是请求头
Accept-Language: zh-cn
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:8888
Content-Length: 53
Connection: Keep-Alive
Cache-Control: no-cache //请求头
//一个空行
username=11111&psw=222 //实体内容
以上信息为使用HTML表单<form action="127.0.0.1:8888" method="GET和POST">和以下代码共同使用打印:
public class StaticWebServer { public static void main(String[] args) { int port = 8888; try { // 开启服务器,等待客户端的链接 ServerSocket ss = new ServerSocket(port); System.out.println("服务器已经启动,正在监听" + port + "端口..."); // 不断地接收客户端的请求 while (true) { final Socket socket = ss.accept(); // 用多线程可以处理多个客户端的请求a new Thread() { public void run() { try { // 接收客户端发送过来的信息 InputStream in2 = socket.getInputStream(); for (int b = -1; (b = in2.read()) != -1;) { System.out.print((char) b); } socket.close(); } catch (Exception e) { e.printStackTrace(); } } }.start(); } } catch (Exception e) { e.printStackTrace(); } } }
l区别:GET vs POST
1、GET方式
1)可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔(其数据容量不能超过1K。),例如:GET/mail/1.html?name=abc&password=xyz HTTP/1.1
2)提交加密敏感信息是最后不要用GET方法
3)GET可以使用缓存
2、POST方式
1)POST方式提交的参数会放在实体内容里面,多个参数之间以&分割, 传送的数据量无限制。2)适合提交加密敏感信息
3)POST不能使用缓存
l用于HTTP请求中的常用头
Accept: text/html,image/*客户端支持的数据类型
Accept-Charset: ISO-8859-1
客户端支持的编码
Accept-Encoding: gzip,compress
客户端的数据压缩格式
Accept-Language: en-us,zh-cn 客户端支持的语言
Host:
www.it315.org:80 客户端访问的主机地址
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT 客户端缓存的时间
Referer: http://www.it315.org/index.jsp 从哪个资源访问服务器(防盗链)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; WindowsNT 5.0) 客户端软件环境(浏览器类型,版本)
Cookie:
Connection: close/Keep-Alive 是否维持连接
Date: Tue, 11 Jul 2000 18:23:51 GMT
发送请求的时间
l处理Request:
常用的两种doGet和doPost,所以只需要在子类overriding doGet()和doPost();Servlet程序会自动使用service方法接收standardHTTP requests,然后调用doXXX methods
package cn.itcast.request; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class TestRequest */ public class TestRequest extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // request.setCharacterEncoding("utf-8");//在这里无效,其只对实体编码有效 System.out.println("TestRequest.doGet()"); /****************** 获取 请求行 信息 ***********************************/ // 获取信息的方法详见 API--> HttpServletRequest System.out.println(request.getMethod());// 输出: GET System.out.println(request.getQueryString());// // 输出:username=1111&password=222222 /****************** 获取 URI 信息 ***********************************/ System.out.println(request.getRequestURI()); // 输出:day10httpRequest/TestRequest.do /****************** 获取 请求头 信息 ***********************************/ System.out.println(request.getHeader("Host"));// 输出: localhost:8080 /****************** 遍历 请求头 信息 ***********************************/ Enumeration<String> enums = request.getHeaderNames(); while (enums.hasMoreElements()) { String headerName = enums.nextElement(); String headerValue = request.getHeader(headerName); System.out.println("参数:" + headerName + ":" + headerValue); } /************ 【案例一:查看用户浏览器的类型】 ***************************/ String userAgent = request.getHeader("User-Agent"); System.out.println("浏览器类型:" + userAgent); /* * 输出:浏览器类型:Mozilla/5.0 (Windows NT 6.1; WOW64) */ if (userAgent.contains("Firefox")) { System.out.println("这是火狐浏览器"); } else if (userAgent.contains("Chrome")) { System.out.println("这是谷歌浏览器"); } else if (userAgent.contains("Trident")) { System.out.println("这是IE浏览器"); } else { System.out.println("这是不认识的浏览器"); } /***************** 【案例二:防盗链】 **************************/ response.setContentType("text/html;charset=utf-8"); String referer = request.getHeader("Referer"); if (referer != null && (referer.contains("localhost"))) { response.getWriter().write("<html><body>这是我的网站正确内容</body></html>"); } else { response.getWriter().write( "<html><body>小子,你盗用我网站的东西,赶紧去自首!</body></html>"); } /*************** 根据参数的名称获取参数的值 ************************/ String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("统一方式1:" + username + ":" + password); // 输出:统一方式1:111111111:22222222222 /************** 遍历所有的参数名 并且获得参数值 *********************/ Enumeration<String> enums2 = request.getParameterNames(); while (enums2.hasMoreElements()) { String paramName = enums2.nextElement(); String paramValue = new String(request.getParameter(paramName) .getBytes("iso8859-1"), "utf-8"); System.out.println("统一方式2" + paramName + ":" + paramValue); } /************************* 编码问题 ******************************/ // tomcat默认会把所有URL的内容都按照ISO8859-1来编码 // String paramValue = request.getParameter(paramName);这样出来的是 乱码 /* * 解决编码问题第二种方式: 修改tomcat/conf/server.xml * * <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" * redirectPort="8443" URIEncoding="utf-8"/> * * 在这里追加 URIEncoding="utf-8",作用是修改tomcat对URL内容的编码格式 */ } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("TestRequest.doPost()"); /****************** 编码问题 ****************************/ request.setCharacterEncoding("utf-8"); // 1、这个修改编码的方法一定要在所有获取参数的方法前面 // 2、这个编码要和页面上的<meta charset="UTF-8">编码保持一致 // 3、这个方法只能设置实体内容的编码,所以对Post方法提交的参数编码问题是有效的,但是对Get方法提交的参数无效! /**************** 根据参数的名称获取参数的值 ********************/ String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("统一方式1:" + username + ":" + password); /************* 遍历所有的参数名 并且获得参数值 *****************/ Enumeration<String> enums2 = request.getParameterNames(); while (enums2.hasMoreElements()) { String paramName = enums2.nextElement(); String paramValue = request.getParameter(paramName); System.out.println("统一方式2" + paramName + ":" + paramValue); } } }
相关文章推荐
- 学习总结之 Servlet入门知识 处理Response
- 学习总结之 Servlet入门知识笔记
- jQuery入门学习三:XMLHttpRequest处理xml格式的返回数据
- servlet——编码处理学习总结
- Docker入门知识总结-学习笔记1
- JavaWeb开发知识总结(HttpServletRequest,HttpServletResponse)
- struts 入门基础知识学习总结(转)
- MATLAB图像处理基础知识学习总结(MATLAB操作命令)
- 这两天的设计入门知识的学习总结
- 菜鸟入门 个人学习Linux知识总结
- 这两天的设计入门知识的学习总结
- servlet入门知识
- javaweb学习总结(十)——HttpServletRequest对象(一)
- 计算机基础知识学习总结
- Mysql学习总结(12)——21分钟Mysql入门教程
- servlet学习总结
- 【Linux入门学习之】Linux关机命令总结
- Web开发入门知识小总结
- 学习javacv入门示例1:图像的读取显示翻转处理
- View相关知识学习总结