使用Servlet接受服务器请求信息

HTTP请求示例

HttpServletRequest对象主要用于获取由客户端发送过来的请求头、参数、文件、数据等。Servlet存在的主要目的就是处理请求。Servlet规范中对此对象进行了增强,使其还可以与Web应用程序交互

GET/POST提交方法

  - 浏览器向Web服务器发送HTTP请求

  - 用户在网页上点击一个超连接

  - 用户提交在网页上填写好的表单

  - 用户在浏览器地址栏中输入URL地址并回车

  - 默认情况下都是使用HTTP协议的GET方法提交请求

  - 使用不同的HTTP请求定制浏览器行为

GET/POST提交方法区别

特征

GET方法

POST方法

提交数据类型

文本

文本、二进制文本

提交数据长度

不超过255个字符

没有限制

提交数据可见性

作为URL地址的一部分显示在浏览器地址栏

作为请求的消息体,不可见

提交数据缓存

缓存在浏览器URL历史状态中

不会被浏览器缓存

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

  - 发送大数据的时候,使用POST方法;

  - 上传文件时,使用POST方法;

  - 发送用户名、密码或其他保密信息的时候使用POST方

HTTP请求方法与HttpServlet方法对应关系

HTTP请求方法类型

HttpServlet处理方法

GET

doGet()

HEAD

doHead()

POST

doPost()

PUT

doPut()

DELETE

doDelete()

OPTIONS

doOptions()

TRACE

doTrace()

  1. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. //your code
  3. }
  4. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5. //your code
  6. }

  根据生命周期,这些方法的调用过程

    - 容器调用service(ServletRequest,ServletResponse)方法;

    - service(ServletRequest,ServletResponse)该方法再调用同一个Servlet类中的service(ServletRequest,ServletResponse)方法。

    - service(ServletRequest,ServletResponse)方法将分析HTTP请求,找到请求方法类型然后调用相应的处理方法

提示:如果在自定义的Servlet类中覆盖service方法,doXXX方法将不会自动调用。在绝大多数的情况下,我们只需要关心GET和POST方法就行了。

获取HTTP协议请求行

  - getMethod():获取HTTP的请求方法,例如GET、POST等

  - getRequestURI():获取请求的URI资源

- getRequestURL():获取请求的URL,包含协议名、服务器名或IP、端口号和请求资源但不包括查询字符串参数

- getQueryString():获取请求URL后面的查询字符串

- getProtocol():获取HTTP的协议名和版本号

- getContextPath():获取请求URI资源的上下文路径

- getServletPath():获取Servlet的映射路径

  1. package test;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. /**
  11. * Servlet implementation class Test
  12. */
  13. public class Test extends HttpServlet {
  14. private static final long serialVersionUID = 1L;
  15. protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
  16. System.err.println("请求的方法:" + request.getMethod());
  17. System.err.println("请求的URL:" + request.getRequestURI());
  18. System.err.println("请求的URL:" + request.getRequestURL());
  19. System.err.println("请求的查询方法:" + request.getQueryString());
  20. System.err.println("请求的协议:" + request.getProtocol());
  21. System.err.println("请求的上下文:" + request.getContextPath());
  22. System.err.println("请求的Servlet的映射路径:" + request.getServletPath());
  23. }
  24. protected void doPost(HttpServletRequest request,
  25. HttpServletResponse response) throws ServletException, IOException {
  26. // TODO Auto-generated method stub
  27. }
  28.  
  29. }

HttpServletRequest访问HTTP请求行

获取HTTP协议请求头

  HTTP请求头用于告诉服务器客户端使用什么软件以及客户端想要服务器如何返回请求的信息

  HttpServletRequest对象的如下方法访问

    - getHeader(name):返回指定的请求头的值

    - getHeaders(name) :返回一个Enumeration(枚举)包含请求头中的所有值

- getHeaderNames():特定请求中接受到的所有请求头的名称

- getIntHeader(name):获取特定请求头的值,并将其转化为int类型

