gpt4 book ai didi

java - Liferay : How to call a Servlet from a JSP Page

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:48 25 4
gpt4 key购买 nike

这是我的第一个 Portlet。我没有在我的 servlet 中获取值。请看程序。在我的自定义 Portlet Java 类 doView() 方法中,我显示了一个 JSP 页面

public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
include(viewJSP, renderRequest, renderResponse);
}

view.jsp 页面中,我引用了一个 servlet 来接收值:

<form action="formServlet" method="post">
<h1>Please Login</h1>
Login: <input type="text" name="login"><br>
Password: <input type="password" name="password"><br>
<input type=submit value="Login">
</form>

web.xml 文件中:

<servlet>
<servlet-name>formServlet</servlet-name>
<servlet-class>FormServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>formServlet</servlet-name>
<url-pattern>formServlet</url-pattern>
</servlet-mapping>

在我的 servlet 中

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = (String)request.getParameter("login");
System.out.println("The Name is "+name);
}

但我不知道为什么没有调用 servlet。

最佳答案

注意:这是对一个有点复杂的问题的回答。如果您正在尝试学习 portlet 创建的基础知识,我发布了一个 better answer在另一个问题中。


您正在使用 POST method 提交表单但是你的 servlet 只是实现了 doGet() ,它服务于 GET 方法。您应该使用 GET 提交表单或实现 doPost()方法(在其他情况下更可取)。

此外,有必要在 <url-pattern> 之前如果它是绝对模式,则用斜线表示内容。也就是应该是

<url-pattern>/formServlet</url-pattern>

代替

<url-pattern>formServlet</url-pattern>

就是说,现在忘记 servlet 吧!

您正在以最糟糕的方式之一进行操作。编写调用 servlet 的 portlet 确实是个坏主意。在使用 Liferay 很长时间后,我可以想象它或多或少是合理的情况,但它不存在,而且大多数时候也不会。

那么,您应该怎么做?您应该将表单提交到操作 URL。为此,首先包括 portlet JSP 中的标签库:

<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>

现在,替换 action通过 <portlet:actionURL /> 填写您的表格.此标记将替换为门户生成的特殊 URL。此外,在每个输入名称的前面加上标签 <portlet:namespace /> ;你的<input type="text" name="login">应该变成 <input type="text" name="<portlet:namespace />login">然后。该标记将被替换为仅与您的 portlet 关联的字符串;因为您可以在一个页面中有很多 portlet,所以每个输入都应该指定它来自哪个 portlet。这是最终结果:

<form action="<portlet:actionURL />" method="post">
<h1>Please Login</h1>
Login: <input type="text" name="<portlet:namespace />login"><br>
Password: <input type="password" name="<portlet:namespace />password"><br>
<input type=submit value="Login">
</form>

现在您要正确地提交您的数据了——但是如何获取提交的数据?当然没有必要使用servlet!相反,添加到您的自定义 portlet 类一个名为 processAction() 的方法.此方法应返回 void并接收两个参数,时间javax.portlet.ActionRequestjavax.portlet.ActionResponse .这是一个空 processAction() 的示例:

public void processAction(ActionRequest request, ActionResponse response) {
// Nothing to be done for now.
}

当对 Action URL 的请求(由 <portlet:actionURL /> 生成的请求)发送到服务器时,它首先由 processAction() 处理。方法,然后通过 doView() .因此,您要在 servlet 中编写的代码应该放在您的processAction() 中。 .那么结果应该是:

public void processAction(ActionRequest request, ActionResponse response) {
String name = (String)request.getParameter("login");
System.out.println("The Name is "+name);
}

试试吧,你会发现它会很好用。

关于java - Liferay : How to call a Servlet from a JSP Page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com