হালনাগাদ
আপডেট হিসাবে এবং আরও সুস্পষ্টভাবে বোঝার জন্য, এগুলি সার্লেলেট 2.5 এবং 3 এর মধ্যে মূল পার্থক্য (আমি পরিপূর্ণ হওয়ার চেষ্টা করছি না, আমি কেবল সবচেয়ে আকর্ষণীয় অংশগুলি উল্লেখ করছি):
সার্লেটস, ফিল্টার এবং শ্রোতার ঘোষণার জন্য টিকা (বিকাশের সহজ)
সার্ভলেট ২.৫-এ, একটি আরআইডি প্যারামিটার সহ একটি সার্লেট ঘোষণা করার জন্য আপনাকে এটি ওয়েব.এক্সএমএল এ যুক্ত করতে হবে :
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>my.server.side.stuff.MyAwesomeServlet</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/path/to/my/servlet</url-pattern>
</servlet-mapping>
সার্ভলেট 3 এ, ওয়েব.এক্সএমএল alচ্ছিক এবং আপনি এক্সএমএলের পরিবর্তে টিকা ব্যবহার করতে পারেন। একই উদাহরণ:
@WebServlet(name="myServlet",
urlPatterns={"/path/to/my/servlet"},
initParams={@InitParam(name="configFile", value="config.xml")})
public class MyAwesomeServlet extends HttpServlet { ... }
ফিল্টারগুলির জন্য, আপনাকে সার্ভলেট 2.5 এ ওয়েব.এক্সএমএল এ যুক্ত করতে হবে :
<filter>
<filter-name>myFilter</filter-name>
<filter-class>my.server.side.stuff.MyAwesomeServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/path/to/my/filter</url-pattern>
</filter-mapping>
সার্ভলেট 3 এ টিকা ব্যবহার করে সমান:
@ServletFilter(name="myFilter", urlPatterns={"/path/to/my/filter"})
public class MyAwesomeFilter implements Filter { ... }
শ্রোতার জন্য (এই ক্ষেত্রে একটি সার্লেটলেট কনটেক্সটলাইজনার), সার্ভলেট 2.5 এ:
<listener>
<listener-class>my.server.side.stuff.MyAwesomeListener</listener-class>
</listener>
টীকাগুলি ব্যবহার করে একই:
@WebServletContextListener
public class MyAwesomeListener implements ServletContextListener { ... }
ওয়েব.এক্সএমএল (পরিবহনযোগ্যতা) এর মডুলারাইজেশন
- সার্ভলেটগুলি 2.5 এ কেবলমাত্র এক মনোলিথিক ওয়েব.এক্সএমএল ফাইল রয়েছে।
- সার্লেটলেট 3-এ, প্রতিটি "লোডযোগ্য" জারটিতে তার মেটা-আইএনএফ ডিরেক্টরিতে একটি ওয়েব- ফ্রেগমেন্ট.এক্সএমএল থাকতে পারে সার্লেটলেট, ফিল্টার ইত্যাদি উল্লেখ করে এটি লাইব্রেরি এবং ফ্রেমওয়ার্কগুলিকে তাদের নিজস্ব সার্লেট বা অন্যান্য অবজেক্ট নির্দিষ্ট করার অনুমতি দেয়।
প্রারম্ভিক সময়ে সার্লেটস, ফিল্টার এবং শ্রোতার গতিশীল নিবন্ধকরণ (প্লাগবিলিটি)
সার্ভলেট 3, একটি ServletContextListenerপরিবর্তনশীল সার্ভলেট ফিল্টার এবং নিম্নলিখিত পদ্ধতি ব্যবহার করে শ্রোতাকে যোগ করা যোগ করতে পারেন SevletContext: addServlet(), addFilter()এবংaddListener()
অ্যাসিক্রোনাস সমর্থন
উদাহরণ: বলুন যে কিছু সার্লেট পাত্রে তার থ্রেড পুলে পাঁচটি থ্রেড রয়েছে এবং অনুরোধ অনুযায়ী কার্যকর করার জন্য একটি সময়সাপেক্ষ প্রক্রিয়া রয়েছে (একটি জটিল এসকিউএল কোয়েরির মতো)।
সার্ভলেট 2.5 সঙ্গে এই সার্ভলেট ধারক প্রাপ্তিসাধ্য থ্রেডের রান আউট হলে একই সময়ে পাঁচটি অনুরোধ এবং পাঁচটি প্রাপ্তিসাধ্য থ্রেড প্রক্রিয়া কাজ শুরু পায়, কারণ থ্রেড না হওয়া অবধি ফিরবে না service()(অথবা doGet(), doPost()ইত্যাদি) শুরু থেকে কার্যকর শেষ এবং একটি প্রতিক্রিয়া ফেরত।
সার্লেটস 3.0.০ সহ, দীর্ঘ-সময় প্রক্রিয়াটি অন্য থ্রেডে অর্পণ করা যেতে পারে এবং service()প্রতিক্রিয়া পাঠানোর আগে শেষ করা উচিত (এখন প্রতিক্রিয়াটি সর্বশেষতম থ্রেড দ্বারা প্রেরণ করা হবে)। এইভাবে থ্রেড নতুন প্রতিক্রিয়া পেতে বিনামূল্যে।
অ্যাসিক্রোনাস সমর্থনের একটি উদাহরণ:
পরিবেশন 2.5:
public class MyAwesomeServlet extends HttpSerlvet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
runSlowProcess();
}
}
সার্লেটস 3:
@WebServlet(name="myServlet",
urlPatterns={"/mySlowProcess"},
asyncSupported=true)
public class MyAwesomeServlet extends HttpSerlvet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
AsyncContext myAsyncContext = request.startAsync(request, response);
delegateExecutionToProcessingThread(myAsyncContext);
}
}
public class MyProcessingObject {
public void doSlowProcess() {
runSlowProcess();
myAsyncContext.complete();
}
}
AsyncContextঅনুরোধ অবজেক্ট, প্রতিক্রিয়া অবজেক্ট এবং শ্রোতা যুক্ত করার প্রক্রিয়াটি শেষ হওয়ার পরে তাদের সূচিত করার জন্য ইন্টারফেসেরও পদ্ধতি রয়েছে।
প্রোগ্রামেটিক লগইন এবং লগআউট (সুরক্ষা বর্ধন)
সার্ভলেট 3 এ, ইন্টারফেসটি HttpServletRequestদুটি নতুন পদ্ধতি যুক্ত করা হয়েছে: login(username, password)এবং logout()।
আরও তথ্যের জন্য, জাভা EE 6 API এ দেখুন ।