- getDateHeader(name):获取特定请求头的值,并将其转化为Date类型

获取所有请求头

  1. package test;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. /**
  11. * Servlet implementation class Test
  12. */
  13. public class Test extends HttpServlet {
  14. private static final long serialVersionUID = 1L;
  15. protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
  16. @SuppressWarnings("rawtypes")
  17. Enumeration $enum = request.getHeaderNames();
  18. //通过遍历取出请求头信息并打印
  19. while ($enum.hasMoreElements()) {
  20. String headerName = (String) $enum.nextElement();
  21. String headerValue = request.getHeader(headerName);
  22. System.out.println(headerName+":"+headerValue);
  23. }
  24. }
  25. protected void doPost(HttpServletRequest request,
  26. HttpServletResponse response) throws ServletException, IOException {
  27. // TODO Auto-generated method stub
  28. }
  29.  
  30. }

返回浏览器发送的所有请求头

检索浏览器

  1. //获取请求头信息
    String userAgent = request.getHeader("User-Agent");
    // 判断正在使用的浏览器
  2. if((userAgent != null) && (userAgent.indexOf("MSIE")!=-1) ){
  1.   // 您正在使用MicroSoft IE浏览器
  1. }else if((userAgent != null) && (userAgent.indexOf("Firefox")!=-1)){
  1.   // 您正在使用FireFox火狐浏览器
    }

获取请求消息体

  - 消息体可以是普通文本也可以是二进制数据

  - HttpServletRequest对象可以使用通用的方法来获取表单数据

获取表单数据

HttpServletRequest对象用下列方法以访问请求参数

- getParameter(parameterName):获取表单参数的值,参数名区分大小写,与HTML表单中出现的参数名一致,GET请求还是POST请求都可以采用相同的方式

- getParameterValues(parameterName):获取同一个参数名的多个参数值,返回字符串数组对象

- getParameterNames():以Enumeration (枚举)的方式返回请求中所有的表单参数名列表

  1. <--HTML文件--!>
    <form action="Register" method="post">
  2. 用户名:<input type="text" name="userName" />
  3. <br/>
  4. 密码:<input type="password" name="passWord" />
  5. <br/>
  6. 学历:<select name="education">
  7. <option>小学</option>
  8. <option>初中</option>
  9. <option>高中</option>
  10. <option>大专</option>
  11. <option>本科</option>
  12. </select>
  13. <br/>
  14. 性别:<input type="radio" name="gender" id="man" checked="checked" value="男"/>
  15. <label for="man"></label>
  16. <input type="radio" name="gender" id="woman" value="女"/>
  17. <label for="woman"></label>
  18. <br/>
  19. 爱好:<input type="checkbox" name="hobby" id="PE" value="体育"/>
  20. <label for="PE">体育</label>
  21. <input type="checkbox" name="hobby" id="art" value="美术"/>
  22. <label for="art">美术</label>
  23. <input type="checkbox" name="hobby" id="music" value="音乐"/>
  24. <label for="music">音乐</label>
  25. <br/>
  26. <button>提交</button>
  27. </form>

表单提交信息

  1. //Java代码,提交是post,所以该代码重写doPost()方法
    //设置字符编码
  2. request.setCharacterEncoding("utf-8");
  3. response.setCharacterEncoding("utf-8");
  4. //获取表单信息
  5. String userName = request.getParameter("userName");
  6. String passWord = request.getParameter("passWord");
  7. String education = request.getParameter("education");
  8. String gender = request.getParameter("gender");
  9. String[] hobbys = request.getParameterValues("hobby");
  10. //打印获取的信息
  11. System.err.println("userName:"+userName);
  12. System.err.println("passWord:"+passWord);
  13. System.err.println("education:"+education);
  14. System.err.println("gender:"+gender);
  15. System.err.print("hobby:");
  16. if(hobbys!=null){
  17. for(String hobby:hobbys){
  18. System.err.print(hobby+"/");
  19. }
  20. }

