HTTP Request和Response
一、Servlet
1:实现Servlet接口
servlet生命周期:
init方法:tomcat启动时 调用此方法
service方法:访问servlet时默认执行此方法
destroy方法:tomcat正常关闭时 调用此方法
package com.applesnt.servlet;
import javax.servlet.*;
import java.io.IOException;
/*实现Servlet接口 需要在web.xml中配置servlet*/
public class MyServlet01 implements Servlet{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("tomcat启动时 调用此方法");
}
@Override
public ServletConfig getServletConfig() {
//基本不用
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("默认访问此方法");
}
@Override
public String getServletInfo() {
//基本不用
return null;
}
@Override
public void destroy() {
System.out.println("tomcat正常关闭时 调用此方法");
}
}
需要在web.xml中添加servlet配置
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.applesnt.servlet.MyServlet01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/mydemo1</url-pattern>
</servlet-mapping>
访问测试:
http://localhost/applesnt/mydemo1
2:继承HttpServlet抽象类
@@WebServlet 必须是jak7及以上才可以使用注解 也就是servlet必须是3.0以上
package com.applesnt.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*继承HttpServlet抽象类 */
@WebServlet(value = "/mydemo2",loadOnStartup = 1)
public class MyServlet02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("通过post请求 访问此方法");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("通过get请求 访问此方法");
}
}
访问测试:
get请求:http://localhost/applesnt/mydemo2
post请求:form表单提交
<form action="/applesnt/mydemo2" method="post">
用户名:<input type="text" name="username" ><br>
密码:<input type="text" name="password" ><br>
<input type="checkbox" name="type" value="学生">学生
<input type="checkbox" name="type" value="老师">老师<br>
<input type="submit" value="注册">
</form>
二、Http
Http分为请求(request)和响应(response)
其中request和response是由tomcat管理的
1:请求
请求数据分为:请求行,请求头,请求空行,请求体
1>:获取请求行数据:
request.setCharacterEncoding("utf-8");//解决中文乱码
package com.applesnt.httprequestservlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
@WebServlet("/myrequest01")
public class HttpRequestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//解决中文乱码
//获取http请求行数据 http://localhost/applesnt/myrequest01
System.out.println("****获取请求行数据****");
String method = request.getMethod();
System.out.println("请求类型是="+method);
String contextPath = request.getContextPath();
System.out.println("请求的上下文【虚拟目录】是="+contextPath);
String requestURI = request.getRequestURI();
System.out.println("请求的uri="+requestURI);
StringBuffer requestURL = request.getRequestURL();
System.out.println("请求的url="+requestURL);
String remoteAddr = request.getRemoteAddr();
System.out.println("请求的ip="+remoteAddr);
String remoteHost = request.getRemoteHost();
System.out.println("请求的主机="+remoteHost);
}
}
打印结果:
http://localhost/applesnt/myrequest01
请求类型是=GET
请求的上下文【虚拟目录】是=/applesnt
请求的uri=/applesnt/myrequest01
请求的url=http://localhost/applesnt/myrequest01
请求的ip=0:0:0:0:0:0:0:1
请求的主机=0:0:0:0:0:0:0:1
2>:获取请求头数据:
user-agent:浏览器信息
referer:本次请求从哪里来
package com.applesnt.httprequestservlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
@WebServlet("/myrequest01")
public class HttpRequestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//解决中文乱码
//获取http请求头数据 http://localhost/applesnt/myrequest01
System.out.println("****获取请求头数据****");
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){
String name = headerNames.nextElement();
String value = request.getHeader(name);
System.out.println(name + "==" + value);
}
//两个比较重要的请求头 http://localhost/applesnt/where.html
String agent = request.getHeader("user-agent");//获取浏览器类型
System.out.println("浏览器 = "+agent);
String referer = request.getHeader("referer");//获取从哪来
System.out.println("跳转地址为 = "+referer);
}
}
打印结果:
http://localhost/applesnt/myrequest01
host==localhost
connection==keep-alive
upgrade-insecure-requests==1
user-agent==Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
accept==text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding==gzip, deflate, br
accept-language==zh-CN,zh;q=0.9
cookie==JSESSIONID=D3F775AC5EAE33EE4DE4BE0370E78382
测试referer请求头信息:
\web\where.html
<a href="/applesnt/myrequest01">测试referer</a>
打印结果:
跳转地址为 = http://localhost/applesnt/where.html
3>:获取请求体数据:
package com.applesnt.httprequestservlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
@WebServlet("/myrequest01")
public class HttpRequestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//解决中文乱码
//获取请求体数据
System.out.println("****获取请求体数据****");
//第一种 只能获取一个值(input select等)
String username = request.getParameter("username");
String password = request.getParameter("password");
String type = request.getParameter("type");
System.out.println("用户名="+username+" 密码="+password);
System.out.println("类型="+type);
System.out.println("------------------");
//第二种 获取多个值(check)
String[] typelist = request.getParameterValues("type");
for (int i = 0; i <typelist.length ; i++) {
System.out.println("类型="+typelist[i]);
}
System.out.println("------------------");
//第三种 map集合
Map<String, String[]> parameterMap = request.getParameterMap();
Set<String> keyset = parameterMap.keySet();
for (String name : keyset){
String[] values = parameterMap.get(name);
for(String value : values){
System.out.println(name + "==" + value);
}
}
}
}
打印结果:
\web\login.html
<form action="/applesnt/myrequest01" method="post">
用户名:<input type="text" name="username" ><br>
密码:<input type="text" name="password" ><br>
<input type="checkbox" name="type" value="学生">学生
<input type="checkbox" name="type" value="老师">老师<br>
<input type="submit" value="注册">
</form>
用户名=zhangsn 密码=123456
类型=学生
------------------
类型=学生
类型=老师
------------------
username==zhangsn
password==123456
type==学生
type==老师
4>:Request跳转:
dispatcher跳转的特点:
1:Dispatcher只能在当前服务器内部跳转,如果写外部地址是失败的
2:地址栏路径没有发生变化 跳转后还是原来的路径
3:只发一次请求
4:参数可以传递
com\applesnt\httprequestservlet\RequestServlet01.java
String username = request.getParameter("username");
System.out.println("请求了request01 = "+username);
request.getRequestDispatcher("/request02").forward(request,response);
com\applesnt\httprequestservlet\RequestServlet02.java
String username = request.getParameter("username");
System.out.println("请求了request02 = "+username);
访问测试:http://localhost/applesnt/request01?username=zhangsan
请求了request01 = zhangsan
请求了request02 = zhangsan
4>:Request数据共享:
Request域共享 一次请求
com\applesnt\httprequestservlet\RequestServlet01.java
request.setAttribute("age","12");
com\applesnt\httprequestservlet\RequestServlet02.java
Object age = request.getAttribute("age");
System.out.println("数据共享 = " +age.toString());
2:响应
响应数据分为:响应行,响应头,响应空行,响应体
1>:响应行状态码:
状态码:是服务器告诉浏览器本次请求的的一个状态
1xx: 不常用 了解
2xx:成功状态码
3xx:重定向状态码 302(重定向) 304(访问缓存)
4xx:客户端错误 404(请求路径没有相应的资源) 405(没有相应的doget或者dopost方法)
5xx:服务端错误 500(服务异常)
2>:响应行状态码:
1: 获取输出流:
字符输出流
字节输出流
2: 输出
1:字符输出:只能输出字符数据
com\applesnt\httpresponesservlet\HttpResponseServlet03.java
//字符输出流
response.setStatus(200);
//告诉浏览器以何种方式编码显示数据
response.setContentType("text/html;charset=utf-8");
//获取字符输出流
PrintWriter pw = response.getWriter();
//输出到浏览器
//pw.write("你好 write response"); //第一种
pw.print("<h1>你好 print response<h1>");//第二种
访问测试:

