HttPServletRequest 对象 基本应用

防盗链

获取Referer这个消息头,判断Referer是不是从指定页面来的。如果不是从指定页面的,跳转回指定页面。

这可以用于保证页面广告的观看,浏览量等。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取消息头
String referer = req.getHeader("Referer");
//判断访问来源
if (referer == null || !referer.contains("/hello.jsp")){
resp.sendRedirect("/hello.jsp");
return ;
}
//确定来源自指定页面后,开放资源
//设置页面编码
resp.setHeader("Content-Type","text/html;charset=UTF-8");
//输出内容
resp.getWriter().write("这是可以访问的资源。。。");
}

直接访问资源

重定向到指定页面

调试模式下可以看到 状态码 302 (被重定向)。

GET 方式提交数据

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//重定向
resp.sendRedirect("/request/getServlet?username=ling");
}

?后接数据。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求重定向的 Servlet 為 demoHttpServlet
String username = req.getParameter("username");
System.out.println(username);
}

用 Request 对象接收指定属性的值,并打印验证。

POST 方式表单提交数据

 @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置request 字符编码
req.setCharacterEncoding("UTF-8");
//接收数据
//接收单个值
String username = req.getParameter("username");
String password = req.getParameter("password");
String gender = req.getParameter("gender");
String address = req.getParameter("address");
String textarea = req.getParameter("textarea");
//接收多个值
String[] hobbies = req.getParameterValues("hobbies");
//接收隐藏域的值
String myname = req.getParameter("myname"); //控制台输出数据,验证是否接受数据
System.out.println(username);
System.out.println(password);
System.out.println(gender);
for (String hobby : hobbies) {
System.out.print(hobby);
}
System.out.println(" ");
System.out.println(address);
System.out.println(textarea);
System.out.println(myname);
}

相关页面可自行编写一个表单

这里需要提醒的是,注意页面的编码问题,否则会出现乱码问题。一般是因为编码问题引起,需要统一编码

这里的编码问题和 GET 方式的有所不同,POST方式提交的数据封装在 Request 对象里,而 GET 方式则是保存在消息头中传递到下一个Servlet或者页面中的。因此 GET 方法的编码问题相对来说有些棘手,因为涉及到 Tomcat 编码(默认是 ISO 8859-1)和浏览器编码之间的转换,也可以通过修改Tomcat的编码来实现等等,工作量远比 POST 方式直接设置 Request 对象的编码繁琐。 因此我给出下面一个建议(真不是我懒不写了):

一般情况下提交数据能使用就使用 POST 方式提交。

实现转发

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取 RequestDispatcher 对象,用于实现转发页面
RequestDispatcher dispatcher = req.getRequestDispatcher("/forward.jsp");
//使用 RequestDispatcher 的 forward() 方法实现转发, 并传入 Request 和 Response 对象
dispatcher.forward(req, resp);
}

转发的同时,还可传递数据。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//使用 Request 对象在转发时传递数据
req.setAttribute("username","ling");
//获取 RequestDispatcher 对象,用于实现转发页面
RequestDispatcher dispatcher = req.getRequestDispatcher("/forward.jsp");
//使用 RequestDispatcher 的 forward() 方法实现转发, 并传入 Request 和 Response 对象
dispatcher.forward(req, resp);
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page import ="javax.servlet.*"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>这是转发而来的页面。。。。。。</h1>
<br><br>
<% response.getWriter().write("我的名字是: "+(String)request.getAttribute("username")); %>
</body>
</html>

这里使用 JSP 页面,虽然现在新的项目一般不用了。

Servlet之间可以通过ServletContext实现通讯,ServletContext也能称之为域对象。⽽request也可以称之为域对象,只不过ServletContext的域是

整个web应⽤,⽽request的域仅仅代表⼀次http请求。

可以使⽤ServletContext和request实现Servlet之间的通讯,那么我们⽤哪⼀种呢?

⼀般的原则:可以使⽤request就尽可能使⽤request。因为ServletContext代表着整个web应⽤,使⽤ServletContext会消耗⼤量的资源,⽽request对象会随着请求的结束⽽结束,资源会被回收。使⽤request域进⾏Servlet之间的通讯在开发中是⾮常频繁的。

