jsp关于HttpServlet对象的一些基础操作以及乱码的一些提示

HttpServletRequest 对象

一、介绍

HttpServletRequest 对象:主要作用是用来接收客户端发送过来的请求信息。
HttpServletRequest 是 ServletRequest 的子接口,ServletRequest 只有一个子接口,就是
HttpServletRequest。
目的:现在主要用的协议是 HTTP 协议,但以后可能出现更多新的协议。若以后想要支持这
种新协议,只需要直接继承 ServletRequest 接口就行了。

二、常用方法

常用方法
getRequestURL(): 获取客户端发出的请求时的完整 URL
getRequestURI() :获取请求行中的资源名称部分(项目名称开始)
getQueryString(): 获取请求行中的参数部分
getMethod(): 获取客户端请求方式
getProtocol() :获取 HTTP 版本号
getContextPath(): 获取 webapp 名字
获取请求头
getHeader(String): 获取单个请求头内容
Enumeration getHeaderNames() :获取所有的请求头名称集合
获取客户端请求参数(客户端提交的数据)
getParameter(name): 获取指定名称的参数
getParameterValues(String name):获取指定名称参数的所有值
getParameterNames():获取一个包含请求消息中的所有参数名的 Enumeration 对象
getParameterMap():返回一个保存了请求消息中的所有参数名称和值的 Map 对象

三、关于于乱码

1、原因

  由于现在的 request 属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过
程中默认使用的编码方式为 ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这
种乱码问题,需要设置 request 中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码
数据以后,再通过相应的编码格式还原。

2、get以及post方式乱码的一些解决方案

Get:参数在请求行里 默认使用ISO-8859-1
Tomcat8及以上版本 中文可能不会乱码
Tomcat7及以下版本 中文可能乱码
解决方法:new String(uname.getBytes(“ISO-8859-1”),“UTF-8”);
Post:参数在请求体里,使用页面编码
前台 使用页面编码UTF-8 后台 ISO-8859-1 会导致乱码
解决方法:设置服务器默认解码字符集 针对请求体 放在使用request对象之前,
req.setCharacterEncoding(“UTF-8”);
new String(request.getParameter(name).getBytes(“ISO-8859-1”),“UTF-8”);

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet02 extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");		
		String uname = req.getParameter("uname");	
		String upwd = req.getParameter("upwd");		
		// 万能方法 解决乱码问题
		// String str = new String(uname.getBytes("ISO-8859-1"),"UTF-8");		
		System.out.println("账户:" + uname + ",密码:" + upwd);
	}
}

四、请求转发

1、介绍

	请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行
保存,地址栏中的 URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有
一个请求发出。
req.getRequestDispatcher("转发的路径").forward(req,resp)

HttpServletResponse对象

一、介绍

	Web 服务器收到客户端的 http 请求,会针对每一次请求,分别创建一个用于代表请求的 request
对象和代表响应的 response 对象。
  request 和 response 对象代表请求和响应:获取客户端数据,需要通过 request 对象;向客户端
输出数据,需要通过 response 对象。
  HttpServletResponse 的主要功能用于服务器对客户端的请求进行响应,将 Web 服务器处理后的
结果返回给客户端。service()方法中形参接收的是 HttpServletResponse 接口的实例化对象,这个对象
中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

二、常用方法

addHeader(String name, String value) 添加指定的键值到响应头信息中
containsHeader(String name) 判断响应的头部是否被设置
encodeURL(String url) 编码指定的 URL
sendError(int sc) 使用指定状态码发送一个错误到客户端
setHeader(String name, String value) 设置指定响应头的值
setStatus(int sc) 给当前响应设置状态
setContentType(String ContentType) 设置响应的 MIME 类型
getWriter() 获取输出字符流
getOutputStream() 获取输出的字节流

三、页面刷新以及跳转

  所有头信息都是随着请求和回应自动发送到服务器端(客户端),在 response 中一个比较常用
的头信息就是刷新的指令,可以完成定时刷新的功能。
   resp.setHeader(“refresh”,“2”);
  对于刷新的头信息,除了定时的功能外,还具备了定时跳转的功能,可以让一个页面定时跳转到一
个指定的页面。(已经注册成功,两秒后跳转到登陆页面)
response.setHeader(“refresh”,“3;URL=ok.html”);

相对路径以及绝对路径问题

相对路径
  书写路径时,无论是哪类请求相对路径都是相对当前资源的路径
  书写格式:直接从当前路径开始写,目录前不加任何符号;a.html html/b.html
  相对路径在请求转发时可能会失效,因此开发中不推荐使用相对路径
绝对路径
  使用绝对路径时则有两种方式,以 http:// 开头,或者以 / 开头,但是注意:只有客户端跳转才能
使用 http:// 这种方式,此时需要写出资源的完整路径;另一种以 / 开头的绝对路径,则是绝对到端口
后,例如本机则是:http://localhost:8080 此时则是 / 代表以上一串字符。 /helloworld/a.html → htt
p://localhost:8080/helloworld/a.html
  浏览器中:“/”代表的是 http://主机|IP:端口
  服务器中:“/”代表的是 http://主机|IP:端口/站点名
  现在对于我们来说,只有请求转发属于服务器跳转,其他都是客户端跳转。通过观察地址栏状态也
可判定跳转类型(请求类型),地址栏不变 → 服务器端跳转;地址栏改变 → 客户端跳转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值