【发布时间】:2014-03-06 15:36:26
【问题描述】:
我在提交简单的 Java 表单时遇到问题。
我有我的 login.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>The best login page in the world</title>
</head>
<body>
<h1>Connexion</h1>
<form id="asdasd" name="coucou" method="post" action="doLogin">
<input type="text" name="user_email" />
<input type="password" name="user_password" />
<input type="submit" name="asd" value="Se connecter" />
</form>
</body>
</html>
我的 web.xml 指定 doLogin 实际上是 servlet loginServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>com.courses.web.servlet.loginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/doLogin</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
还有我的 loginServlet.java
public class loginServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse response) {
String username = req.getParameter("user_email");
String password = req.getParameter("user_password");
Console console = System.console();
console.printf("mail : %s\npassword: %s\n", username,password);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
没什么复杂的,但我从 getParameter 得到的变量总是 NULL,我不知道为什么。
我做错了什么?
【问题讨论】:
-
您访问哪个 URL 来显示您的登录视图?
-
另外,既然您已经在使用 JSF,为什么不将它也用于您的登录视图呢?这样可以节省太多的开发时间。顺便说一句,如果您碰巧使用 JSF 2,我建议您将 Faces Servlet 的 URL 模式更改为
*.xhtml或*.jsp,而不是旧的/faces/*。 -
我从 localhost:8080/[projectname]/login.jsp 访问它。我对 Java 很陌生,使用 JSF 会改变我的登录视图吗?
-
我试过了,没有任何改变
-
谢天谢地,它没有工作,那意味着你的服务器坏了。在这一点上,我会为您的浏览器(或任何内置功能)使用一个插件来跟踪正在发送和接收的 HTTP 流量,以查看其中的实际内容;你所拥有的是正确的,应该可以工作!