web.xml

参照 HttpServletRespnse 对象相关基本应用 进行配置。

HttPServletRequest 对象 基本应用的更多相关文章

  1. java web学习总结(十) -------------------HttpServletRequest对象

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  2. httpServletRequest对象、filter、servlet、servlet容器、catalina、tomcat、以及web容器之间的关系

    学习servlet的时候经常感到疑惑 HttpServletRequest是服务器创建的?还是servlet容器创建的? 过滤器是服务器创建的?还是servlet容器创建的? serlet容器和tom ...

  3. JavaWeb---总结(十)HttpServletRequest对象(一)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  4. javaweb学习总结(十)——HttpServletRequest对象(一)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  5. java web 学习十(HttpServletRequest对象1)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  6. HttpServletRequest对象请求转发和HttpServletResponse对象请求重定向之间的区别

    HttpServletRequest对象request代表浏览器请求对象,HttpServletResponse对象代表服务器响应对象,当用浏览器访问web服务器,发出请求时,Servlet调用ser ...

  7. HttpServletRequest对象

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  8. Http协议入门、响应与请求行、HttpServletRequest对象的使用、请求参数获取和编码问题

    1 课程回顾 web入门 1)web服务软件作用: 把本地资源共享给外部访问 2)tomcat服务器基本操作 : 启动:  %tomcat%/bin/startup.bat 关闭: %tomcat%/ ...

  9. 通过RequestContextHolder直接获取HttpServletRequest对象

    问题 朋友遇到一个问题:他想在Service方法中使用HttpServletRequest的API,但是又不想把HttpServletRequest对象当作这个Service方法的参数传过来,原因是这 ...

  10. JavaWeb学习 (九)————HttpServletRequest对象(一)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

随机推荐

  1. 死磕abstractqueuedsynchronizer源码

    第一次写博客,先练练手. 1.AQS是什么? 在Lock中,用到了一个同步队列AQS,全称为AbstractQueuedSynchronizer,它是一个同步工具也是lock用来实现线程同步的核心组件 ...

  2. linux下使用vscode和makefile搭建C++开发环境

    最近在linux上跑一些开源库做学习用, 顺手就搭了一下vscode的c++开发环境, 这里分享一下vscode进行C++开发的基本环境结构. 1. 首先是编辑器, vscode直接官网下载的, 后期 ...

  3. Shiro探索1. Realm

    1. Realm 是什么?汉语意思:领域,范围:王国:这个比较抽象: 简单一点就是:Realm 用来对用户进行认证和角色授权的 再简单一点,一个用户怎么判断它有没有登陆?这个用户是什么角色有哪些权限? ...

  4. Centos7 如何通过win10 的远程桌面连接进行远程访问

    首先,如果安装测centos7是已经安装了GNOME 或者 KDE 桌面, 则只需要再安装xrdp就可以了. 直接通过yum install xrdp 是不行的,因为xrdp 不在默认源中   先配置 ...

  5. OpenCL设计优化(基于Intel FPGA SDK for OpenCL)

    1.首先了解Intel FPGA SDK for OpenCL实现OpenCL的设计组件,包括: kernels, global memory interconnect, local memory, ...

  6. Docker技术入门与实战第2版-高清文字版

      Docker技术入门与实战第2版-高清文字版 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取 ...

  7. iOS开发实战之搜索控制器UISearchController使用

    当tableView中的数据过多的时候,在tableView上加一个搜索框就变的很必要了,本文就讨论搜索控制器的使用,以及谓词的简单实现. .m文件中代码如下 添加搜索控制器的各种协议 <UIS ...

  8. “随手记”开发记录day15

    今天完成了前两天没有完成的增加“修改”功能.对于已经添加的记账记录,长按可以进行修改和删除的操作.

  9. Python 3.9 beta2 版本发布了,看看新特性?

    随着 Python 3.9.0b1 的发布,即开发周期中计划的四个 beta 版本的首个,Python 3.9 的功能已经是完善了.在 10 月发布最终版本之前,还会有许多测试和稳定性方面的工作要做. ...

  10. Python笔试——毕业旅行问题

    毕业旅行问题 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的 ...