2:字节输出:可以输出任何数据
//字节输出流[可以输出任何数据]
response.setStatus(200);
response.setContentType("text/html;charset=utf-8");//告诉浏览器以何种方式何种编码显示数据
ServletOutputStream os = response.getOutputStream();
os.write("您好 hello".getBytes());//需要getbytes
访问测试:

2:Response重定向
重定向的特点:
1:地址栏发生了变化(显示重定向后的路径)
2:两次请求
3:可以访问其他服务器的资源
response.sendRedirect("/applesnt/myresponse02");
HTTP Request和Response的更多相关文章
- Request 和 Response 原理
* Request 和 Response 原理: * request对象和response对象由服务器创建,我们只需要在service方法中使用这两个对象即可 * 继承体系结构: ...
- Request 、Response 与Server的使用
纯属记录总结,以下图片都是来自 ASP.NET笔记之 Request .Response 与Server的使用 Request Response Server 关于Server.MapPath 方法看 ...
- request 和response
当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...
- Request和Response对象
Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ...
- Java 中的 request 和response 理解
request和response(请求和响应) 1.当Web容器收到客户端的发送过来http请求,会针对每一次请求,分别创建一个用于代表此次请求的HttpServletRequest对象(reque ...
- 【转】request和response的页面跳转传参
下面是一位园友的文章: jsp或Servlet都会用到页面跳转,可以用 request.getRequestDispatcher("p3.jsp").forward(request ...
- LoadRunner中取Request、Response
LoadRunner中取Request.Response LoadRunner两个“内置变量”: 1.REQUEST,用于提取完整的请求头信息. 2.RESPONSE,用于提取完整的响应头信息. 响应 ...
- Spring mvc中使用request和response
@ResponseBody @RequestMapping(value="/ip", method=RequestMethod.GET) public String getIP(H ...
- springMVC获取request和response
转载:http://blog.sina.com.cn/s/blog_7085382f0102v9jg.html 1.参数 例如: @RequestMapping("/test") ...
- ASP.NET中的Request、Response、Server对象
Request对象 Response.Write(Request.ApplicationPath) //应用根路径 Request.AppRelativeCurrentExecutionFilePat ...
随机推荐
- python课程体系是怎么样的?
好的python课程体系是怎么样的?Python从1991年走到今天,已经有了28年的历史了,在开发行业来说也是老江湖了,那么python为什么可以在开发行业屹立不倒呢?其实python最吸引程序员的 ...
- OpenCV-Python 特征匹配 | 四十四
目标 在本章中, 我们将看到如何将一个图像中的特征与其他图像进行匹配. 我们将在OpenCV中使用Brute-Force匹配器和FLANN匹配器 Brute-Force匹配器的基础 蛮力匹配器很简单. ...
- AI体验类产品竞品分析
1.业界状态 人工智能(Artificial Intelligence),简称AI.上个世纪50年代就有一批年轻的科学家提出了这一概念,经历过50多年的长足发展,信息化建设的脚步不断加快,机器人战胜人 ...
- 搬运工 Logstash
1,Logstash 简介 Logstash是一个开源数据收集引擎,具有实时管道功能.Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地. 通俗的说,就是搬运工 ...
- js内置对象常用方法
JS内置对象: ● String对象:处理所有的字符串操作 ● Math对象:处理所有的数学运算 ● Date对象:处理日期和时间的存储.转化和表达 ● Array对象:提供一个数组的模型.存储大量有 ...
- 使用kibana操作elasticsearch7.x 教程
由于elasticsearch7.x取消了type(类型的概念)对应数据库表的概念 添加一个索引 PUT 索引名 { "settings": { "number_of_s ...
- Ubuntu命令方式安装中文语言包
Ubuntu命令方式安装中文语言包 安装之前执行 $LANG 查看语言环境 中文语言包: language-pack-zh-hans 简体中文 language-pack-zh-hans-base l ...
- 牛客寒假基础集训营 | Day1 G-eli和字符串
G-eli和字符串 题目描述 eli拿到了一个仅由小写字母组成的字符串. 她想截取一段连续子串,这个子串包含至少 kkkkkkkkk 个相同的某个字母. 她想知道,子串的长度最小值是多少? 注:所谓连 ...
- 人工智能新手入门学习路线和学习资源合集(含AI综述/python/机器学习/深度学习/tensorflow)
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] 1. 分享个人对于人工智能领域的算法综述:如果你想开始学习算法,不妨先了解人工 ...
- apache-atlas 深度剖析
atlas 是apache下的大数据的元数据管理平台,支持对hive.storm.kafka.hbase.sqoop等进行元数据管理以及以图库的形式展示数据的血缘关系. 一.架构 整体架构实现如下图 ...