Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在servlet上使用doGet()方法处理大量操作

在servlet上使用doGet()方法处理大量操作
EN

Stack Overflow用户
提问于 2013-06-20 08:17:04
回答 3查看 885关注 0票数 0

我正在使用的工具只能发送GET请求,我需要使用请求中包含的信息来处理繁重的操作。然后,这些操作返回一个包含我将用于重定向的URL的字符串。

经过一些研究,我发现doGet()方法用于预处理请求,而doPost()则可以用于后处理。

有任何方法可以使用doGet()方法来执行这些繁重的操作吗?如果我必须使用doPost()方法,如何将我的请求“转换”为POST请求?

谢谢。

编辑:我已经尝试在doGet方法中处理这些繁重的操作。但是,servlet似乎不会等到生成了用于重定向的url字符串。我已经看到,尝试从性能上同步doGet()方法是一件坏事。

编辑2-关于我要做的事情:我正在使用的工具是Oracle解决方案。您可以在客户端内启动自定义操作,包括web应用程序。启动自定义操作将向应用程序发送GET请求,其中包含启动应用程序的页面的所有信息(用户、选定的项等),然后应用程序使用这些信息处理我谈到的繁重操作。操作包括使用相同的ID在Oracle客户端上创建一个新会话,根据所选项进行查询,创建XML数据,甚至使用位于Oracle服务器上的外部程序。最后,它返回一个下载URL,您可以从那里下载PDF报告,我使用这个URL重定向应用程序。

以下是servlet代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.servlets;

import java.io.IOException;
import javax.naming.InitialContext;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.actions.agileSessionHandler;
import com.actions.BOMComparisonReport;

public class DefaultServlet extends HttpServlet {

    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{

        agileSessionHandler handler = new agileSessionHandler(...);
        BOMComparisonReport report = new BOMComparisonReport(...);
        handler.setSessionObject(request);
        String url = report.generateBOMReport(...);
        request.setAttribute("redirectURL", url);
        this.getServletContext().getRequestDispatcher( "/WEB-INF/BOMCompDefault.jsp" ).forward( request, response );
    }

}
EN

回答 3

Stack Overflow用户

发布于 2013-06-20 08:34:04

我已经尝试在doGet方法中处理这些繁重的操作。但是,servlet似乎不会等到我用来重定向的url字符串生成之后。

听起来好像你在启动一个新的线程,却完全忘记了它。在Java环境中,这是一个非常糟糕的想法。别干那事。只需在完全相同的线程中进行处理(即根本不创建new Thread() )。如果您真的打算异步执行,那么您应该在EJB上使用例如@Asynchronous方法,然后利用轮询或推送将进度/结果通知客户端。

不管你是在GET还是POST请求中都这样做。关键是,GET请求是幂等的、可书签的、可重执行的,每次结果完全相同。考虑一下SQL SELECT查询。POST请求不是。它们将用于操纵服务器端的数据。请考虑执行SQL UPDATEDELETE查询。您不希望您的数据在每一个F5新闻中都被修改或删除,甚至当搜索机器人来索引get链接时也是如此,对吗?

票数 1
EN

Stack Overflow用户

发布于 2013-06-20 08:19:15

如果要将请求“转换”为POST请求,只需从doGet调用doPost方法即可,但如果需要POST功能,则不会改变任何内容。

如果您的工具发送了大量的请求参数,那么所有的参数都将被附加到url中,这根本不安全。

对于GET请求,可以成功地管理的url的长度也因容器而异。

正如The所告诉的,幂等性意味着一次又一次地执行相同的操作,而不会造成任何副作用

方法GET是幂等的,因为它只是请求资源,一次又一次地请求资源不会导致任何问题,但是POST由表单提交组成,并且多次输入表单数据可能会导致严重的问题。当您的货币交易发生超过一次的单一留置权购买时,请尝试考虑该示例。

资源的简单链接是GET请求,您可以对它们进行书签并一次又一次地请求。

GET请求不太安全,因为所有参数都在url中可见,而POST请求更安全,因为它们没有显示在url中的任何地方。

大多数情况下,GET url可以是2048个字符,这意味着您可以发送有限的数据。对于POST方法,发送的数据没有限制。

