init() முறை

மேலும் சில பயனுள்ள சிறிய விஷயங்கள். நிச்சயமாக, நான் சர்வ்லெட் துவக்கம் பற்றி பேசுகிறேன். உங்களுக்கு ஏற்கனவே தெரியும், இணைய சேவையகம் servlet ஆப்ஜெக்டை உருவாக்கி அதை கொள்கலனில் வைத்த பிறகு, அது servlet's init() method என்று அழைக்கிறது . இந்த முறையை நீங்கள் மேலெழுதலாம் மற்றும் அதில் உங்களுக்குத் தேவையானதைத் தொடங்கலாம்.

ஏன் ஒரு கட்டமைப்பாளரைப் பயன்படுத்தக்கூடாது?

ஏனெனில் ஒரு சர்வ்லெட்டை உருவாக்கும் செயல்முறை இது போன்றது:

  • நாம் பரம்பரையாக ஒரு பொருளை உருவாக்குகிறோம்HttpServlet
  • ஒரு பொருளை உருவாக்கவும்ServletContext, அதன் சர்வ்லெட் மாறியைச் சேர்க்கவும்
  • ஒரு பொருளை உருவாக்கவும்ServletConfig, அதன் சர்வ்லெட் மாறியைச் சேர்க்கவும்
  • வலை சேவையகம் கொள்கலனுடன் சர்வ்லெட்டை இணைக்கிறது
  • 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 கோப்பிலிருந்து தரவை அதில் ஏற்றவும் . சரி, எதிர்காலத்தில் நீங்கள் பொருளிலிருந்து வெளியேறலாம்பண்புகள்தரவுத்தளத்தை அணுகுவதற்கான தரவு போன்ற பல்வேறு விருப்பங்கள், எ.கா.

பண்புகள் கோப்பை எவ்வாறு சரியாக ஏற்றுவது

உங்கள் கணினியில் உங்கள் சர்வ்லெட் இயங்கவில்லை என்றால் என்ன செய்வது?

அவர்கள் அதை இங்கே எழுதினார்கள் என்று வைத்துக்கொள்வோம், அது உலகின் வேறொரு பகுதியில் உள்ள சர்வரில் இயங்குகிறது. அல்லது பல சேவையகங்கள். இந்த வழக்கில் பண்புகள் கோப்பை எவ்வாறு சரியாக ஏற்றுவது?

நல்ல கேள்வி. பொதுவாக, இயங்கும் போது, ​​ஒரு சர்வ்லெட்டுக்கு அதன் பண்புகள் கோப்புகளின் தொடர்புடைய பாதை மட்டுமே தெரியும் , அதன் முழுமையான பாதை அல்ல, ஏனெனில் சர்வ்லெட் போர் கோப்புகளை எங்கும் சேமிக்க முடியும்.

எனவே, எங்கள் சர்வ்லெட் சேமிக்கப்பட்டுள்ள பாதையை நாம் கண்டுபிடிக்க வேண்டும் (சர்வ்லெட் ஏற்கனவே துவக்கப்பட்டுள்ளது) அதற்கு தொடர்புடைய பாதையைச் சேர்க்க வேண்டும் :)

இது போல் தெரிகிறது:

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 க்கு அனுப்ப முடியாது. எடுத்துக்காட்டாக, விநியோகிக்கப்பட்ட இணையப் பயன்பாட்டில் உங்கள் சர்வ்லெட் மற்ற சேவையகங்களுடன் தொடர்பு கொள்கிறது.

கொள்கலன் அதன் init() முறையை அழைக்கும் போது தேவையான அனைத்து தகவல்களையும் உங்கள் சர்வ்லெட்டுக்கு அனுப்புகிறது என்பதை நீங்கள் உறுதி செய்ய வேண்டும் . மேலும், அவர் அதைத்தான் செய்கிறார்.

உங்கள் சர்வ்லெட் (இது HttpServlet வகுப்பில் இருந்து பெறப்பட்டது என்பதை நினைவில் கொள்ளவும் ) getServletConfig() முறை உள்ளது . இது ஒரு பொருளைத் திருப்பித் தருகிறதுServletConfig, கொள்கலன் மூலம் உருவாக்கப்பட்டது மற்றும் துவக்கப்பட்டது. இந்த பொருள் பின்வரும் முறைகளைக் கொண்டுள்ளது:

getInitParameterNames() சர்வ்லெட் அளவுரு பெயர்களின் பட்டியலை வழங்கும்
getInitParameter(சரம் பெயர்) ஒரு servlet அளவுருவை அதன் பெயரால் வழங்கும்
getServletName() சேவையகத்தின் சொந்தப் பெயரை வழங்கும்
getServletContext() ஒரு பொருளைத் திருப்பித் தருகிறதுServletContext

அதன் அளவுருக்களின் பட்டியலை வழங்கும் சர்வ்லெட்டை எழுதுவோம்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>

ஒரு servlet அதன் அளவுருக்களை குறியீட்டைப் பயன்படுத்தி பெறலாம்:

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));
    	}
  }
}