init() পদ্ধতি

এবং অন্যান্য দরকারী ছোট জিনিস একটি দম্পতি. অবশ্যই, আমি সার্লেট ইনিশিয়ালাইজেশন সম্পর্কে কথা বলছি। আপনি ইতিমধ্যেই জানেন যে, ওয়েব সার্ভার সার্লেট অবজেক্ট তৈরি করে কন্টেইনারে রাখার পরে, এটি সার্লেটের init() পদ্ধতিকে কল করে । আপনি এই পদ্ধতিটি ওভাররাইড করতে পারেন এবং এটিতে আপনার যা প্রয়োজন তা শুরু করতে পারেন।

কেন একটি কনস্ট্রাক্টর ব্যবহার করবেন না?

কারণ একটি সার্লেট তৈরির প্রক্রিয়াটি এরকম কিছু যায়:

  • আমরা উত্তরাধিকার সূত্রে প্রাপ্ত একটি বস্তু তৈরি করিHttpServlet
  • একটি বস্তু তৈরি করুনসার্ভলেট কনটেক্সট, এর servlet ভেরিয়েবল যোগ করুন
  • একটি বস্তু তৈরি করুনServletConfig, এর servlet ভেরিয়েবল যোগ করুন
  • ওয়েব সার্ভার কন্টেইনারে সার্লেট সংযুক্ত করে
  • init() পদ্ধতিতে কল করা হচ্ছে

আপনার সার্লেটের কনস্ট্রাক্টরে, এর অনেকগুলি অভ্যন্তরীণ ভেরিয়েবল এখনও আরম্ভ করা হয়নি। ধারকটি আপনার সার্লেট সম্পর্কে কিছুই জানে না, আপনার সার্লেট তার প্রসঙ্গ সম্পর্কে কিছুই জানে না। আমি মনে করি এখানে সবকিছু পরিষ্কার।

আসুন একটি সার্লেট লিখি যা, আরম্ভ করা হলে, সেটিংস সহ একটি বৈশিষ্ট্য ফাইল খুঁজে পায়:

public class PropertiesServlet extends HttpServlet {
    public init() {
         try (InputStream input = new FileInputStream("c:/path/to/config.properties")) {

             Properties prop = new Properties();
             prop.load(input);

             String databaseURL = prop.getProperty("db.url");
             String databaseUser = prop.getProperty("db.user ");
             String databasePassword = prop.getProperty("db.password");
	 }
  }
}

এখানে আমরা একটি বস্তু তৈরি করিবৈশিষ্ট্যএবং এটিতে config.properties ফাইল থেকে ডেটা লোড করুন । ঠিক আছে, ভবিষ্যতে আপনি বস্তু থেকে বেরিয়ে আসতে পারেনবৈশিষ্ট্যবিভিন্ন বিকল্প যেমন ডাটাবেস অ্যাক্সেস করার জন্য ডেটা, যেমন।

বৈশিষ্ট্য ফাইল সঠিকভাবে লোড কিভাবে

উপায় দ্বারা, আপনার servlet আপনার কম্পিউটারে চলমান না হলে কি?

ধরা যাক তারা এটি এখানে লিখেছে, এবং এটি বিশ্বের অন্য কোথাও একটি সার্ভারে চলে। অথবা একাধিক সার্ভার। এই ক্ষেত্রে বৈশিষ্ট্য ফাইল সঠিকভাবে লোড কিভাবে?

ভাল প্রশ্ন. সাধারণত, যখন চলমান, একটি সার্লেট শুধুমাত্র তার বৈশিষ্ট্য ফাইলগুলির আপেক্ষিক পথ জানে , তার পরম পথ নয়, কারণ সার্লেট যুদ্ধ ফাইলগুলি যে কোনও জায়গায় সংরক্ষণ করা যেতে পারে।

সুতরাং, আমাদের সার্লেটটি কোথায় সংরক্ষিত আছে তা খুঁজে বের করতে হবে (সারলেটটি ইতিমধ্যেই শুরু করা হয়েছে) এবং এটিতে একটি আপেক্ষিক পথ যোগ করতে হবে :)

