Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将值从jsp发送到servlet,然后返回到jsp_Java_Jsp_Maven_Servlets - Fatal编程技术网

Java 将值从jsp发送到servlet,然后返回到jsp

Java 将值从jsp发送到servlet,然后返回到jsp,java,jsp,maven,servlets,Java,Jsp,Maven,Servlets,我知道早些时候也有人问过类似的问题,但出于某种原因,它不起作用。我只是想检查用户是否在登录页面上输入了这两个字段。如果没有,那么我想在jsp上显示消息,说明他们需要输入这两个凭据。这是我的JSP: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.co

我知道早些时候也有人问过类似的问题,但出于某种原因,它不起作用。我只是想检查用户是否在登录页面上输入了这两个字段。如果没有,那么我想在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>
由于我正在尝试使用maven,下面是我的pom.xml文件,其中为jstl jar添加了依赖项:

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

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

您混合了两种向客户返回响应的方式。尝试使用以下代码传递错误消息:

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一起使用。

尝试${sessionScope['error']}而不是${error}。如果成功了,那么您可能在另一个作用域中有另一个同名“error”的属性。

您还应该检查用户名或密码是否为空。i、 e.用户名!=null&&username.trim.isEmpty

来自每个人的建议都非常有价值。有几件事我做错了:错误的servlet映射@WebServlet修复了它,将代码更改为@NaMaN和@bphilipnyc所回复的内容,而我无法访问servlet的最大错误是我在jsp中的输入类型是按钮。我把它改为输入类型submit,然后它就工作了。谢谢你们的回复。非常感谢。

您认为您的输出是什么?调试的一种方法是在方法中放入一些System.out.println值,以确保达到所需的区域。另外,请注意,您将索引中的I大写。jsp@bphilipnyc我联系不到你。请在下面查看我对NaMaN用户的回复。我现在也在为servlet更新代码。谢谢。如果需要,您可以执行按钮类型=提交:
if((username == null)|| password == null) {              
    String message = "Please enter both the credentials";
    request.setAttribute("error", message);
    getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
}