前言
本章学习servlet中的request、response对象
方法
1.概念
相信大家在之前的章节已经看到了,我用到了request对象获取前台传递过来的数据:
String username = request.getParameter("username");
String password = request.getParameter("password");
服务器在收到浏览器发出的请求后,会自动创建一个request对象用来保存本次请求的所有相关信息~
2.常用方法
在说这个之前,还是和Java刚开始讲String类的时候一样,需要大家在网上下载相关的API,也就是JavaEE的API文档!
网址:https://www.oracle.com/technetwork/java/javaee/downloads/java-ee-sdk-downloads-3908423.html
大家把下面的这个包下载好之后,解压缩,找到.\java_ee_sdk-8\glassfish5\docs\api\javaee-full文件路径,点击index.html即可。
下面我们来看一下常用的request对象的方法吧!
- String getParameter(String name) : 该方法用来获取前台页面name属性传递的表单值,只能获取单个值(text、password)
- String[] getParameterValues(String name):该方法用来获取前台页面name属性传递的表单值,可获取多个值(checkbox)
- void setCharacterEncoding(String env) throws UnsupportedEncodingException 设置请求编码
- void setAttribute(String name,Object o):设置名字为name的request的参数值
- Object getAttribute(String name):返回由name指定的属性值
--关于request对象的其他方法,我们今后用到的时候在进行总结。
接下来我们来看一下response对象的方法吧!
因为response对象的方法不是那么常用,所以我就举个例子
- void sendError(int sc,String msg) throws IOException:该方法用来向客户端发送错误信息
Servlet代码中加入该方法后的效果是什么呢?请看:
response.sendError(404,"This Page is Not Found");
那么你的页面发送请求后会出现如下错误提示:
是不是感觉很熟悉啊!
其他
1.设置请求转发
* 作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。
* 使用:
* req.getRequestDispatcher("要转发的地址").forward(req, resp);
* 地址:相对路径,直接书写servlet的别名即可。
* 特点:
* 一次请求,浏览器地址栏信息不改变。
相信大家发现了之前写的代码中出现了如下代码:
request.getRequestDispatcher("/success.jsp").forward(request, response);
这句代码是一个固定的格式,用来设置请求转发。作用是servlet处理完请求之后,将跳转到其他页面或者servlet
2.设置重定向
Servlet处理完后跳转页面或者Servlet还有另外一种方法,那就是重定向
* 解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题。
* 使用:
* resp.sendRedirect(String uri);
* 示例:
* resp.sendRedirect("/login.jsp");
* 特点:
* 两次请求,两个request对象。
* 浏览器地址栏信息改变
response.sendRedirect("/login.jsp");
其作用效果和请求转发一样!
3.请求转发和重定向的区别
我在其他博主那里找到了有价值的信息,传送门:https://blog.csdn.net/liubin5620/article/details/79922692
总结:
- 如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。
- 如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。
- 其他情况建议使用请求转发。
4.request对象作用域
request对象用于解决一次请求内的数据共享,也就是说在一次请求内只有一个request对象并且这次请求内的所有操作共享同一个request