Невозможно скомпилировать класс для JSP в Tomcat - PullRequest
1 голос
/ 09 октября 2010

Симптомы :

Любые страницы JSP в проекте выдают сообщения об ошибках, как показано ниже:

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 5 in the jsp file: /check.jspf
Generated servlet error:
*Duplicate local variable usr*

An error occurred at line: 5 in the jsp file: /check.jspf
Generated servlet error:
*Duplicate local variable path*

An error occurred at line: 5 in the jsp file: /check.jspf
Generated servlet error:
*Duplicate local variable pos*

An error occurred at line: 5 in the jsp file: /check.jspf
Generated servlet error:
*Duplicate local variable hSession*

An error occurred at line: 5 in the jsp file: /check.jspf
Generated servlet error:
*Duplicate local variable testRegister*

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    com.byinsight.logic.EncodingFilter.doFilter(EncodingFilter.java:22)

Среда разработки :

  • JDK 1.5
  • Tomcat 5.0
  • IDE Eclipse 3.3

Причины :

Я былиспользование jsp-config для включения JSPF в каждый файл JSP.web.xml ниже:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <include-prelude>/check.jspf</include-prelude>
    </jsp-property-group>
</jsp-config>

Включенный файл check.jspf.Код в JSPF приведен ниже:

<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.byinsight.model.User"%>
<%@page import="javax.servlet.http.HttpSession"%>

<%
    //String str = (String)session.getAttribute("login");
    User usr = (User)session.getAttribute("user");
    String path = request.getServletPath();
    int pos = path.indexOf("index.jsp");
    HttpSession hSession = request.getSession(false);
    String testRegister = (String)hSession.getAttribute("register");
    if (-1 == pos) {
        if ((null == usr) && (!testRegister.equals("login"))) {
            throw new RuntimeException("you have to login first ");
        }           
    }
%>

Проект хорошо работает в Eclipse, но при развертывании WAR в системе продукта появляется ошибка.Я не понимаю, что означает сообщение об ошибке, здесь нет повторяющихся переменных!Кто-нибудь знает?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 11 октября 2010

Предлагаю заменить check.jspf на Filter. Просто вставьте тот же код в метод doFilter().

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpSession session = req.getSession();
    User usr = (User) session.getAttribute("user");
    String path = req.getServletPath();
    int pos = path.indexOf("index.jsp");
    String testRegister = (String) session.getAttribute("register");
    if (-1 == pos) {
        if ((null == usr) && (!testRegister.equals("login"))) {
            throw new RuntimeException("you have to login first "); // I'd just redirect to login page rather than throwing a RuntimeException.
        }           
    }
    chain.doFilter(request, response);
}

Заменить <jsp-config> на

<filter>
    <filter-name>checkFilter</filter-name>
    <filter-class>com.example.CheckFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>checkFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

Смотри также:

0 голосов
/ 10 октября 2010

Возможно ли, что любой jsp, в который включен этот файл, объявляет эти переменные тоже?

...