票数 0
EN

Stack Overflow用户

发布于 2013-06-20 08:22:51

POSTGET方法没有基于重运算的分类,GET是幂等的,POST不是幂等的。GET是幂等的意思,因此,相同的操作多次使用应该产生相同的结果,当它与POST一样有副作用。

顾名思义,GET用于从服务器获取一些信息,而POST则用于将数据发送到服务器以供进一步处理。但是,没有人能阻止你实现一个非幂等的GET方法。

根据维基百科的说法:

GET请求指定资源的表示形式。注意,GET不应该用于引起副作用的操作,例如在web应用程序中使用它来执行操作。其中一个原因是GET可能被机器人或爬行器任意使用,它们不需要考虑请求应该造成的副作用。 POST将要处理的数据(例如,从HTML )提交给标识的资源。数据包括在请求正文中。这可能导致创建新资源或更新现有资源,或两者兼而有之。

使用GET,您可以使用查询字符串将有限的数据发布到服务器,而且由于URL不能具有无限长,因此这些数据也是有限的。数据也显示在浏览器窗口中。

我已经看到,尝试从性能上同步doGet()方法是一件坏事。

你想做什么?每个请求都有自己的线程执行doGet()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17218699

复制
相关文章
解决servlet doGet() 中文乱码问题
servlet中doPost()方法中设置request、response的编码(解决中文乱码),可以如下设置: response.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8"); 但是在doGet()方法中设置request的编码还是不能解决中文乱码。 可以使用如下方法: 把Tomcat下面conf文件夹下的server.xml文件中: <Connector port="8080" protocol="HTTP/1.
用户1220053
2018/02/09
1.2K0
在机器学习中处理大量数据!
知乎 | https://zhuanlan.zhihu.com/p/357361005
Datawhale
2021/03/26
2.3K0
在机器学习中处理大量数据!
封装多线程处理大量数据操作
地球人都知道Thread和ThreadPool接受的委托都是没有返回值的。要想取的返回值,我们就得自己动手了,我们需要构造一个AsyncContext类,由这个类来保存异步执行的状态以并存储返回值。 using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.Threading; using System.Diagnostics; name
欢醉
2018/01/22
1.1K0
springmvc 在方法上使用 @ModelAttribute 注解
@ModelAttribute注解不仅可以用在方法上也可以用在方法参数上。本节讲述@ModelAttribute在方法上的使用,下一节将讲述其在方法参数上的使用。
明明如月学长
2021/08/27
7950
在springboot 中配置使用servlet
还记得,说到web项目,最早接触的就是servlet,实际上SSH项目,也是依赖于servlet,在web.xml文件中进行配置。那么使用了springboot之后,不仅有一个疑问,虽然SpringMVC已经帮我们很容易的实现了spring web项目的使用,只需要@Controller就能搞定。但是我们需要使用servlet该如何做呢?虽然这种需求非常少,但是在springboot的官方文档对servlet的使用有过描述。下面我们来看看在springboot中如何使用和配置servlet。
冬天里的懒猫
2021/03/02
5K0
在Mac OS操作系统上安装 PostgreSQL方法
使用 EnterpriseDB 来下载安装,EnterpriseDB 是全球唯一一家提供基于 PostgreSQL 企业级产品与服务的厂商。
用户5005176
2021/08/11
2.2K0
使用thrift大量编译警告消息方法
https://issues.apache.org/jira/browse/THRIFT-1824
一见
2018/08/07
6630
在Servlet的init方法中创建线程
 servlet代码如下: package com.weichat.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.se
