【问题标题】:Java Servlet parameters not transmitting from servlet to .jsp file / IntelliJJava Servlet 参数未从 servlet 传输到 .jsp 文件/IntelliJ
【发布时间】:2021-09-12 20:17:45
【问题描述】:

这是我第一次尝试使用 Tomcat 使用 Java Servlet 创建网页,但每当我尝试将参数传递给 calculator.jsp 文件时,我都会将其变为空白,仅显示“名称: " 没有 ${abc} 变量的calculator.jsp 中的文本我试图从java 类传输(“字符串”文本)。我不知道这是怎么回事。

如果有人可以帮助我,因为我陷入困境并且找不到任何解决方案

这是 index.jsp

的代码
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="com.example.*"%>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
NAME: <%= ((String)request.getAttribute("abc")) %>
ll :  ${requestScope.abc}

<br/>
<form action="calculator.jsp" method="post">
<button type="submit">Button</button>
</form>
</body>
</html>

calculator.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" import="com.example.AirlineReservation.HelloServlet" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
NAME: <%= ((String)request.getAttribute("abc")) %>
ll :  ${requestScope.abc}
</body>
</html>

HelloServlet.java

package com.example.AirlineReservation;

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(name="/calculator")
public class HelloServlet extends HttpServlet {
    private String message;

    public void init() {
        message = "Testing!";
    }
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        String s="string";
        request.setAttribute("abc",s);
        request.getRequestDispatcher("/calculator.jsp").forward(request,response);
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    }
    public void destroy() {
    }
}

【问题讨论】:

    标签: java html tomcat servlets


    【解决方案1】:

    从您放置的范围中获取值,在本例中为请求范围

    试试这个${requestScope.abc}

    【讨论】:

      【解决方案2】:

      你可以简单地使用:

       request.getAttribute("abc")
      

      或使用脚本

      <%= request.getAttribute("abc") %>
      

      【讨论】:

      • 试过了,似乎我得到了一个“空”值
      【解决方案3】:

      您的代码中有几个小错误:

      1. 您的表单是使用POST 提交的(您指定了method="post"),因此您的servlet 应该覆盖doPost 方法而不是doGet 方法,
      2. 您将 servlet 绑定到 /calculator.jsp,这意味着 getRequestDispatcher("/calculator.jsp").forward(request, response) 将递归地将请求分派给 servlet 本身,直到抛出 StackOverflowError。将您的 servlet 绑定到另一个 URI,例如:
      @WebServlet("/calculator")
      

      或移动您的 JSP 文件(/WEB-INF/calculator.jsp 是不应直接从 Web 访问的 JSP 页面的不错选择)。

      1. 表单的action="/calculator.jsp" 属性被解释为绝对URI 路径(相对于服务器的根URL,例如http://example.com)。另一方面,你的 servlet 的地址是相对于上下文路径的(例如http://example.com/app_name)。因此,您的表单不会提交给您的 servlet。在action 参数中使用相对路径:
      <form action="calculator" method="post">
      

      备注:你的EL表达式${abc}其实是正确的。根据resolution rules for EL 表达式,服务器将在页面、请求、会话和应用程序上下文中查找“abc”属性。因此它将与Schwencke's${requestScope.abc}EL 表达式或anish sharma's&lt;%= request.getAttribute("abc") %&gt; scriplet 表达式具有相同的效果。

      【讨论】:

      • 我按照您的建议做了,但仍然无法正常工作。也许你能告诉我要对我的代码进行哪些更改?
      • 你能把你的代码更新到当前版本吗?
      • 我现在做了,但现在我得到“类型状态报告描述原始服务器没有找到目标资源的当前表示或不愿意透露存在的表示。”访问“calculator.jsp”时
      • 如果您将calculator.jsp移动到WEB-INF文件夹,您需要相应地修改getDispatcher调用:getDispatcher("/WEB-INF/calculator.jsp")
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多