表单信息打印结果

JavaWeb总结(五)的更多相关文章

  1. JavaWeb 后端 <五> 之 JSP 学习笔记

    一.JSP简介 1.也是SUN公司推出的开发动态web资源的技术,属于JavaEE技术之一.由于原理上是Servlet, 所以JSP/Servlet在一起. 二.HTML.Servlet和JSP 1. ...

  2. JavaWeb(五)之JSTL标签库

    前言 前面介绍了EL表达式,其实EL表达式基本上是和JSTL核心标签库搭配一起使用才能发挥效果的.接下来让我们一起来认识一下吧! 在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行 ...

  3. JavaWeb学习 (五)————Servlet(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  4. javaweb(十五)——JSP基础语法

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...

  5. JavaWeb【五、内置对象】

    简介 Web容器创建的一组对象,不用new即可使用. 共有9种,out.request.response.session.application,五种比较常用,page.pageContent.exc ...

  6. javaweb实验五

    product类: package com.lab;public class Product { private int id;                // 商品编号    private S ...

  7. JavaWeb总结(五)—Cookie

    一.会话 1.提出问题 HTTP协议是一种无状态的协议.Web服务器本身不能识别哪些请求是同一浏览器发出的,浏览器的每一次请求都是孤立的.即使HTTP1.1支持持续连接,但当用户有一段时间没有提交请求 ...

  8. JavaWeb(五)Filter过滤器

    Filter过滤器 Fileter介绍 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Serv ...

  9. javaweb笔记五

    JSP:java server page服务器脚本语言.(脚本===插件),是一种在html代码中,嵌入java代码的方式.解决servlet产生动态页面缺陷而产生的一门技术.js:客户端脚本语言js ...

  10. JavaWeb中五种转发方式(转)

    今天本来是想找一下在jsp中实现转发的方式的,无意中看到了一篇文章,然后稍微综合了把服务器端的转发也包括在内.   1. RequestDispatcher.forward() 是在服务器端起作用,当 ...

随机推荐

  1. leetCode题解之求二叉树最大深度

    1.题目描述 Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along t ...

  2. Linux系统管理员命令:sudo

    sudo是个统管一切的命令.它的字面意思是代表“超级用户才能做!”(super user do!)对Linux系统管理员或高级用户而言,它是必不可少的最重要的命令之一.你可曾有过这样的经历:在终端中试 ...

  3. C# 实现水印

    直接上源码 public class WaterTextBox : TextBox { //private const int EM_SETCUEBANNER = 0x1501; //[DllImpo ...

  4. Windows Server 2008搭建域控制器

    前言 1.为什么要建域 工作组的分散管理模式不适合大型的网络环境下工作,域模式就是针对大型的网络管理需求设计的,就是共享用户账号,计算机账号和安全策略的计算机集合.域中集中存储用户账号的计算机就是域控 ...

  5. route命令使用

    ---恢复内容开始--- 利用route命令可以实现内外网同时访问 route 命令参数: route [-f] [-p] [Command [Destination] [mask Netmask] ...

  6. September 27th 2017 Week 39th Wednesday

    We both look up at the same stars, yet we see such different things. 我们仰望同一片星空,却看见了不同的事物. Looking up ...

  7. MyISAM和innoDB对比,覆盖索引简单回顾

    MyISAM Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam. 它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以 ...

  8. 第二次作业 APP分析

    第一部分 调研, 评测 1.下载软件并使用. 今天我要分析的软件app是UC浏览器这个软件,UC浏览器的用户群体还是挺多的,作为一款主流之一的浏览器APP,整体的用户体验还是很好的.简洁的界面还有中间 ...

  9. 用windows自带的fsutil来创建1G稀疏文件(sparse file)

    fsutils file createnew  a.dat 1073741824 fsutil sparse setflag a.dat fsutil sparse setrange a.dat 0  ...

  10. 1070. [SCOI2007]修车【费用流】

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...