2011-08-24 14 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

जेएसपी एक जेएसपी कंपाइलर के माध्यम से चला जाता है जो जेएसपी पेज को सर्वलेट में परिवर्तित करेगा, जावा कोड को स्वत: उत्पन्न करेगा।

जेएसपी निर्देश जेएसपी कंपाइलर को निर्देश देते हैं कि कहां रखा जाए। <% %> (जेएसपी स्क्रिप्टलेट) के अंदर जो कुछ भी है, उसे जेनरेटेड सर्वलेट की service() विधि के अंदर रखा जाएगा। <%! %> (जेएसपी घोषणा) के अंदर सब कुछ जेनरेटेड सर्वलेट की वास्तविक कक्षा का हिस्सा बन जाएगा, इसलिए आपका getVal() एक उदाहरण विधि बन जाएगा।

मानक request (और session और pageContext आदि) वस्तु उदाहरणों service() विधि के अंदर परिभाषित कर रहे हैं ताकि वे कर रहे हैं, प्रभाव में, JSP स्क्रिप्टलेट वर्गों के अंदर ही उपलब्ध।

यदि आप टॉमकैट पर चल रहे हैं, उदाहरण के लिए, यदि आप टॉमकैट स्थापना में "काम" निर्देशिका के अंदर देखते हैं तो आप अपने जेएसपी पृष्ठों के लिए वास्तविक जेनरेट किए गए जावा कोड को देख सकते हैं। दिलचस्प हो सकता है, अगर "हुड के नीचे" क्या हो रहा है, इसके बारे में बेहतर तस्वीर नहीं मिलती है।

14

अनुरोध स्क्रिप्टलेट अभिव्यक्तियों के अंदर पहुंच योग्य है, क्योंकि यह विधि का तर्क है जिसमें इन अभिव्यक्तियों का मूल्यांकन किया जाता है (_jspService)। लेकिन अगर आप इसे अपने तरीकों में उपलब्ध करना चाहते हैं, तो आप इसे एक तर्क के रूप घोषित करना चाहिए:

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

ध्यान दें कि आप scriptlets नहीं का उपयोग करना चाहिए और पहली जगह में JSPs में अनुरोध पैरामीटर हो रही। मार्कअप उत्पन्न करने के लिए जेएसपी का इस्तेमाल किया जाना चाहिए। सर्वलेट/एक्शन में अपनी प्रसंस्करण करें, जेएसपी द्वारा अनुरोध स्कोप में बीन्स बनाने और पॉप्युलेट करके डेटा को तैयार करने के लिए तैयार करें, और उसके बाद जेएसपी ईएल, जेएसटीएल और अन्य कस्टम टैग का उपयोग करना चाहिए।