一、HttpServletRequest接口
内部封装了客户端请求的数据信息
接收客户端的请求参数、HTTP请求数据包中配置参数

###<1>常用方法
getContextPath()重要
getContentType()
getMethod()
getRequestURL()
getLocalAddr()
getLocalName()
getRemoteAddr()
getRemoteHost()
getRemotePort()
getQueryString()

###<2>获取客户端请求参数
String value = getParameter(String key);
String [] datas = request.getParameterValues(String key);

###<3>form表单action设置
1. 直接写Servlet的url名称
myservlet
2. /项目名称/Servlet的url名称
/Day14_Servlet/myservlet
3. 全路径
http://localhost:8090/Day14_Servlet/myservlet

###<4>存储数据,具体存储区域的对象,一次请求
将数据存储到request对象中:
setAttribute(String key,String value);
从request对象中获取数据:
String value = getAttribute(String key);
从request对象中移除数据:
removeAttribute(String key);

###<5>请求的转发
1. 获取转发器对象
RequestDispatcher rd = request.getRequestDispatcher(String path);

2. 转发操作 (跳转静态资源(DefaultServlet)和servlet)
request.setAttribute(String key,String value);
rd.forward(request,response);

#二、HttpServletReponse接口,封装响应数据包的数据
###<1>常用方法
setStatus(int code);//设置状态码
addHeader(String key,String value);//设置响应数据包的头部信息
...
...

###<2>自定义重定向
![](2.png)

//1. 自定义实现重定向
//设置状态码
response.setStatus(302);
response.setHeader("Location", "/Day14_Servlet/code/mainpage.html");
response.setHeader("Location", "http://www.baidu.com");

//2. 使用response封装好的方法,实现重定向
response.sendRedirect("/Day14_Servlet/code/mainpage.html");

//3. 定时跳转
response.setHeader("refresh", "3;url=/Day14_Servlet/code/mainpage.html");

###<4>响应字节数据
封装服务器处理的结果
getOutputStream();//指向响应数据包的response body部分
getWriter();//指向响应数据包的response body部分

#三、POST和GET请求方式及其乱码处理
###<1>Post和Get请求
常见get请求:
在地址栏中直接回车
点击超链接
表单提交数据时,指定method=get

get请求:将请求数据放置到url后面(?key=value&key2=value2)
安全性较低
对请求数据量有限制,4k

post请求:将请求参数封装到HTTP请求数据包中的请求体中
安全性较高
对请求数据量没有限制

###<2>请求数据的乱码处理
post处理乱码:
<1>前端页面的字符编码:
<meta charset="utf-8">
<2>在Servlet中设置HttpServletRequest的解码方式
request.setCharacterEncoding("UTF-8");

get处理乱码:
<1>前端页面的字符编码:
<meta charset="utf-8">
<2>在Servlet中将从HttpServletRequest对象中获取的中文字符重新设置解码字符集
new String(乱码字符.getBytes("iso-8859-1"),"utf-8");

###<3>响应数据乱码处理
1. 响应的结果数据是纯本文数据:response.setCharacterEncoding("utf-8");
设置当前响应结果的字符集
不设置会使用当前浏览器默认的字符集进行解码

2. 响应的结果数据是页面数据:response.setContentType("text/html;charset=utf-8");
//在创建流对象之前设置页面的编码
设置当前页面响应结果的字符集

#四、ServletContext和ServletConfig对象
![](3.png)

###<1>概念
当前web应用的上下文对象
封装该应用的信息,一个web应用只对应唯一的一个ServletContext对象
服务器开启其就被创建,服务器关闭或者web应用被移除,此对象销毁

###<2>获取
this.getServletContext();
servletconfig.getServletContext()
###<3>作用
1. 获取全局的初始化参数
<!-- 全局的数据 -->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/db1</param-value>
</context-param>

在某一个Servlet中:
创建ServletContext对象
context = getServletContext();
获取初始化参数
context.getInitParameter("key");

2. 存储全局的数据(域对象)
setAttribute(String key,String value);
getAttribute(String key);

3. 获取web应用中的任何资源(绝对路径)
String 绝对路径 = getRealPath("相对路径");

String imgPath = context.getRealPath("k11.jpg");
String text3Path = context.getRealPath("WEB-INF/test3.txt");
String text2Path = context.getRealPath("WEB-INF/classes/test2.txt");

###补充:域对象
一次请求 request service() 转发 (request) 服务一个用户的一次请求
一次回话 session 多次请求 服务一个用户的多次请求
整个web应用 context 整个项目的运行 服务多个用户的多次请求

###ServletConfig
描述一个Servlet的配置信息
获取某一个Servlet中配置的初始化数据(web.xml)
config.getInitParameter(String key);
config.getServletContext()
config.getServletName()

注意:为了保证数据安全,此对象只能获取一次数据

