【问题标题】:Sending values from jsp to servlet then back to jsp将值从 jsp 发送到 servlet,然后返回到 jsp
【发布时间】:2015-07-26 19:53:27
【问题描述】:

我知道之前有人问过类似的问题,但由于某种原因它不起作用。我只是想检查用户是否在登录页面上输入了两个字段。如果没有,那么我想在 jsp 上显示消息,说他们需要输入两个凭据。这是我的 JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login</title>
</head>
<body>
    <h2>Some App</h2>
    <form action="login" method="post">
        <table>
            <tr>
                <td>Username</td>
                <td><input type="text" name="uname"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" id="pass" name="pass"></td>
            </tr>
        </table>
        <br> <input type="button" value="Submit">
    </form>
    <c:out value= "${error}"/>
</body>
</html>

那么这里是servlet:

@WebServlet("/login")
public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        HttpSession session = request.getSession();

        //Getting values from the form
        String username = request.getParameter("uname");
        String password = request.getParameter("pass");

        System.out.println("Username is: "+ username);
        System.out.println("Password is: "+ password);

        //User user = new User();

        if((username.equals(""))|| password.equals("")){

            String message = "Please enter both the credentials";
            request.setAttribute("error", message);
            //RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
            //rd.forward(request, response);
            getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);

        }
        else{
            RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
            rd.forward(request, response);
        }

        //Setting values in the session
        session.setAttribute("username", username);
        session.setAttribute("password", password);
    }
}

由于我正在尝试使用 maven,这里是我的 pom.xml 文件,其中为 jstl jar 添加了依赖项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

为什么 c:out 标签不打印任何东西?我究竟做错了什么?任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 您的输出是什么?您可以调试的一种方法是将一些 System.out.println() 值放入您的方法中,以确保您到达所需的区域。另外,请注意您在“index.jsp”中将“I”大写
  • @bphilipnyc 我无法访问 servlet。请在下面查看我对 NaMaN 用户的回复。我现在也在为 servlet 更新我的代码。谢谢。

标签: java jsp maven servlets


【解决方案1】:

您正在混合使用两种样式向客户端返回响应。尝试使用此代码传递错误消息:

if((username == null)|| password == null) {              
    String message = "Please enter both the credentials";
    request.setAttribute("error", message);
    getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
}

经验法则是您必须将request.setAttribute()forward()request.getSession().setAttribute()response.sendRedirect() 一起使用。

【讨论】:

    【解决方案2】:

    尝试使用 ${sessionScope['error']} 而不是 ${error}。如果这有效,那么您可能在另一个范围内有另一个具有相同名称“错误”的属性

    【讨论】:

      【解决方案3】:

      您还应该检查usernamepassword 是否为空。即(username != null &amp;&amp; username.trim().isEmpty())

      【讨论】:

        【解决方案4】:

        大家的建议非常宝贵。我做错了几件事:不正确的 servlet 映射(@WebServlet 修复了它),将代码更改为 @NaMaN 和 @bphilipnyc 回复的内容,而我无法访问 servlet 的最大错误是我有输入类型作为jsp中的按钮。我将其更改为输入类型提交,然后它起作用了。谢谢大家的回复。真的很感激。

        【讨论】:

        猜你喜欢
        • 2014-01-11
        • 2013-03-29
        • 2013-04-27
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        • 2013-08-13
        • 1970-01-01
        • 2012-09-06
        相关资源
        最近更新 更多