এটা এই মত কিছু দেখায়:

String path = absoluteServletParh + "relative path";

এবং, সর্বদা হিসাবে, এই জাতীয় প্রাথমিক কাজের প্রায়শই নিজস্ব সামান্য "কিন্তু" থাকে। আপনার servlet এবং এর বৈশিষ্ট্য ফাইল সংরক্ষণাগার মধ্যে সংরক্ষিত হয় :) অগত্যা, অবশ্যই, কিন্তু এটা ঘটে. বৈশিষ্ট্য ফাইল প্রায়ই জার বা যুদ্ধ ফাইলের মধ্যে সংরক্ষণ করা হয়.

অর্থাৎ, আপনার ফাইলের ডিস্কে একটি শারীরিক পথ নাও থাকতে পারে। কিন্তু যেহেতু ধারকটি আপনার সার্লেট লোড করতে সক্ষম হয়েছিল, তাই এটি সম্ভবত আপনার বৈশিষ্ট্য ফাইলটিও লোড করতে সক্ষম হবে।

এটি করার জন্য, আপনাকে ক্লাস লোডার অবজেক্টটি পেতে হবে (ক্লাসলোডার) এবং তাকে আপনার ফাইল আপলোড করতে বলুন। এটি দেখতে কেমন হবে তা এখানে:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("/config.properties");

Properties prop = new Properties();
prop.load(stream);

getConfig() পদ্ধতি

যাইহোক, বৈশিষ্ট্য ফাইলগুলিতে সমস্ত প্যারামিটার সার্লেটে প্রেরণ করা যায় না। উদাহরণস্বরূপ, আপনার servlet একটি বিতরণ করা ওয়েব অ্যাপ্লিকেশনে অন্যান্য servlets সঙ্গে ইন্টারঅ্যাক্ট করে।

তারপর আপনাকে নিশ্চিত করতে হবে যে কন্টেইনারটি তার init() পদ্ধতিতে কল করার সময় আপনার সার্লেটে সমস্ত প্রয়োজনীয় তথ্য প্রেরণ করে । তাছাড়া সে ঠিক তাই করে।

আপনার servlet (মনে রাখবেন যে এটি HttpServlet ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত ) এর একটি getServletConfig() পদ্ধতি রয়েছে । যা একটি বস্তু ফেরত দেয়ServletConfig, তৈরি এবং ধারক দ্বারা সূচনা. এই বস্তুর নিম্নলিখিত পদ্ধতি আছে:

getInitParameterNames() সার্লেট প্যারামিটার নামের একটি তালিকা প্রদান করে
getInitParameter (স্ট্রিং নাম) এর নামের দ্বারা একটি সার্লেট প্যারামিটার প্রদান করে
getServletName() সার্লেটের নিজের নাম ফেরত দেয়
getServletContext() একটি বস্তু প্রদান করেসার্ভলেট কনটেক্সট

আসুন একটি সার্লেট লিখি যা থেকে এর পরামিতিগুলির একটি তালিকা প্রদান করেServletConfig'ক. তাদের সেখানে রাখা web.xml ফাইলের মাধ্যমে হবে:

	<web-app> 
 	
        <servlet> 
            <servlet-name>Print-Servlet</servlet-name> 
            <servlet-class>PrintServlet</servlet-class> 
            <init-param> 
                <param-name>jdbc-driver</param-name> 
    	        <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value> 
	        </init-param> 
        </servlet> 
  	
        <servlet-mapping> 
            <servlet-name>Print-Servlet</servlet-name> 
            <url-pattern>/print</url-pattern> 
        </servlet-mapping> 
  	
    </web-app>

একটি সার্লেট কোড ব্যবহার করে তার পরামিতি পেতে পারে:

public class PrintServlet extends HttpServlet {
    public void init() {
        ServletConfig config = this.getServletConfig();
        Enumeration<String> initParameterNames = config.getInitParameterNames();

        while (initParameterNames.hasMoreElements()){
       	     String key = initParameterNames.nextElement();
             System.out.println("%s: %s\n", key, config.getInitParameter(key));
    	}
  }
}