7.1 web.xml-এর সাধারণ স্কিমা

web.xml ফাইল অ্যাপ্লিকেশন কনফিগারেশন তথ্য সঞ্চয় করে। এটি এর একটি বাধ্যতামূলক অংশ নয়, তবে এটি একটি ওয়েব অ্যাপ্লিকেশন কনফিগার করতে ব্যাপকভাবে ব্যবহৃত হয়।

এই ফাইলটি WEB-INF ফোল্ডারে থাকা আবশ্যক ৷ যখন টমক্যাট শুরু হয়, এটি এর বিষয়বস্তু পড়ে এবং এতে থাকা কনফিগারেশন ব্যবহার করে। যদি ফাইলটিতে ত্রুটি থাকে তবে টমক্যাট একটি ত্রুটি প্রদর্শন করে।

উদাহরণ web.xml:



<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  
  <servlet>
       <servlet-name>HelloWorld</servlet-name>
       <servlet-class>HelloServlet</servlet-class>
   </servlet>
    
  <servlet-mapping>
      <servlet-name>HelloWorld</servlet-name>
      <url-pattern>/welcome</url-pattern>
  </servlet-mapping>
 
  <welcome-file-list>
      <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
</web-app>

"HelloWorld"সার্লেট নাম এবং সার্লেট ক্লাসের ম্যাপিং এখানে সবুজ রঙে লেখা আছে"HelloServlet"সার্লেট নাম এবং URL খণ্ডের ম্যাপিং নীল রঙে লেখা হয়"HelloWorld""http://localhost/welcome" । সুতরাং, এটি এখানে বলে যে /স্বাগত পাথ অ্যাক্সেস করার সময়, আপনাকে servlet কল করতে হবে HelloServlet.class

লাল রঙটি নির্দেশ করে যে ফাইলটি অনুরোধের ভিত্তিতে দেওয়া দরকার http://localhost/- এটি তথাকথিত স্বাগত পৃষ্ঠা । যদি ব্যবহারকারী কেবল ব্রাউজারে আমাদের ওয়েব অ্যাপ্লিকেশনের মূলের সাথে সম্পর্কিত নামটি টাইপ করে, তাহলে এর বিষয়বস্তু index.html

7.2 সার্লেট, সার্লেট-ম্যাপিং

একটি সার্লেট বিভিন্ন ইউআরএলে অনুরোধ পরিবেশন করতে পারে, তাই ওয়েব-এক্সএমএলে সার্লেট এবং ইউআরএলে এর ম্যাপিং আলাদাভাবে লেখা হয়। প্রথমে, আমরা সার্লেটগুলিকে বর্ণনা করি, প্রতিটিকে একটি অনন্য স্ট্রিং নাম দিয়ে, এবং তারপরে আমরা নির্দিষ্ট করি কিভাবে প্রতিটি সার্লেট কোন ইউআরএলে ম্যাপ করে।

উদাহরণ web.xml:



<web-app>
  
  <servlet>
    <servlet-name>remoting</servlet-name>
    <servlet-class>com.codegym.RemotingServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>remoting</servlet-name>
    <url-pattern>/remoting/*</url-pattern>
  </servlet-mapping>
 
  <servlet>
    <servlet-name>restapi</servlet-name>
    <servlet-class>com.codegym.RestApiServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>restapi</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>  
 
</web-app>

এই উদাহরণে, দুটি সার্লেট ঘোষণা করা হয়েছে, এবং প্রতিটি একটি ভিন্ন url টেমপ্লেটে ম্যাপ করা হয়েছে। servlet RemotingServletযে সমস্ত অনুরোধে যায় তা পরিবেশন করে/remoting/*servlet RestApiServletযে সমস্ত অনুরোধে যায় তা পরিবেশন করে/api/* । Servlets লোডিং থেকে অর্ডার আছে - লোড-অন-স্টার্টআপ পরামিতি।

7.3 সার্ভলেট বিকল্প

web.xml-এর সাহায্যে, প্যারামিটারগুলি servlet এর প্রারম্ভকালে পাস করা যেতে পারে, সেগুলি ইন্টারফেসের মাধ্যমে উপলব্ধ হবে ServletConfig। আপনি সমগ্র ওয়েব অ্যাপ্লিকেশনের জন্য পরামিতি সেট করতে পারেন, তারা এর মাধ্যমে উপলব্ধ হবে ServletContext

উদাহরণ web.xml:



<web-app>
  <context-param>
     <description>Server production mode</description>
     <param-name>productionMode</param-name>
     <param-value>false</param-value>
  </context-param>
 
  <context-param>
     <param-name>appPropertiesConfig</param-name>
     <param-value>
        classpath:local-app.properties
        classpath:web-app.properties
     </param-value>
  </context-param>
 
  <servlet>
     <servlet-name>mainservlet</servlet-name>
     <servlet-class>com.codegym.ApplicationServlet</servlet-class>
     <init-param>
        <param-name>application</param-name>
        <param-value>com.codegym.App</param-value>
     </init-param>
     <init-param>
        <param-name>widgetset</param-name>
        <param-value>com.codegym.WidgetSet</param-value>
     </init-param>
     <init-param>
        <param-name>ui</param-name>
        <param-value>com.codegym.AppUI</param-value>
     </init-param>
  </servlet>
</web-app>

সবুজ রঙে হাইলাইট করা কোডটি হল যেখানে আমরা প্যারামিটারগুলি সেট করিServletContext । তাদের মধ্যে দুটি আছে:

  • productionModeমান মিথ্যা সঙ্গে
  • appPropertiesConfigদুটি স্ট্রিং এর অ্যারে সহ:
    • classpath:local-app.properties
    • classpath:web-app.properties

সার্লেটের পরামিতিগুলি নীল রঙে নির্দেশিত হয়ApplicationServlet , তারা এটির মাধ্যমে উপলব্ধ হবে ServletConfig:

  • applicationমান com.codegym.App সহ
  • widgetsetcom.codegym.WidgetSet মান সহ
  • uiমান com.codegym.AppUI সহ

7.4 ফিল্টার, ফিল্টার-ম্যাপিং

ওয়েব অ্যাপ্লিকেশন এছাড়াও বিশেষ থাকতে পারে utility servlets - filters. তারা বিভিন্ন পরিষেবা কার্য সম্পাদন করে: কল পুনঃনির্দেশ, অনুমোদন চেক, ইত্যাদি।

উদাহরণ web.xml:



<web-app>
 
  <servlet>
      <servlet-name>remoting</servlet-name>
      <servlet-class>RemotingServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
 
  <servlet-mapping>
      <servlet-name>remoting </servlet-name>
      <url-pattern>/remoting/*</url-pattern>
  </servlet-mapping>
 
  <filter>
      <filter-name>total_filter</filter-name>
      <filter-class>com.javrush.TotalFilter</filter-class>
  </filter>
 
  <filter-mapping>
      <filter-name>total_filter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
 
</web-app>

অনুরোধটি সার্লেটে পৌঁছানোর আগে RemotingServlet, এটি ফিল্টার দ্বারা প্রক্রিয়া করা হবে TotalFiler। এই ফিল্টারটি আমাদের ওয়েব অ্যাপ্লিকেশনে যাওয়া সমস্ত অনুরোধগুলিকে আটকাতে কনফিগার করা হয়েছে৷ এটি url টেমপ্লেট দ্বারা স্পষ্টভাবে ইঙ্গিত করা হয়েছে যেটিতে এটি ম্যাপ করা হয়েছে /*:

আপনি নিম্নলিখিত লেকচারগুলিতে servlets এবং ফিল্টার সম্পর্কে আরও পড়বেন।