一、HttpServletRequest接口 二、HttpServletReponse接口 三、POST和GET请求方式及其乱码处理 四、ServletContext对象和ServletConfig对象的更多相关文章

  1. Jmeter自动化测试 POST请求和GET请求用if控制器,可以二次开发源码,将请求方式通过数据源传入,就不需要做多余的判断

    Jmeter自动化测试 POST请求和GET请求用if控制器,可以二次开发源码,将请求方式通过数据源传入,就不需要做多余的判断 目前常用的做法:

  2. SpringMVC(二):RequestMapping修饰类、指定请求方式、请求参数或请求头、支持Ant路径

    @RequestMapping用来映射请求:RequestMapping可以修饰方法外,还可以修饰类 1)SpringMVC使用@RequestMapping注解为控制指定可以处理哪些URL请求: 2 ...

  3. Servlet接口的实现类,路径配置映射,ServletConfig对象,ServletContext对象及web工程中文件的读取

    一,Servlet接口实现类:sun公司为Servlet接口定义了两个默认的实现类,分别为:GenericServlet和HttpServlet. HttpServlet:指能够处理HTTP请求的se ...

  4. Django框架(九):视图(二) HttpRequest对象、HttpResponse对象

    1. HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以.视图的第一个参数必须是HttpR ...

  5. Servlet基本用法(二)接口和类

    一.摘要 本文主要简单介绍开发Servlet需要用到的接口和类. 二.ServletRequest和ServletResponse接口 当客户请求到来时,由容器创建一个ServletRequest对象 ...

  6. Hadoop序列化与Writable接口(二)

    Hadoop序列化与Writable接口(二) 上一篇文章Hadoop序列化与Writable接口(一)介绍了Hadoop序列化,Hadoop Writable接口以及如何定制自己的Writable类 ...

  7. 【C#夯实】我与接口二三事:IEnumerable、IQueryable 与 LINQ

    序 学生时期,有过小组作业,当时分工一人做那么两三个页面,然而在前端差不多的时候,我和另一个同学发生了争执.当时用的是简单的三层架构(DLL.BLL.UI),我个人觉得各写各的吧,到时候合并,而他觉得 ...

  8. Postman系列三:Postman中post接口实战(上传文件、json请求)

    一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是:1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据:2.Get安全性比Post低 ...

  9. Java EE HttpServletRequest接口和HttpServletResponse接口

    package javax.servlet.http (https://docs.oracle.com/javaee/7/api/javax/servlet/http/package-summary. ...

随机推荐

  1. redis使用watch秒杀抢购思路

    1.使用watch,采用乐观锁 2.不使用悲观锁,因为等待时间非常长,响应慢 3.不使用队列,因为并发量会让队列内存瞬间升高 测试代码: import java.util.concurrent.Exe ...

  2. localStorage存储对象,sessionStorage存储数组对象

    前言 最近在用angular做商城购物车的功能模块,因为angular的watch监听,数据只要发生变化就能很方便的自动渲染页面.但随即出现的问题是,之前用户操作的样式都会被重置掉. 例如我勾选了几个 ...

  3. JAVA WEB 过滤器(Filter)中向容器 Spring 注入 bean

    如果直接使用 @Autoware 获取 bean 会直接使该 bean 为 null,这是因为这种配置过滤器的方法无法在过滤器中使用 Spring bean,因为 Filter 比 bean 先加载, ...

  4. EasyUI 添加一行的时候 行号出现负数的解决方案

    原因是:在jquery_easyui.js 看方法 insertRow : function(_736, _737, row) 以下小代码算行号,if (opts.pagination) { _73c ...

  5. extJs常用的四种Ajax异步提交

    /** * 第一种Ajax提交方式 * 这种方式需要直接使用ext Ajax方法进行提交 * 使用这种方式,需要将待传递的参数进行封装 * @return */function saveUser_aj ...

  6. 【Dubbo&&Zookeeper】1、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

    转自:http://blog.csdn.net/congcong68/article/details/41113239 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架 ...

  7. 不依赖AIDL的跨进程通信

    http://blog.csdn.net/lmj623565791/article/details/38461079 如果知道AIDL和binder的原理,可以简单写一个不依赖AIDL的跨进程通信 不 ...

  8. Http升级到Https (本地测试,无须域名和认证)

    在之前的语音识别的项目中,一切都在本地进行得很顺利,然后把写的Demo部署到服务器上给老大看的时候,通过IP访问(http://192.168.145.170:8080这样的形式)时,从一开始就坏掉了 ...

  9. 对象属性键值[key]属性问题

    1,obj[key]此时key代表是循环中的一个变量. var obj = {key:3,key1:1,key2:2,key3:3,toSting:4}; for (key in obj) { con ...

  10. python生成器简单了解

    1.什么是生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素, ...