Java 从“传递值”;“多吉特”;至;doPost";(在同一个servlet中)
编辑:这不是问题的重复,因为我试图在相同的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”,则
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);
}