- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我的第一个 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.ActionRequest
和 javax.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/
我是一名优秀的程序员,十分优秀!