JavaWeb总结(五)
使用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() |
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//your code
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//your code
}
根据生命周期,这些方法的调用过程
- 容器调用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的映射路径
package test; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class Test
*/
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
System.err.println("请求的方法:" + request.getMethod());
System.err.println("请求的URL:" + request.getRequestURI());
System.err.println("请求的URL:" + request.getRequestURL());
System.err.println("请求的查询方法:" + request.getQueryString());
System.err.println("请求的协议:" + request.getProtocol());
System.err.println("请求的上下文:" + request.getContextPath());
System.err.println("请求的Servlet的映射路径:" + request.getServletPath());
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
} }

HttpServletRequest访问HTTP请求行
获取HTTP协议请求头
HTTP请求头用于告诉服务器客户端使用什么软件以及客户端想要服务器如何返回请求的信息
HttpServletRequest对象的如下方法访问
- getHeader(name):返回指定的请求头的值
- getHeaders(name) :返回一个Enumeration(枚举)包含请求头中的所有值
- getHeaderNames():特定请求中接受到的所有请求头的名称
- getIntHeader(name):获取特定请求头的值,并将其转化为int类型
- getDateHeader(name):获取特定请求头的值,并将其转化为Date类型
获取所有请求头
package test; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class Test
*/
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
@SuppressWarnings("rawtypes")
Enumeration $enum = request.getHeaderNames();
//通过遍历取出请求头信息并打印
while ($enum.hasMoreElements()) {
String headerName = (String) $enum.nextElement();
String headerValue = request.getHeader(headerName);
System.out.println(headerName+":"+headerValue);
}
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
} }

返回浏览器发送的所有请求头
检索浏览器
//获取请求头信息
String userAgent = request.getHeader("User-Agent");
// 判断正在使用的浏览器
if((userAgent != null) && (userAgent.indexOf("MSIE")!=-1) ){
// 您正在使用MicroSoft IE浏览器
}else if((userAgent != null) && (userAgent.indexOf("Firefox")!=-1)){
// 您正在使用FireFox火狐浏览器
}
获取请求消息体
- 消息体可以是普通文本也可以是二进制数据
- HttpServletRequest对象可以使用通用的方法来获取表单数据
获取表单数据
HttpServletRequest对象用下列方法以访问请求参数
- getParameter(parameterName):获取表单参数的值,参数名区分大小写,与HTML表单中出现的参数名一致,GET请求还是POST请求都可以采用相同的方式
- getParameterValues(parameterName):获取同一个参数名的多个参数值,返回字符串数组对象
- getParameterNames():以Enumeration (枚举)的方式返回请求中所有的表单参数名列表
<--HTML文件--!>
<form action="Register" method="post">
用户名:<input type="text" name="userName" />
<br/>
密码:<input type="password" name="passWord" />
<br/>
学历:<select name="education">
<option>小学</option>
<option>初中</option>
<option>高中</option>
<option>大专</option>
<option>本科</option>
</select>
<br/>
性别:<input type="radio" name="gender" id="man" checked="checked" value="男"/>
<label for="man">男</label>
<input type="radio" name="gender" id="woman" value="女"/>
<label for="woman">女</label>
<br/>
爱好:<input type="checkbox" name="hobby" id="PE" value="体育"/>
<label for="PE">体育</label>
<input type="checkbox" name="hobby" id="art" value="美术"/>
<label for="art">美术</label>
<input type="checkbox" name="hobby" id="music" value="音乐"/>
<label for="music">音乐</label>
<br/>
<button>提交</button>
</form>

表单提交信息
//Java代码,提交是post,所以该代码重写doPost()方法
//设置字符编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取表单信息
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
String education = request.getParameter("education");
String gender = request.getParameter("gender");
String[] hobbys = request.getParameterValues("hobby");
//打印获取的信息
System.err.println("userName:"+userName);
System.err.println("passWord:"+passWord);
System.err.println("education:"+education);
System.err.println("gender:"+gender);
System.err.print("hobby:");
if(hobbys!=null){
for(String hobby:hobbys){
System.err.print(hobby+"/");
}
}