庞小明
2018/03/07
2.8K0
Servlet一:使用Servlet
Servlet 是 Java Web 开发的基⽯,与平台⽆关的服务器组件,它是运⾏在 Servlet 容器/Web 应⽤服务器/Tomcat,负责与客户端进⾏通信。 主要功能:
乐心湖
2020/07/31
1.2K0
Servlet一:使用Servlet
Nexus操作使用(上)
如果你想配置 nexus 的应用在本地启动的 JVM参数,可以在 nexus.vmoptions:
陈不成i
2021/06/28
3.5K0
docker overlay2占用大量磁盘空间处理方法
在使用docker时,往往会出现磁盘空间不足,导致该问题的通常原因是因为docker中部署的系统输出了大量的日志内容。
程序新视界
2020/02/18
13.1K1
Python使用pycuda在GPU上并行处理批量判断素数
借助于扩展库pycuda,可以在Python中访问NVIDIA显卡提供的CUDA并行计算API,使用非常方便。安装pycuda时要求已正确安装合适版本的CUDA和Visual Studio(注意,并不是版本越新越合适,目前2015暂时还不行,最好使用VS2013),然后再使用pip安装pycuda。 下面的代码用来统计100000000之内的所有素数个数。 import time import pycuda.autoinit import pycuda.driver as drv import numpy
Python小屋屋主
2018/04/16
2K0
Python使用pyopencl在GPU上并行处理批量判断素数
扩展库pyopencl使得可以在Python中调用OpenCL的并行计算API。OpenCL(Open Computing Language)是跨平台的并行编程标准,可以运行在个人电脑、服务器、移动终端以及嵌入式系统等多种平台,既可以运行在CPU上又可以运行于GPU上,大幅度提高了各类应用中的数据处理速度,包括游戏、娱乐、医学软件以及科学计算等等。 import numpy as np import pyopencl as cl import pyopencl.array from pyopencl.ele
Python小屋屋主
2018/04/16
1.9K0
Docker overlay2 占用大量磁盘空间处理方法
在使用 docker 时,往往会出现磁盘空间不足,导致该问题的通常原因是因为 docker 中部署的系统输出了大量的日志内容。 此时,可通过手动或定时任务进行清除。 针对 / var/lib/docker/overlay2 空间占用很大网上提供了很多解决方案,其中有些误导的说法需要去迁移路径等操作。其实磁盘空间的占用和 overlay 没关系(它的 usage 和真实的 disk usage 相同),它只是一个 docker 的虚拟文件系统,真实的文件系统是前者 / dev/vda1, 可以看到路径所指为根目录,所以你要去找是哪里出现了垃圾。 通常情况下与 overlay2 的同级目录下会有如下的目录:
jwangkun
2021/12/23
6.1K0
【愚公系列】2023年03月 Java教学课程 086-Servlet服务器生命周期和映射
Servlet的生命周期由创建、初始化、服务请求和销毁四个阶段组成。创建阶段: Servlet实例被创建,它的init()方法被调用。初始化阶段: Servlet实例被初始化,它的init()方法被调用,它可以访问ServletConfig对象。服务请求阶段: Servlet的service() 方法被调用,以响应客户端的请求。销毁阶段: Servlet实例被销毁,它的destroy()方法被调用。
愚公搬代码
2023/03/16
2480
【愚公系列】2023年03月 Java教学课程 086-Servlet服务器生命周期和映射
JSP和Servlet的六种中文乱码处理方法
在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式。所以请求的时候便有get请求和post请求。每种方式都有着不同的解决方法,之所以出现乱码,原因就在于get请求时,其传递给服务器的数据是附加在URL地址之后的;而post的请求时,其传递给服务器的数据是作为请求体的一部分传递给服务器。这也就导致了对它们所产生的乱码的处理方式是不同的。
红目香薰
2022/11/29
2K0
GraalVM在Facebook大量使用,性能提升显著!「建议收藏」
Facebook正在使用GraalVM来加速其Spark的工作负载,并减少内存和CPU的使用。请继续阅读,了解它们的迁移故事、性能改进结果和未来计划。
全栈程序员站长
2022/11/05
1.9K0
GraalVM在Facebook大量使用,性能提升显著!「建议收藏」
Servlet
服务器在接收到浏览器的请求后,会自动调用对应的逻辑代码进行请求处理。但是逻辑代码是由程序员编写并放到服务器中,那么服务器怎么知道该怎么调用并调用哪个类和哪个方法来进行请求处理?
Carlos Ouyang
2022/05/10
9500
Servlet
点击加载更多

相似问题

Servlet doGet() doPost()方法

23

servlet doGet和doPost方法

52

servlet中的doGet方法

30

在doget()方法中调用servlet的销毁方法

13

在servlet中重写doGet

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文