java servlet参数不从servlet传输到.jsp文件/intellij

xbp102n0  于 2021-10-10  发布在  Java
关注(0)|答案(3)|浏览(443)

这是我第一次尝试使用tomcat使用java servlet创建web页面,但每当我尝试将参数传递给calculator.jsp文件时,我都会将其变为空,只显示calculator.jsp中的“name:”文本,而没有尝试从java类传输的${}变量(“string”文本)。我想不出是怎么回事。
如果有人能帮助我,因为我陷入困境,我找不到任何解决办法
下面是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>

计算器.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() {
    }
}
idfiyjo8

idfiyjo81#

从放置它的作用域(在本例中为requestscope)中获取值
试试这个 ${requestScope.}

isr3a4wc

isr3a4wc2#

您可以简单地使用:

request.getAttribute("abc")

还是用便签

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

2vuwiymt3#

您的代码中有几个小错误:
您的表格是使用 POST (你指定的 method="post" ),因此servlet应该覆盖 doPost 方法而不是 doGet 方法,,
将servlet绑定到 /calculator.jsp ,也就是说 getRequestDispatcher("/calculator.jsp").forward(request, response) 将递归地将请求分派到servlet本身,直到 StackOverflowError 被抛出。将servlet绑定到另一个uri,例如:

@WebServlet("/calculator")

或者移动jsp文件( /WEB-INF/calculator.jsp 对于不应直接从web访问的jsp页面来说是一个不错的选择)。
这个 action="/calculator.jsp" 表单的属性被解释为绝对uri路径(相对于服务器的根url,例如。 http://example.com ). 另一方面,servlet的地址是相对于上下文路径的(例如。 http://example.com/app_name ). 因此,表单不会提交到servlet。在中使用相对路径 action 参数:

<form action="calculator" method="post">

备注:您的el表达式 ${} 这实际上是正确的。根据el表达式的解析规则,服务器将在页面、请求、会话和应用程序上下文中查找“”属性。因此,它将具有与schwencke相同的效果 ${requestScope.} el expression还是anish sharma的 <%= request.getAttribute("") %> 潦草的表情。

相关问题