JavaWeb总结(五)的更多相关文章
- JavaWeb 后端 <五> 之 JSP 学习笔记
一.JSP简介 1.也是SUN公司推出的开发动态web资源的技术,属于JavaEE技术之一.由于原理上是Servlet, 所以JSP/Servlet在一起. 二.HTML.Servlet和JSP 1. ...
- JavaWeb(五)之JSTL标签库
前言 前面介绍了EL表达式,其实EL表达式基本上是和JSTL核心标签库搭配一起使用才能发挥效果的.接下来让我们一起来认识一下吧! 在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行 ...
- JavaWeb学习 (五)————Servlet(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- javaweb(十五)——JSP基础语法
任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...
- JavaWeb【五、内置对象】
简介 Web容器创建的一组对象,不用new即可使用. 共有9种,out.request.response.session.application,五种比较常用,page.pageContent.exc ...
- javaweb实验五
product类: package com.lab;public class Product { private int id; // 商品编号 private S ...
- JavaWeb总结(五)—Cookie
一.会话 1.提出问题 HTTP协议是一种无状态的协议.Web服务器本身不能识别哪些请求是同一浏览器发出的,浏览器的每一次请求都是孤立的.即使HTTP1.1支持持续连接,但当用户有一段时间没有提交请求 ...
- JavaWeb(五)Filter过滤器
Filter过滤器 Fileter介绍 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Serv ...
- javaweb笔记五
JSP:java server page服务器脚本语言.(脚本===插件),是一种在html代码中,嵌入java代码的方式.解决servlet产生动态页面缺陷而产生的一门技术.js:客户端脚本语言js ...
- JavaWeb中五种转发方式(转)
今天本来是想找一下在jsp中实现转发的方式的,无意中看到了一篇文章,然后稍微综合了把服务器端的转发也包括在内. 1. RequestDispatcher.forward() 是在服务器端起作用,当 ...
随机推荐
- save与Update的合并操作 标签: 关系映射 2017-07-13 15:11 7人阅读 评论(0) 收藏
做save与update的方法合并操作时,判断条件是主体对象的ID是否存在. 但是当页面中,涉及到多个主体对象的关联对象时,情况变得复杂起来,特总结项目中的几点 一.页面中的VO对象属性可以分为三类: ...
- Ad-hoc 查询以及动态SQL的罪恶[译]
本文为翻译文章,原文地址:https://www.simple-talk.com/blogs/2009/08/03/stolen-pages-ad-hoc-queries-and-the-sins-o ...
- cxfreeze打包python程序的方法说明(生成安装包,实现桌面快捷方式、删除快捷方式)
一.cxfreeze基础 1.cxfreeze功能 python代码文件转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller,这三种方式各有千秋,本人只用过py2exe和 ...
- Linux sudo详解
sudo:控制用户对系统命令的使用权限,root允许的操作.通过sudo可以提高普通用户的操作权限,不过这个权限是需要进行配置才可使用. 常用的命令展示 配置sudo的2种方式 1. visodu 编 ...
- matlab 函数句柄@的介绍_什么是函数句柄(转)
http://blog.csdn.net/kevinhg/article/details/8861774 http://www.ilovematlab.cn/thread-30375-1-1.html ...
- Substring Search
查找子字符串 Introduction 在长度为 N 的文本里寻找长度为 M 的模式(子串),典型情况是 N >> M. 这个应用就很广泛啦,在文本中寻找特定的模式(子串)是很常见的需求. ...
- 【转】.net core 一次坑爹的类库打包过程
自己遇到这个问题,记录一下,原文链接:http://www.cnblogs.com/Hai--D/p/5776463.html. 众所周知,.net core 跨平台类库引用一定要通过nuget获得. ...
- Spring各版本源码下载
spring framework 各版本源码下载地址 现在spring的源码下载地址真是不好找,这次终于找到了.记录一下,以帮助需要的朋友. https://github.com/spring-pro ...
- 【转】彻底理解android中的内部存储与外部存储
我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...
- php魔术变量
__LINE__ 文件中的当前行号 __FILE__ 文件的完整路径和文件名 __DIR__ 文件所在的目录 __FUNCTION__ 自 PHP 5 起本常量返回该函数被定义时的名字 __C ...