JSP在部署tomcate时复制局部变量

JSP在部署tomcate时复制局部变量,jsp,Jsp,在eclipse中一切运行正常,但在tomcat apache上部署时 它给出了错误 org.apache.jasper.jaspereException:无法为JSP编译类: jsp文件:/jsp页面/apr-part3.jsp的第2行出现错误 重复局部变量登录用户 如何避免这些错误编译时@include将包含JSP。所以它基本上是在相同的Java代码块中结束的。您有两种选择: 改用 去掉apr-part3.jsp中的重新声明 更好的方法是只使用JSTL/EL <% User lo

在eclipse中一切运行正常,但在tomcat apache上部署时 它给出了错误

org.apache.jasper.jaspereException:无法为JSP编译类:

jsp文件:/jsp页面/apr-part3.jsp的第2行出现错误 重复局部变量登录用户


如何避免这些错误编译时
@include
将包含JSP。所以它基本上是在相同的Java代码块中结束的。您有两种选择:

  • 改用
  • 去掉apr-part3.jsp中的重新声明

更好的方法是只使用JSTL/EL

<% User loginUser = (User)session.getAttribute("loginUser");
int userlevel = Integer.parseInt( (request.getAttribute("userlevel")).toString());
String status = (String)request.getAttribute("formstatus");
%>
<% if(userlevel==3){
     do something
}if(userlevel==4){
do something
}

...
您没有查看此部件的权限。

同样地,请求属性
登录用户
可通过
${logiuser}
获得,而
状态
可通过
${formstatus}
获得。另请参见编译时
@include
将包含JSP。所以它基本上是在相同的Java代码块中结束的。您有两种选择:

  • 改用
  • 去掉apr-part3.jsp中的重新声明

更好的方法是只使用JSTL/EL

<% User loginUser = (User)session.getAttribute("loginUser");
int userlevel = Integer.parseInt( (request.getAttribute("userlevel")).toString());
String status = (String)request.getAttribute("formstatus");
%>
<% if(userlevel==3){
     do something
}if(userlevel==4){
do something
}

...
您没有查看此部件的权限。

同样地,请求属性
登录用户
可通过
${logiuser}
获得,而
状态
可通过
${formstatus}
获得。另请参见

这是一个小旁白,因为它与您的问题标题相关,但与您的示例代码体无关

将标记与scriptlet一起使用时也会出现此问题。我知道,我知道,这不是最好的做法,但它确实发生了。至少在WebLogic 10.2.3中是这样

如果有一个标记将变量添加到页面上下文中,以便在jsp中使用,则会出现这种情况,例如:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:choose>
    <c:when test="${userlevel > 2}">
        <jsp:include page="apr-part3.jsp" />
    </c:when>
    <c:otherwise>
        You have not permission to view this part.
    </c:otherwise>
</c:choose>
如果随后在使用jsp的脚本中声明一个与上下文中的属性名同名的变量,则jsp编译时会出现重复的局部变量错误。例如:

public int doStartTag() throws JspException {
    String myvar = ...;
    pageContext.setAttribute("myvar", myvar);

    return EVAL_BODY_INCLUDE;
}

原因是jsp编译的servlet包含注入的标记代码和样板代码,这些代码实际上已经使用从页面上下文获取的属性值创建了“String myvar”。因此,您的scriptlet声明实际上是多余的,因为数据已经可用


检查预编译的servlet以进行检查(webapp中的WEB-INF/weblogic.xml jsp描述符配置)。

这是一个很小的旁白,因为它与问题标题相关,但与示例代码体无关

将标记与scriptlet一起使用时也会出现此问题。我知道,我知道,这不是最好的做法,但它确实发生了。至少在WebLogic 10.2.3中是这样

如果有一个标记将变量添加到页面上下文中,以便在jsp中使用,则会出现这种情况,例如:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:choose>
    <c:when test="${userlevel > 2}">
        <jsp:include page="apr-part3.jsp" />
    </c:when>
    <c:otherwise>
        You have not permission to view this part.
    </c:otherwise>
</c:choose>
如果随后在使用jsp的脚本中声明一个与上下文中的属性名同名的变量,则jsp编译时会出现重复的局部变量错误。例如:

public int doStartTag() throws JspException {
    String myvar = ...;
    pageContext.setAttribute("myvar", myvar);

    return EVAL_BODY_INCLUDE;
}

原因是jsp编译的servlet包含注入的标记代码和样板代码,这些代码实际上已经使用从页面上下文获取的属性值创建了“String myvar”。因此,您的scriptlet声明实际上是多余的,因为数据已经可用


检查预编译的servlet以进行检查(webapp中的WEB-INF/weblogic.xml jsp描述符配置)。

发布问题时,请将编程代码放入{}中。发布问题时,请将编程代码放入{}