Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从“传递值”;“多吉特”;至;doPost";(在同一个servlet中)_Java_Html_Servlets - Fatal编程技术网

Java 从“传递值”;“多吉特”;至;doPost";(在同一个servlet中)

Java 从“传递值”;“多吉特”;至;doPost";(在同一个servlet中),java,html,servlets,Java,Html,Servlets,编辑:这不是问题的重复,因为我试图在相同的servlet的doGet和doPost之间发送数据。另一个问题是关于如何在不同的servlet之间发送数据,但我已经在通过将信息附加到URL(请参见下面的第一个代码片段)来实现了这一点,我无法在同一个servlet中实现这一点。另外,这个链接问题来自2011年,使用Tomcat5.5,而我使用的是8.5 我正在开发一个小型Java 8/Tomcat 8.5“应用程序”,其中包含两个servlet和一个过滤器:如果servlet路径为“/hello”,则

编辑:这不是问题的重复,因为我试图在相同的servlet的
doGet
doPost
之间发送数据。另一个问题是关于如何在不同的servlet之间发送数据,但我已经在通过将信息附加到URL(请参见下面的第一个代码片段)来实现了这一点,我无法在同一个servlet中实现这一点。另外,这个链接问题来自2011年,使用Tomcat5.5,而我使用的是8.5

我正在开发一个小型Java 8/Tomcat 8.5“应用程序”,其中包含两个servlet和一个过滤器:如果servlet路径为“/hello”,则过滤器将启动,并在没有活动会话时执行此操作:

response.sendRedirect(request.getContextPath() + "/login?p="+request.getServletPath());
这将加载“/login”servlet(
LoginServlet.java
)及其html文件(
LoginHTML.html
):

redi
包含以前访问过的路径,但我现在正在寻找一种方法,以某种方式将其传递给
doPost
,这样它就可以返回到上一页


正如您在上面的html代码中所看到的,我已经在表单中添加了隐藏属性
redirect
,但是如何在运行时(可能在
doGet
中)将其值设置为
redi
中的值,以便使用
request.getParameter(“redirect”)
doPost
中访问它?还有其他方法吗?

这不是最好的方法,但你可以试试。您可以使用JavaServer页面和JSTL或其他类似的东西来代替HTML

doGet()
方法中,使用
request.setAttribute(“redi”,redi)
。 在JSP中,在隐藏字段值中使用
${redi}

doPost()
方法中,使用
request.getParameter(“重定向”)。

@BalusC这不是问题的重复,因为我试图在同一servlet的
doGet
doPost
之间发送数据。另一个问题是关于如何在不同的servlet之间发送数据,但我已经在通过将信息附加到URL(请参见下面的第一个代码片段)来实现这一点,但我无法在同一个servlet中实现。@BalusC感谢您再次打开此问题。接受答案的JST部分可以工作,但您必须使用jsp文件。我宁愿保留我在问题中提到的html版本,因此不使用任何额外的库。@BalusC我的意思是,我宁愿不使用jsp文件,因为这需要JST库。是否可以在运行时向html页面添加隐藏属性之类的内容?我试图在
LoginServlet.doGet
中的
forward
之后简单地写一个
PrintWriter
,但这并没有增加任何内容。或者是否有一种完全不同的方式将额外的信息从
doGet
传递到
doPost
(不需要额外的库)?谢谢,我尝试了,但不幸的是
请求。getParameter(“重定向”)
doPost
中返回
null
<代码>这不是最好的方法,但你可以试试。-那么什么是“最好的方法”?是否可以用html文件(而不是jsp)来实现这一点?我设法修复了它:
name=“redirect”
丢失了。全文是:
。不过,我不想使用jsp,有没有办法只使用一个基本的html文件呢?如果你想使用html文件,可以使用Thymeleaf,但这不是很方便。servlet通常与jsp一起使用。传递值有3种方法​​在servlet应用程序中的请求之间,有cookie、隐藏字段(您的选项)和应用程序上下文(使用
ServletContextListener
实现)。另一种方法是使用会话,在我看来,这种方法更好。您可以通过
request.getSession()
使用它
HttpSession
类具有方法
setAttribute()
getAttribute()
。使用后,您可以通过
removeAttribute()
将其删除。
<body>
    <form method="POST" action="login">
        <label for="username">Username:</label><br>
        <input type="text" id="username" name="username"><br>
        <label for="password">Password:</label><br>
        <input type="password" id="password" name="password"><br><br>
        <input type="hidden" id="redirect" value="">
        <input type="submit" value="Login">
    </form>
</body>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String redi = request.getParameter("p");
    RequestDispatcher dispatcher = request.getRequestDispatcher("/html/LoginHTML.html");
    dispatcher.forward(request, response);
}