ПРИМЕЧАНИЕ : Это ответ на несколько сложный вопрос. Если вы пытаетесь изучить основы создания портлетов, я разместил лучший ответ в другом вопросе.
Вы отправляете форму, используя метод POST , но ваш сервлет просто реализует doGet()
, который обслуживает метод GET. Вы должны либо отправить свою форму, используя GET, либо внедрить метод doPost()
(что было бы предпочтительнее в других ситуациях).
Кроме того, перед символом <url-pattern>
необходимо ставить косую черту, если это абсолютный шаблон. То есть должно быть
<url-pattern>/formServlet</url-pattern>
вместо
<url-pattern>formServlet</url-pattern>
Тем не менее, забудь сервлеты сейчас!
Вы делаете это одним из худших способов . Это действительно плохая идея написать портлет, который вызывает сервлет. После долгого времени работы с 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">
тогда. Этот тег будет заменен строкой, которая связана только с вашим портлетом; поскольку на странице может быть много портлетов, каждый вход должен указывать, из какого портлета он поступает. Это конечный результат:
<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>
Теперь вы собираетесь отправлять свои данные правильно - но как получить отправленные данные? Разумеется, использовать сервлет не обязательно! Вместо этого добавьте в свой пользовательский класс портлета метод с именем processAction()
. Этот метод должен вернуть void
и получить два параметра времени javax.portlet.ActionRequest
и javax.portlet.ActionResponse
. Это пример пустого processAction()
:
public void processAction(ActionRequest request, ActionResponse response) {
// Nothing to be done for now.
}
Когда запрос на URL-адрес действия (такой как сгенерированный <portlet:actionURL />
) отправляется на сервер, он сначала обрабатывается методом processAction()
, а затем doView()
. Поэтому код, который вы бы написали в своем сервлете , должен быть помещен в ваш processAction()
. Результат должен быть тогда:
public void processAction(ActionRequest request, ActionResponse response) {
String name = (String)request.getParameter("login");
System.out.println("The Name is "+name);
}
Попробуйте, и вы увидите, что это будет хорошо работать.