jsp指令元素 include中遇到的index_jsp.class文件不生成的问题及原因

  今天使用jsp指令元素include将两个jsp页面引入另一个jsp页面,启动服务器发现报500的错误,说index_jsp.class无法找到。于是去本地找了一下,发现确实没有生产.class文件

  jsp指令元素 include中遇到的index_jsp.class文件不生成的问题及原因

  那说明是.java文件编译生成.class文件的过程中出现了问题,也就是这个.java文件是有bug的,才会导致编译无法通过。

  无法通过的jsp页面代码如下图:

 index.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/6/18
  Time: 11:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" +     request.getServerPort() + request.getContextPath() + "/";
%>
<html>
  <head>
  <base href="<%=basePath%>">
    <title>title</title>
  </head>
  <body>
    <%@ include file="top.jsp"%>
    <h1>index页面</h1>
    <%@ include file="bottom.jsp"%>
  </body>
</html>

top.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/6/18
  Time: 11:08
  To change this template use File | Settings | File Templates.
--%>

<%
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
    <base href="<%=basePath%>">
    <title>title</title>
</head>
<body>
    <h1>头部</h1>
</body>
</html>

问题就出在上面脚本元素中的basePath,因为指令元素的include是静态包含,会将被包含的jsp合并到当前jsp页面中形成一份jsp文件,然后翻译成一份java文件。这样翻译出来的java文件就会有三个basePath

变量的定义,在java中变量只能声明一次,所以编译无法通过,无法生成.class文件,导致异常的发生。

解决办法,只需要将top.jsp和bottom.jsp页面中的String basePath相关的代码删除,保证最后的java文件中不会重复声明变量即可。

  

jsp指令元素 include中遇到的index_jsp.class文件不生成的问题及原因

上一篇:Kubernetes 部署 gitlab


下一篇:C++ dll调用-动态(显式)