Tomcat 无法为 JSP 编译类
Posted
技术标签:
【中文标题】Tomcat 无法为 JSP 编译类【英文标题】:Tomcat Unable to compile class for JSP 【发布时间】:2021-10-04 04:28:33 【问题描述】:所以我正在做一个项目,它涉及在 java 中编写一个访问 sql 数据库的 servlet。该 servlet 通过前端 jsp 页面访问,所有这些都托管在 tomcat 上。我的所有文件都放在了正确的位置,当我尝试在 Tomcat 上打开它时,我得到了这个...
Exception Report
Message Unable to compile class for JSP:
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: [32] in the jsp file: [/index.jsp]
textBox cannot be resolved to a variable
29: <form action = "/Project3/main" method = "post" style="margin-top: 15px;" class="text-center">
30: <div class="form-group row">
31: <div class=" col-sm-12 col-md-12 col-lg-12">
32: <textarea name="textBox" class="form-control" id="textBox" rows="8" cols="50"><%= textBox %></textarea>
33: </div>
34: </div>
35:
An error occurred at line: [45] in the jsp file: [/index.jsp]
result cannot be resolved to a variable
42:
43: <div class="text-center">
44: <%-- jsp statement with out sql response--%>
45: <%= result %>
46: </div>
47:
48:
所以我的jsp文件中有两个无法解析的变量。不知道这意味着什么。这是我的jsp代码的主体:
<body>
<div class="container-fluid ">
<row class="row justify-content-center">
<h1 class="text-center col-sm-12 col-md-12 col-lg-12"> Remote Database Management System </h1>
<div class="text-center col-sm-12 col-md-12 col-lg-12"> You are connected to the Project 3 Database.</div>
<div class="text-center col-sm-12 col-md-12 col-lg-12"> Please enter sql query or update statement.</div>
<form action = "/Project3/main" method = "post" style="margin-top: 15px;" class="text-center">
<div class="form-group row">
<div class=" col-sm-12 col-md-12 col-lg-12">
<textarea name="textBox" class="form-control" id="textBox" rows="8" cols="50"><%= textBox %></textarea>
</div>
</div>
<button style="margin-bottom: 15px;" type="submit" class="btn btn-dark">Execute Command</button>
<button onClick="reset();" style="margin-bottom: 15px;" type="reset" class="btn btn-dark">Clear Form</button>
</form>
</row>
</div>
<div class="text-center">
<%-- jsp statement with out sql response--%>
<%= result %>
</div>
</div>
</body>
</html>
Textbox 和 Result 都是 servlet 顺便说一句的 java 代码中的变量。任何帮助将不胜感激!
【问题讨论】:
您是否将这些变量作为请求属性传递? 很抱歉,我不能 100% 确定您的问题是什么意思。在我的 java 代码中,变量文本框在我的 doGet 方法中声明,该方法调用 HttpServlet 请求和响应。我声明的那一行是 - String textBox = request.getParameter("textBox");至于结果变量,它不是请求变量。 【参考方案1】:编辑:基于your comment 我假设您有一个带有doGet
方法的servlet,如下所示:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
String textBox = req.getParameter("textBox");
...
String result = ...
req.getRequestDispatcher("/your.jsp").forward(req, resp);
servlet 中的局部变量和 JSP 页面(被编译成 servlet)中的局部变量是不同的!您不能在 JSP 页面中使用 textBox
和 result
。
开箱即用的 JSP 页面可以访问 8 个局部变量:implicit objects。由于textBox
是一个请求参数,您可以通过以下方式获取它:
<%= request.getParameter("textBox") %>
要检索result
,您需要将其保存为您的servlet 中的请求属性:
req.setAttribute("result", result);
您可以在JSP页面中检索它:
<%= request.getAttribute("result") %>
您可以使用 JSP 声明 <%! ... >
或 JSP 脚本 <%= ... >
来声明其他变量,例如:
<% String textBox = request.getParameter("textBox"); %>
备注:近 20 年来不鼓励使用 JSP 表达式 <%= ... %>
(参见 this question)。您应该改用 EL 表达式:
$param.textBox
$result
EL 表达式有一个much larger 可解析标识符列表,其中包括所有页面、请求、会话和 servlet 上下文属性。
【讨论】:
以上是关于Tomcat 无法为 JSP 编译类的主要内容,如果未能解决你的问题,请参考以下文章
解决org.apache.jasper.JasperException: 无法为JSP编译类
org.apache.jasper.JasperException:无法为 JSP 编译类:
无法为 JSP 编译类:无法解析 java.util.Map$Entry 类型。它是从所需的 .class 文件中间接引用的