百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

了解HttpServletRequest 对象 基本应用

zhezhongyun 2025-03-10 22:32 22 浏览


HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。简单来说,要得到浏览器信息,就找HttpServletRequest对象。

防盗链#

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

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

Bash
Copy@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 方式提交数据#

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

?后接数据。

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

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

POST 方式表单提交数据#

Copy @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 方式提交。

实现转发#

Copy@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);
    }

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

Copy@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);
    }
Copy<%@ page contenttype='text/html;charset=UTF-8' language='java'>
<%@page import='javax.servlet.*'>


    Title


这是转发而来的页面。。。。。。



<% response.getwriter.write stringrequest.getattributeusername>

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

Servlet之间可以通过ServletContext实现通讯,ServletContext也能称之为域对象。而request也可以称之为域对象,只不过ServletContext的域是
整个web应用,而request的域仅仅代表一次http请求。

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

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

最后,咱给小编:

1. 点赞+关注

2. 点头像关注后多多评论,转发给有需要的朋友。

谢谢!!

相关推荐

历时10个多月,学习了这132 个CSS 特效,还不来学习

这132个特效,是我历时10个多月在油管一个一个跟着敲出来的,为了加强记忆,每个练习,我都录制了视频,在这里分享出来给大家。大家可能又会调侃了,你是工作不饱和吧,有时间做这些。其实,我目前工作还是挺饱...

让CSS flex布局最后一行左对齐的N种方法

作者:张鑫旭https://www.zhangxinxu.com/wordpress/2019/08/css-flex-last-align/前言小伙伴们是否还记得,之前小编也发布了几篇关于CSS相关...

CSS 奇思妙想 background-clip

作者:SbCoco来源:iCSS前端趣闻说起background-clip,可能很多人都很陌生。Clip的意思为修剪,那么从字面意思上理解,background-clip的意思即是背景裁剪。我...

CSS简单圆角框实现方法

先看下效果图对基于CSS的设计最初的批评意见之一是CSS太死板了,只能建立方框,因此本次我们需要用图形软件创建下面两个图形,一个用于顶部,一个用于底部。接下来我们详细介绍它的实现方法:1.创建一个简单...

文档声明:HTML文档的基石

在前端开发的世界里,文档声明虽是一个看似不起眼的细节,却在网页的解析和渲染过程中扮演着至关重要的角色。今天,就让我们深入探讨文档声明的奥秘,揭开它背后的原理和重要性。一、文档声明的定义与作用文档声明,...

CSS 单位指南

在前端开发中,CSS单位的选择直接影响着页面的布局效果和响应式表现。本文将系统介绍CSS中各种单位的特性、使用场景和最佳实践,帮助你做出更明智的选择。一、CSS单位分类全景图CSS单位可分为...

CSS3 遮罩

在网页设计中,我们经常需要实现一些特殊的视觉效果来增强用户体验。CSS3遮罩(mask)允许我们通过控制元素的可见区域来创建各种精美的视觉效果。本文将带你全面了解CSS3遮罩的功能和应用。什么是...

用css如何实现三角形

在实际编程中我们经常会遇到下拉菜单的下三角和一些特殊的图形,那么这些如何用css来实现呢?例1例2例3原理:仔细想想,原理非常简单,利用CSS的border以及它的属性值transparent来实现三...

css 实现各种多边形图案

使用css的border边框属性和宽度高度可以实现各种形状的图形,如下:梯形html:<divclass="trapezoid"></div>css:/*梯形...

用css制作头像渐变边框

之前有一个头像渐变边框的需求,当时是全部用的切图,但是不同的地方可能头像大小不一样,切图适配性太差,正好这几日学了下css渐变的各种妙用,想到之前的头像边框其实可以用渐变来实现。当时用到的头像切图:目...

如何帮图片加边框?方法有三种

如何帮图片加边框?随着社会经济的发展,更多人开始注意外在物品的美观度,例如图片有无边框等装饰。而在设计和排版中,给图片加边框是一种常见的技巧,可以使图片更突出、更有吸引力。有许多方法可以完成这个任务,...

边框图片怎么做?提供三种方法

边框图片怎么做?边框图片可以为图片增加一定的装饰和美感,使其更加突出和引人注目。同时,边框图片也可以用于设计海报、宣传品等,让设计更加精美和专业。边框图片是一种常见的设计元素,可以为图片增加一定的装饰...

css设置div只显示某一边的边框

在网页设计中经常用到css来设计各种边框样式以及颜色等,有时候需要一个div只显示一个边框,那么你可能会用到下面的一些方法。一、CSSborder-width属性border-width是实现显示...

适合在任何地方使用的 Linux:15 个小型 Linux 发行版

如果你有一台老旧的PC或超小型设备,这些Linux发行版中的一个应该适合你。来源:https://linux.cn/article-12281-1.html作者:DavidGewirtz译者...

css box-shadow的巧妙应用

还有人不会写阴影吗下面就带大家来分享一些实实在在的干货。box-shadow的作用box-shadow的作用是给元素添加阴影,说简单点就是要给元素阴影特效就用box-shadow就行。box-shad...