2011-08-24 3 views
10
<% 
    String fname=request.getParameter("fname"); 
    String username=getVal("lname"); 
%> 
<%! 
    private String getVal(String param){ 
     return request.getParameter("fname"); 

} 
%> 
/* 

--err 



org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP 

PWC6197: An error occurred at line: 5 in the jsp file: /register.jsp 
PWC6199: Generated servlet error: 
string:///register_jsp.java:12: cannot find symbol 
symbol : variable request 
location: class org.apache.jsp.register_jsp 
/* 

답변

21

JSP는 JSP 컴파일러를 통해 JSP 페이지를 서블릿으로 변환하고 Java 코드를 자동 생성합니다.

JSP 지시문은 JSP 컴파일러가 어디에 넣을 지 지시합니다. <% %> (JSP 스크립트 렛라고하는) 내부에있는 모든 내용은 생성 된 서블릿의 service() 메서드 내에 저장됩니다. <%! %> (JSP 선언이라고도 함) 내의 모든 내용은 생성 된 서블릿의 실제 클래스의 일부가되므로 getVal()은 인스턴스 메소드가됩니다.

표준 request (sessionpageContext 등 등) 개체 인스턴스는 service() 방법 내부에 정의되어 있으므로이며, 효과, JSP 스크립틀릿 섹션 내부에서만 사용할 수 있습니다.

예를 들어 Tomcat에서 실행중인 경우 Tomcat 설치의 "work"디렉토리를 보면 JSP 페이지의 실제 생성 된 Java 코드를 볼 수 있습니다. 재미있는 일 이겠지만, "후드 아래에서"무슨 일이 일어나고 있는지에 관해 더 나은 그림을 얻지 못한다면.

14

요청은이 표현식이 평가되는 메소드의 인수이므로 (_jspService) 스크립틀릿 표현식에서 액세스 할 수 있습니다. 당신이 당신의 자신의 방법에서 사용할 수 있도록하려면, 당신은 인수로 선언해야합니다 : 당신은 스크립트 릿을 사용하고 첫번째 장소에있는 JSP를에 요청 매개 변수를 받고되어서는 안

<% 
    String fname = request.getParameter("fname"); 
    String username = getVal("lname", request); 
%> 
<%! 
    private String getVal(String param, HttpServletRequest request) { 
     return request.getParameter("fname"); 
    } 
%> 

참고. 마크 업 생성에는 JSP를 사용해야합니다. 서블릿/액션에서 프로세싱을 수행하고, 요청 범위에서 빈을 생성하고 채우고, JSP EL, JSTL 및 기타 커스텀 태그를 독점적으로 사용해야하는 JSP로 디스패치하여 JSP가 표시 할 데이터를 준비하십시오.

관련 문제