সার্লেটটি "HTTP স্থিতি 404 ফেরত অনুরোধ করা সংস্থান (/ সার্লেট) উপলভ্য নয়"


99

আমার WebContent/jspsফোল্ডারে একটি জেএসপি ফাইলে আমার এইচটিএমএল ফর্ম রয়েছে । আমার ফোল্ডারে servlet.javaআমার ডিফল্ট প্যাকেজে একটি সার্লেট ক্লাস রয়েছে src। আমার মধ্যে web.xmlএটি হিসাবে ম্যাপ করা হয় /servlet

আমি actionএইচটিএমএল ফর্মের বৈশিষ্ট্যে বেশ কয়েকটি ইউআরএল চেষ্টা করেছি :

<form action="/servlet">
<form action="/servlet.java">
<form action="/src/servlet.java">
<form action="../servlet.java">

তবে সেগুলির কোনওটিই কাজ করে না। টমকেট 6/7/8-তে নীচের মতো তারা এইচটিটিপি 404 ত্রুটি ফিরিয়ে রাখছে:

HTTP স্থিতি 404 - / সার্লেট

বর্ণনা : অনুরোধ করা সংস্থান (/ সার্লেট) উপলভ্য নয়।

বা টমক্যাট 8.5 / 9 এর নীচে হিসাবে:

HTTP স্থিতি 404 - পাওয়া যায় নি

বার্তা : / সার্লেট

বর্ণনা : উত্স সার্ভার লক্ষ্য সংস্থানটির জন্য বর্তমান প্রতিনিধিত্ব খুঁজে পায়নি বা এটি বিদ্যমান তা প্রকাশ করতে রাজি নয়

কেন এটা কাজ করছে না?

উত্তর:


131

এ সার্ভলেট ক্লাস রাখুন package

সবার আগে, জাভাতে সার্লেট ক্লাসটি রাখুন package। আপনার সর্বদা প্যাকেজে সর্বজনীনভাবে পুনঃব্যবহারযোগ্য জাভা ক্লাস স্থাপন করা উচিত , অন্যথায় সেগুলি প্যাকেজে থাকা ক্লাসগুলির যেমন অদৃশ্য থাকে যেমন সার্ভার নিজেই। এইভাবে আপনি সম্ভাব্য পরিবেশ-নির্দিষ্ট সমস্যাগুলি নির্মূল করবেন। প্যাকেজবিহীন সার্লেটগুলি কেবল নির্দিষ্ট টোম্যাট + জেডিকে সংমিশ্রণে কাজ করে এবং এটি কখনই নির্ভর করা উচিত নয়।

একটি "প্লেইন" আইডিই প্রকল্পের ক্ষেত্রে, বর্গ চাহিদা তার প্যাকেজ গঠন "জাভা সম্পদ" ফোল্ডারে ভিতরে স্থাপন করা এবং এইভাবে না "WebContent", ওয়েব JSP যেমন ফাইলের জন্য এই হল। নীচে নেভিগেটর দৃশ্যে দেখা যায় এমন কোনও ডিফল্ট একলাইপস ডায়নামিক ওয়েব প্রকল্পের ফোল্ডার কাঠামোর উদাহরণ রয়েছে :

EclipseProjectName
 |-- src
 |    `-- com
 |         `-- example
 |              `-- YourServlet.java
 |-- WebContent
 |    |-- WEB-INF
 |    |    `-- web.xml
 |    `-- jsps
 |         `-- page.jsp
 :

একটি ম্যাভেন প্রকল্পের ক্ষেত্রে, বর্গ তার প্যাকেজ গঠন ভিতরে স্থাপন করা প্রয়োজন main/java এবং এইভাবে না যেমন main/resources, এই অ বর্গ ফাইলের জন্য হয় । নীচে একটি ডিফল্ট মাভেন ওয়েব অ্যাপ্লিকেশন প্রকল্পের ফোল্ডার কাঠামোর উদাহরণ রয়েছে যা গ্রহগ্রহের নেভিগেটর দৃশ্যে দেখা গেছে :

MavenProjectName
 |-- src
 |    `-- main
 |         |-- java
 |         |    `-- com
 |         |         `-- example
 |         |              `-- YourServlet.java
 |         |-- resources
 |         `-- webapp
 |              |-- WEB-INF
 |              |    `-- web.xml
 |              `-- jsps
 |                   `-- page.jsp
 :

নোট করুন যে /jspsসাবফোল্ডারটি কঠোরভাবে প্রয়োজনীয় নয়। আপনি এটি ব্যতীতও করতে পারেন এবং জেএসপি ফাইলটি সরাসরি ওয়েবকন্ট / ওয়েব অ্যাপ্লিকেশন রুটে রেখে দিতে পারেন, তবে আমি আপনার প্রশ্ন থেকে কেবল এটি গ্রহণ করছি।

সার্ভলেট ইউআরএল সেট করুন url-pattern

সার্লেলেট ইউআরএল সার্ভলেট ম্যাপিংয়ের "URL প্যাটার্ন" হিসাবে নির্দিষ্ট করা হয়েছে। এটি একেবারে সংজ্ঞা অনুসারে সার্ভলেট শ্রেণীর শ্রেণীর নাম / ফাইল নাম নয়। ইউআরএল প্যাটার্নটি @WebServletটীকাটির মান হিসাবে নির্দিষ্ট করতে হবে ।

package com.example; // Use a package!

@WebServlet("/servlet") // This is the URL of the servlet.
public class YourServlet extends HttpServlet { // Must be public and extend HttpServlet.
    // ...
}

আপনি যদি পথের পরামিতিগুলির মতো সমর্থন করতে চান /servlet/foo/barতবে তার /servlet/*পরিবর্তে একটি URL প্যাটার্ন ব্যবহার করুন। আরও দেখুন / Xyz / {মান} / পরীক্ষা, কিভাবে web.xml দিকে মানচিত্র-এ মত সার্ভলেট এবং পথ পরামিতি?

@WebServlet কেবল সার্লেলেট 3.0 বা আরও নতুনতে কাজ করে

ব্যবহারের জন্য @WebServlet, আপনি শুধুমাত্র নিশ্চিত করুন যে আপনার করতে হবে web.xmlফাইল, যদি থাকে (এটা সার্ভলেট 3.0 থেকে ঐচ্ছিক), ঘোষিত হয় সামঞ্জস্য সার্ভলেট 3.0+ সংস্করণ এবং এইভাবে না সামঞ্জস্য যেমন 2.5 সংস্করণ বা নীচু । নীচে একটি সার্লেট ৫.০ সামঞ্জস্যপূর্ণ রয়েছে (যা টমক্যাট 9+, ওয়াইল্ডফ্লাই 11+, পেয়ারা 5+ ইত্যাদির সাথে মেলে)।

<?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"
>
    <!-- Config here. -->
</web-app>

অথবা, আপনি এখনও সার্লেট ৩.০++ তে নেই (যেমন টমক্যাট or বা তার বেশি), তারপরে টিকাটি সরিয়ে ফেলুন @WebServlet

package com.example;

public class YourServlet extends HttpServlet {
    // ...
}

এবং এর পরিবর্তে সার্ভলেটটি নিবন্ধ করুন web.xml:

<servlet>
    <servlet-name>yourServlet</servlet-name>
    <servlet-class>com.example.YourServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>yourServlet</servlet-name>
    <url-pattern>/servlet</url-pattern>  <!-- This is the URL of the servlet. -->
</servlet-mapping>

এইভাবে নোট করুন যে আপনার উভয় উপায় ব্যবহার করা উচিত নয়। হয় টীকা ভিত্তিক কনফিগারেশন বা এক্সএমএল ভিত্তিক কনফিগারেশন ব্যবহার করুন। আপনার উভয়ই থাকে, তবে এক্সএমএল ভিত্তিক কনফিগারেশন টীকা ভিত্তিক কনফিগারেশনকে ওভাররাইড করে ide

বিল্ড / স্থাপনার যাচাই করা হচ্ছে

আপনি যদি একটি বিল্ড টুল যেমন Eclipse এবং / অথবা Maven ব্যবহার করছেন তবে আপনার অবশ্যই একেবারে নিশ্চিত করতে হবে যে কম্পাইল করা সার্লেট ক্লাস ফাইলটি /WEB-INF/classesউত্পাদিত WAR ফাইলের ফোল্ডারে তার প্যাকেজ কাঠামোর মধ্যে রয়েছে । ক্ষেত্রে package com.example; public class YourServlet, এটি অবশ্যই অবস্থিত থাকতে হবে /WEB-INF/classes/com/example/YourServlet.class। অন্যথায় আপনি @WebServlet404 ত্রুটির ক্ষেত্রে বা <servlet>নীচের মতো এইচটিটিপি 500 ত্রুটির ক্ষেত্রেও মুখোমুখি হবেন :

এইচটিটিপি স্থিতি 500

সার্ভলেট ক্লাস কম ইনস্টল করতে ত্রুটি erv

এবং সার্ভার লগ এ সন্ধান করুন java.lang.ClassNotFoundException: com.example.YourServlet, এর পরে একটি java.lang.NoClassDefFoundError: com.example.YourServletঅনুসরণ করুন javax.servlet.ServletException: Error instantiating servlet class com.example.YourServlet

সার্লেটটি সঠিকভাবে সংকলন করে শ্রেণিপথে স্থাপন করা হয়েছে কিনা তা যাচাই করার একটি সহজ উপায় হ'ল বিল্ড সরঞ্জামটি একটি ওয়ার ফাইল তৈরি করতে দেয় (যেমন রাইটক্লিক প্রকল্প, এক্সপোর্ট> এক্সিপিসে ওয়ার ফাইল ) এবং তারপরে একটি জিপ সরঞ্জাম দিয়ে এর সামগ্রীগুলি পরীক্ষা করে। সার্ভলেট শ্রেণিটি যদি অনুপস্থিত থাকে /WEB-INF/classesবা রফতানিতে কোনও ত্রুটির কারণ হয়ে থাকে তবে প্রকল্পটি খারাপভাবে কনফিগার করা হয়েছে বা কিছু আইডিই / প্রকল্প কনফিগারেশন ডিফল্ট ভুল করে ফিরে গেছে (উদাহরণস্বরূপ প্রকল্প> বিল্ড অটোমেটিক ইলিপসে অক্ষম করা হয়েছে)।

আপনারও নিশ্চিত করতে হবে যে প্রকল্প আইকনটিতে কোনও বিল্ড ত্রুটি নির্দেশ করে কোনও রেড ক্রস নেই। আপনি সমস্যা ভিউতে সঠিক ত্রুটিটি খুঁজে পেতে পারেন ( উইন্ডো> প্রদর্শন দেখান> অন্যান্য ... )। সাধারণত ত্রুটির বার্তাটি গুগলেবল হয়। আপনার যদি কোনও চিহ্ন না থাকে তবে স্ক্র্যাচ থেকে পুনরায় চালু করা এবং কোনও আইডিই / প্রকল্পের কনফিগারেশন ডিফল্টগুলিকে স্পর্শ করবেন না best আপনি যদি Eclipse ব্যবহার করছেন তবে আপনি আমার Eclipse প্রজেক্টে javax.servlet এপিআই কীভাবে আমদানি করবেন তার দিকনির্দেশগুলি পেতে পারেন ?

সার্ভলেট স্বতন্ত্রভাবে পরীক্ষা করা হচ্ছে

তবে শর্ত থাকে যে সার্ভারটি চালু আছে localhost:8080এবং ওয়ারটি সফলভাবে একটি প্রসঙ্গের পথে স্থাপন করা হয়েছে /contextname(যা আইডিই প্রকল্পের নামের সাথে ডিফল্ট হয়, কেস সেনসিটিভ!), এবং সার্লেটটি তার প্রারম্ভিককরণে ব্যর্থ হয়নি (কোনও স্থাপনার জন্য সার্ভার লগগুলি পড়ুন / সার্লেট সাফল্য / ব্যর্থ বার্তাগুলি এবং প্রকৃত প্রসঙ্গের পথ এবং সার্লেট ম্যাপিং), এর URL প্যাটার্ন সহ একটি সার্লেট /servletএখানে উপলব্ধ http://localhost:8080/contextname/servlet

অদৃশ্যভাবে পরীক্ষা করার জন্য আপনি এটি সরাসরি ব্রাউজারের ঠিকানা বারে প্রবেশ করতে পারেন। যদি doGet()এটি যথাযথভাবে ওভাররাইড করে এবং প্রয়োগ করা হয় তবে আপনি ব্রাউজারে এর আউটপুট দেখতে পাবেন। অথবা যদি আপনার কোনও না থাকে doGet()বা এটি ভুলভাবে কল করে super.doGet()তবে একটি " এইচটিটিপি 405: এইচটিটিপি পদ্ধতিটি জিআরটি এই ইউআরএল দ্বারা সমর্থিত নয় " ত্রুটি দেখানো হবে (যা 405 হিসাবে এখনও 404 এর চেয়ে ভাল যা সার্ভলেট প্রমাণ করে নিজেই পাওয়া যায়)।

ওভাররাইড service()করা একটি খারাপ অভ্যাস, যদি না আপনি কোনও এমভিসি কাঠামো পুনরায় উদ্ভাবন করেন - যা আপনি কেবল সার্লেটগুলি দিয়ে শুরু করছেন এবং বর্তমান প্রশ্নে বর্ণিত সমস্যাটি সম্পর্কে নিখুঁত হয়ে থাকলে;) ডিজাইন প্যাটার্নস ওয়েব ভিত্তিক অ্যাপ্লিকেশনগুলিও দেখুন

নির্বিশেষে, সার্ভলেট যদি ইতিমধ্যে 404 অদৃশ্যভাবে পরীক্ষা করে ফিরে আসে তবে তার পরিবর্তে এইচটিএমএল ফর্ম দিয়ে চেষ্টা করা সম্পূর্ণরূপে অর্থহীন। যৌক্তিকভাবে, তাই কোনও সার্লেট থেকে 404 ত্রুটি সম্পর্কে প্রশ্নে কোনও HTML ফর্ম অন্তর্ভুক্ত করা পুরোপুরি অর্থহীন।

এইচটিএমএল থেকে সার্লেট ইউআরএল উল্লেখ করা হচ্ছে

একবার আপনি যাচাই করেছেন যে স্বতন্ত্রভাবে স্বতন্ত্রভাবে আহ্বান করা হলে ঠিকঠাক কাজ করে, তারপরে আপনি এইচটিএমএল এ যেতে পারেন। এইচটিএমএল ফর্মের সাথে আপনার কংক্রিট সমস্যা হিসাবে, <form action>মানটি একটি বৈধ URL হওয়া দরকার। একই প্রযোজ্য <a href>। পরম / আপেক্ষিক URL গুলি কীভাবে কাজ করে তা আপনাকে বুঝতে হবে You আপনি জানেন, একটি ইউআরএল হ'ল একটি ওয়েব ঠিকানা যা আপনি ওয়েব ব্রাউজারের ঠিকানা বারে প্রবেশ / দেখতে পাচ্ছেন। আপনি যদি কোনও আপেক্ষিক ইউআরএলটিকে ফর্ম ক্রিয়া হিসাবে নির্দিষ্ট করে থাকেন, অর্থাত্ http://স্কিম ছাড়াই , তবে এটি আপনার ওয়েব ব্রাউজারের ঠিকানা বারে দেখলে এটি বর্তমান URL এর সাথে আপেক্ষিক হয়ে ওঠে । এটি সার্ভারের ওয়ার ফোল্ডারের কাঠামোর জেএসপি / এইচটিএমএল ফাইল অবস্থানের সাথে একেবারেই আপেক্ষিক নয় যেমন অনেক স্টার্টার মনে করেন।

সুতরাং, অভিমানী যে এইচটিএমএল ফর্ম সঙ্গে JSP পৃষ্ঠা দ্বারা খোলা হয় http://localhost:8080/contextname/jsps/page.jsp, এবং আপনি মধ্যে অবস্থিত একটি সার্ভলেট জমা দিতে প্রয়োজন http://localhost:8080/contextname/servlet, এখানে বিভিন্ন ক্ষেত্রে (মনে রাখবেন আপনি নিরাপদে প্রতিস্থাপন করতে পারেন <form action>সঙ্গে <a href>এখানে):

  • ফর্ম অ্যাকশন একটি শীর্ষস্থানীয় স্ল্যাশ সহ একটি URL এ জমা দেয়।

      <form action="/servlet">
    

    শীর্ষস্থানীয় স্ল্যাশ /ইউআরএলটিকে ডোমেনের সাথে তুলনামূলক করে তোলে, সুতরাং ফর্মটি জমা দেবে

      http://localhost:8080/servlet
    

    তবে এটি সম্ভবত 404 এর ফলাফল হিসাবে দেখাবে কারণ এটি ভুল প্রসঙ্গে রয়েছে।


  • ফর্ম অ্যাকশন একটি শীর্ষস্থানীয় স্ল্যাশ ছাড়াই কোনও URL এ জমা দেয়।

      <form action="servlet">
    

    এটি ইউআরএলটিকে বর্তমান ইউআরএলের বর্তমান ফোল্ডারের সাথে সম্পর্কিত করে তোলে, সুতরাং ফর্মটি জমা দেওয়া হবে

      http://localhost:8080/contextname/jsps/servlet
    

    তবে এটির ফলস্বরূপ এটি 404 এ আসবে কারণ এটি ভুল ফোল্ডারে রয়েছে।


  • ফর্ম অ্যাকশনটি একটি URL এ জমা দেয় যা একটি ফোল্ডারে যায়।

      <form action="../servlet">
    

    এটি একটি ফোল্ডার উপরে যাবে (ঠিক যেমন স্থানীয় ডিস্ক ফাইল সিস্টেমের পাথের মতো!), সুতরাং ফর্মটি জমা দেওয়া হবে

      http://localhost:8080/contextname/servlet
    

    এই এক কাজ করা আবশ্যক!


  • ক্যানোনিকাল পন্থাটি হ'ল ইউআরএলকে ডোমেন-রিলেটিভ করে তুলতে হয় যাতে জেএসপি ফাইলগুলি অন্য কোনও ফোল্ডারে ঘুরিয়ে দেওয়ার সময় আপনার আর একবার URL সংশোধন করার প্রয়োজন হয় না।

      <form action="${pageContext.request.contextPath}/servlet">
    

    এটি উত্পন্ন হবে

      <form action="/contextname/servlet">
    

    যা এইভাবে সর্বদা সঠিক URL এ জমা দেবে।


এইচটিএমএলে সোজা উদ্ধৃতি ব্যবহার করুন

আপনি HTML মত বৈশিষ্ট্যাবলী মধ্যে নিশ্চিত করুন যে আপনি সোজা উদ্ধৃতি চিহ্ন ব্যবহার করছেন একেবারে করতে হবে action="..."বা action='...'এবং এইভাবে না মত কোঁকড়া কোট action=”...”বা action=’...’। কোঁকড়ানো উদ্ধৃতিগুলি এইচটিএমএলে সমর্থিত নয় এবং এগুলি কেবলমাত্র মানটির অংশ হয়ে যাবে। ব্লগগুলি থেকে কপি-পেস্ট কোড স্নিপেটগুলি দেখুন! কিছু ব্লগ ইঞ্জিন, উল্লেখযোগ্যভাবে ওয়ার্ডপ্রেস, ডিফল্টরূপে তথাকথিত "স্মার্ট কোটস" ব্যবহার করে যা এইভাবে কোড স্নিপেটে এইভাবে উদ্ধৃতিগুলি দূষিত করে। অন্যদিকে, অনুলিপি-কোডিং কোডের পরিবর্তে কোডটি নিজেই টাইপ করার চেষ্টা করুন। আপনার মস্তিষ্ক এবং আঙ্গুলের মাধ্যমে কোডটি পেতে আসলে অতিরিক্ত সুবিধা হ'ল এটি আপনাকে দীর্ঘমেয়াদে কোডটি আরও ভালভাবে মনে রাখতে এবং বুঝতে এবং আপনাকে আরও উন্নত বিকাশকারী করে তুলবে।

আরো দেখুন:

HTTP স্থিতির 404 ত্রুটির অন্যান্য ক্ষেত্রে:


4
ওয়েব-অ্যাপ্লিকেশন সংস্করণ = "৩.১" গ্লাসফিশ ব্যবহার করে, আমি আমার সার্লেটটি স্বতন্ত্রভাবে ঠিক ঠিক পরীক্ষা করতে পারতাম যখন আমার ওয়েব.এক্সএমএল এ ম্যাপিং এবং টীকাযুক্ত ছিল। আমি ম্যাপিংটি সরিয়ে ফেলেছি এবং টীকাটি ছেড়েছি যেহেতু আমার কাছে সর্বশেষতম সংস্করণ রয়েছে তবে আমি কী 404 ত্রুটি পাব?
স্যালিরোথ্রোগ

4
সার্ভলেট লাইব্রেরিগুলি নিজেই সরবরাহ করার জন্য লক্ষ্য রানটাইমের উপর নির্ভর করার পরিবর্তে আপনি খুব ওয়েবপ্যাপে সার্লেটলেট 2.5 বা পুরানো লাইব্রেরিগুলি অন্তর্ভুক্ত করলে এটি ঘটতে পারে।
বালুস সি

@ এক্সডোলা: এটি সত্যিই ভঙ্গুর কারণ এটি ইউআরআই অনুরোধের উপর নির্ভর করে। আপনার সমস্যা এবং সঠিক পদ্ধতির কী তা ব্যাখ্যা করার জন্য কেবল উত্তরটি পড়ুন।
বালুসসি

4

দৃশ্যপট # 1: আপনি accidentially পুনরায় মোতায়েন কম্যান্ড লাইন থেকে যখন হুল বিড়াল ছিল ইতিমধ্যেই চলছে

সংক্ষিপ্ত উত্তর: টমক্যাট বন্ধ করুন, লক্ষ্য ফোল্ডারটি মুছুন , এমভিএন প্যাকেজ, তারপরে পুনরায় মোতায়েন করুন


পরিস্থিতি # 2: অনুরোধ.কেটরেইক্টডিসপ্যাচার (" MIS_SPELLED_FILE_NAME .jsp ")

সংক্ষিপ্ত উত্তর: চেক ফাইলের নাম বানান , নিশ্চিত করুন কেস সঠিক।


দৃশ্য # 3: শ্রেণি খুঁজে পাওয়া যায় নি ব্যতিক্রম (উত্তর এখানে রাখুন কারণ: প্রশ্ন # 17982240) ( java.lang.ClassNotFoundException টমকাটে সার্ভলেটের সাথে গ্রহনের জন্য চিহ্নিত করা হয়েছিল) (এখানে সদৃশ হিসাবে চিহ্নিত হয়েছিল এবং আমাকে এখানে নির্দেশিত করেছিলেন)

সংক্ষিপ্ত উত্তর # 3.1: ওয়েব.এক্সএমএল এর সার্লেট-শ্রেণির ট্যাগে প্যাকেজটির ভুল রয়েছে।

সংক্ষিপ্ত উত্তর # 3.2: জাভা ফাইলের ভুল আমদানির বিবৃতি রয়েছে।


নীচে পরিস্থিতি # 1 এর আরও বিশদ রয়েছে:


1: টমক্যাট বন্ধ করুন

  • বিকল্প 1: টার্মিনালে CTRL + সি মাধ্যমে।
  • বিকল্প 2: (টমক্যাটটি এখনও চলমান অবস্থায় টার্মিনালটি বন্ধ)
  • ------------ 2.1: টিপুন: উইন্ডোজ + আর -> টাইপ করুন: " Services.msc "
  • ------------ 2.2: তালিকার নাম কলামে "অ্যাপাচি টমক্যাট #। # টোম্যাট #" সন্ধান করুন।
  • ------------ 2.3: রাইট ক্লিক করুন -> " থামুন "

2: "লক্ষ্য" ফোল্ডারটি মুছুন। (এমভিএন ক্লিন আপনাকে এখানে সাহায্য করবে না)

3: এমভিএন প্যাকেজ

4: YOUR_DEPLOYMENT_COMMAND_HERE

(খনি: জাভা-লক্ষ্য টার্গেট / নির্ভরতা / ওয়েবঅ্যাপ-রানার.জার - পোর্ট 5190 টার্গেট / * যুদ্ধ)

পুরো পিছনের গল্প:


অজ্ঞাতসারে একটি নতুন গিট-ব্যাশ উইন্ডো খোলার মাধ্যমে আমার হিরকু প্রকল্পের জন্য একটি .war ফাইলটি স্থাপনের চেষ্টা করা হয়েছে:

java -jar টার্গেট / নির্ভরতা / ওয়েবঅ্যাপ-রানার.জার --পোর্ট 5190 টার্গেট / *। যুদ্ধ

মোতায়েন করতে ব্যর্থ হওয়ার পরে, আমি বুঝতে পারি আমার দুটি গিট-ব্যাশ উইন্ডো খোলা আছে এবং পূর্ববর্তী স্থাপনা বন্ধ করতে সিটিএলআর + সি ব্যবহার করিনি

আমার সাথে দেখা হয়েছিল:

HTTP স্থিতি 404 - পাওয়া যায়নি ধরণের স্থিতি প্রতিবেদন

বার্তা /if-student-test.jsp

বিবরণ উত্স সার্ভার লক্ষ্য সংস্থানটির জন্য বর্তমান প্রতিনিধিত্ব খুঁজে পায় নি বা এটি উপস্থিত রয়েছে তা প্রকাশ করতে রাজি নয়।

অ্যাপাচি টমক্যাট / 8.5.31

নীচে পরিস্থিতি # 3 এর আরও বিশদ রয়েছে:


স্কেনারিও ৩.১: সার্ভলেট-শ্রেণীর প্যাকেজ পথটি আপনার ওয়েব.এক্সএমএল ফাইলে ভুল।

এটি আপনার জাভা সার্লেট ক্লাসের শীর্ষে প্যাকেজ বিবৃতিটি ম্যাচ করা উচিত।

ফাইল: my_stuff / MyClass.java :

   package my_stuff;

ফাইল: PRJ_ROOT / src / main / webapp / WEB-INF / web.xML

   <servlet-class>
   my_stuff.MyClass
   </servlet-class>

স্কেনারিও ৩.২:

আপনি আপনার myClass.java ফাইলের শীর্ষে ভুল " প্যাকেজ " বিবৃতি রেখেছেন।

উদাহরণ স্বরূপ:

ফাইলটি এতে রয়েছে: " / আমার_স্টফ " ফোল্ডারটি

আপনি ভুল করে লিখুন:

package com.my_stuff

এটি জটিল কারণ:

1: মাভেন বিল্ড (এমভিএন প্যাকেজ) এখানে কোনও ত্রুটির খবর দেবে না।

2: ওয়েব.এক্সএমএল-এ সার্লেট-শ্রেণীর লাইনটিতে সঠিক প্যাকেজ পাথ থাকতে পারে। যেমন:

<servlet-class>
my_stuff.MyClass
</servlet-class>

স্ট্যাক ব্যবহার করা হয়েছে: নোটপ্যাড ++, + + GitBash + + ম্যাভেন + + Heroku ওয়েব অ্যাপ রানার + + Tomcat9 + + Windows10 :


আপনার AppName.war এবং এইভাবে বিস্ফোরিত ফোল্ডার নামটি আপনার প্রত্যাশিত নামের সাথে মেলে না, উদাহরণস্বরূপ যখন আপনার যুদ্ধ ফাইলটি AppName-1.0-SNAPSHOT.war এর মতো সংস্করণিত হয় এবং আপনি / অ্যাপনাম / চেষ্টা করছেন।
jla

1

আপনি ওয়েব.এক্সএমএমএল অনুসারে সঠিক ইউআরএল ম্যাপিং প্রবেশ করিয়েছেন কিনা তা পরীক্ষা করে দেখুন

উদাহরণ স্বরূপ:

ওয়েব.এক্সএমএলে, আপনার সার্লেলেট ঘোষণা হতে পারে:

<servlet>
        <servlet-name>ControllerA</servlet-name>
        <servlet-class>PackageName.ControllerA</servlet-class>
</servlet>

<servlet-mapping>
        <servlet-name>ControllerA</servlet-name>
        <url-pattern>/theController</url-pattern>
</servlet-mapping>

এই স্নিপেটটি যা করে তা হ'ল <url-pattern>/theController</url-pattern>নামটি সেট করে যা ইউআরএল এর মাধ্যমে সম্মুখ প্রান্ত (যেমন: ফর্ম) থেকে সার্লেটকে কল করতে ব্যবহৃত হবে। সুতরাং যখন আপনি সম্মুখ প্রান্তে সার্ভলেটটি উল্লেখ করেন, অনুরোধটি সার্ভলেট "কন্ট্রোলারএ" তে চলে যায় তা নিশ্চিত করার জন্য, এটি ফর্মটি থেকে নির্দিষ্ট ইউআরএল প্যাটার্ন "দ্য কন্ট্রোলার" উল্লেখ করতে হবে।

যেমন:

<form action="theController" method="POST">
</form>

0

HTTP Status 404নেটবিয়ান আইডিই-তে সমাধান : আপনার প্রকল্পে ডান ক্লিক করুন এবং আপনার প্রকল্পের বৈশিষ্ট্যে যান, তারপরে রান ক্লিক করুন, তারপরে আপনার প্রকল্পের মতো সম্পর্কিত ইউআরএল ইনপুট করুন index.jsp

  1. প্রকল্প-> সম্পত্তি
  2. রান ক্লিক করুন
  3. আপেক্ষিক URL: /index.jsp (আপনার প্রকল্পের মূল URL নির্বাচন করুন)

এখানে চিত্র বর্ণনা লিখুন


0

আমার সমস্যাটি ছিল যে আমার পদ্ধতিটি @RequestBody টীকাটি অনুপস্থিত। টিকা যোগ করার পরে আমি আর 404 ব্যতিক্রম পাই নি।


0

নিম্নলিখিত দুটি পদক্ষেপ করুন। আমি আশা করি, এটি জাভা সার্লেট অ্যাপ্লিকেশনটির বিকাশের সময় টমক্যাট সার্ভারে "404 পাওয়া যায়নি" সমস্যাটি সমাধান করবে।

ধাপ 1: Right click on the server(in the server explorer tab)->Properties->Switch Location from workspace metadata to tomcat server

ধাপ ২: Double Click on the server(in the server explorer tab)->Select Use tomcat installation option inside server location menu


0

আমি পুরানো ওয়েব লাইব্রেরিগুলিকে সরিয়ে দিয়েছি যেগুলি বসন্ত কাঠামোর লাইব্রেরি। এবং গ্রন্থাগারগুলির একটি নতুন পথ তৈরি করুন। তারপরে এটি কাজ করে।


0

একটি পুরানো থ্রেড, তবে যেহেতু আমি এটি অন্য কোথাও পাইনি, এখানে আরও একটি সম্ভাবনা রয়েছে:

আপনি যদি সার্লেট -এপিআই 3.0+ ব্যবহার করছেন তবে আপনার ওয়েব.এমএমএলগুলিতে অবশ্যই গুণাবলী অন্তর্ভুক্ত করা উচিত নয়metadata-complete="true"

এখানে চিত্র বর্ণনা লিখুন

এটি টমক্যাটকে টিকাটি ব্যবহারের web.xmlপরিবর্তে প্রদত্ত ডেটা ব্যবহার করে সার্লেটগুলি ম্যাপ করতে বলে @WebServlet


0

সবার আগে, আপনার আইডিই প্রশাসক হিসাবে চালান। এর পরে, প্রকল্প ফোল্ডারে -> প্রকল্পের দিকগুলি ডান ক্লিক করুন এবং জাভা সংস্করণটি সঠিকভাবে সেট করা আছে তা নিশ্চিত করুন। আমার পিসিতে (উদাহরণস্বরূপ 1.8) এখন এটি কাজ করা উচিত।

শুধু আপনার সার্ভার শুরু করবেন না, উদাহরণস্বরূপ ওয়াইল্ডফ্লাই, সেন্টিমিডি ব্যবহার করে। এটি আইডিইর মধ্যে চালু করতে হবে এবং এখন আপনার লোকালহোস্ট URL টি দেখতে হবে। উদাহরণ: HTTP: // লোকালহোস্ট: 8080 / হ্যালো ওয়ার্ল্ড সার্ভলেট / হ্যালো ওয়ার্ল্ড


0

আমার জন্য ঠিক করা কাজটি হ'ল (যদি আপনি ম্যাভেন ব্যবহার করছেন): আপনার প্রকল্পে মাউন -> আপডেট প্রকল্পটি ডান ক্লিক করুন। এটি আপনাকে জেডিকে এবং অন্যান্য গ্রন্থাগারগুলিতে (আমার ক্ষেত্রে, মাইএসকিউএল সংযোগকারী) কিছু অন্য ত্রুটি দিতে পারে, তবে একবার আপনি এগুলি ঠিক করে ফেললে আপনার মূল সমস্যাটি ঠিক করা উচিত!


0

আপনি যদি 'ফর্ম' এবং 'সাবমিট' বোতামটি ব্যবহার না করে জাভাস্ক্রিপ্ট সহ কোনও সার্লেট খুলতে চান তবে নীচের কোডটি এখানে:

var button = document.getElementById("<<button-id>>");
button.addEventListener("click", function() {
  window.location.href= "<<full-servlet-path>>" (eg. http://localhost:8086/xyz/servlet)
});

চাবি:

1) বোতাম-আইডি: আপনার এইচটিএমএল / জেএসপি ফাইলটিতে আপনি যে আইডি ট্যাগটি আপনার বোতামে দেন।

2) পূর্ণ-সার্লেট-পাথ: আপনি একা সার্লেটলেট চালানোর সময় ব্রাউজারে যে পথটি প্রদর্শিত হয়


0

ওয়েব.এক্সএমএল-এ ম্যাপিং হ'ল আমি যা করেছি: -

  1. যদি নতুন প্রোগ্রামের জন্য অন্য কোনও প্যাকেজ তৈরি করা থাকে তবে আমাদের অবশ্যই উল্লেখ করতে হবে: -

xml ফাইলে সার্লেট-ক্লাস ট্যাগ খোলার এবং বন্ধ করার মধ্যে প্যাকেজ নাম.ফাইলনাম।

  1. আপনি যদি আপনার ফাইলগুলিকে এক্সএমএল এ ম্যাপিং করে থাকেন এবং সেগুলি কাজ করছে না বা ত্রুটি দেখাচ্ছে না, তবে সংশ্লিষ্ট ফাইলগুলিতে কোডের এনটোটেশন লাইনে মন্তব্য করুন।

উভয় পদ্ধতিই একে অপরের সাথে কাজ করে না, সুতরাং আমরা যখন সার্লেট বা ম্যাপিংয়ের পদ্ধতি তৈরি করি তখন উল্লিখিত ফাইলগুলির উল্লিখিত পদ্ধতি ব্যবহার করি, তারপরে আমি টীকাগুলির লাইনটি মুছুন বা মন্তব্য করব। যেমন:

 <servlet>
   <servlet-name>s1</servlet-name>
   <servlet-class>performance.FirstServ</servlet-class>
   </servlet>    
   
   <servlet-mapping>
   <servlet-name>s1</servlet-name>
   <url-pattern>/FirstServ</url-pattern>
   </servlet-mapping>
   
   <servlet>
   <servlet-name>s2</servlet-name>
   <servlet-class>performance.SecondServ</servlet-class>
   </servlet>
   
   <servlet-mapping>
   <servlet-name>s2</servlet-name>
   <url-pattern>/SecondServ</url-pattern>
   </servlet-mapping>

যদি এক্সএমএল-এ ম্যাপিং করা হয় তবে সংশ্লিষ্ট ফাইলটিতে কোডের টীকাগুলির লাইনটি মন্তব্য করা হচ্ছে।

//@WebServlet("/FirstServ")
//@WebServlet("/SecondServ")

0

যদি কেউ এখানে থাকেন যে মাইএসকিউএল ব্যবহার করছেন এবং অনুভব করেছেন যে কোডটি আগের দিনটি কাজ করছে এবং এখন তা হয় না, তবে আমি অনুমান করি আপনাকে অবশ্যই মাইএসকিউএল সি এল এল বা মাইএসকিউএল ওয়ার্কবেঞ্চ খোলার প্রয়োজন এবং একবার ডাটাবেসের সাথে সংযোগটি করা উচিত। এটি সংযুক্ত হয়ে গেলে, তারপর ডাটাবেসটি জাভা অ্যাপ্লিকেশনটির সাথে সংযুক্ত হয়ে যায়। আমি com.mysql.jdbc.Driver এর সাথে কিছু ভুল বলে হাইবারনেট ডায়ালেক্ট ত্রুটি পেয়েছি। আমি মনে করি কিছু কম্পিউটারে মাইএসকিউএল একটি স্টার্টআপ সমস্যা আছে। এটা আমার জন্য সমাধান।


0

আপনি যদি ছাত্র এবং জাভাতে নতুন হন তবে আপনার ওয়েব.এক্সএমএল ফাইলটি নিয়ে কিছু সমস্যা হতে পারে।

  1. ওয়েব.এক্সএমএল ফাইলটি সরানোর চেষ্টা করুন।
  2. দ্বিতীয়ত আপনার পাথের ভেরিয়েবলগুলি সঠিকভাবে সেট করা আছে কিনা তা পরীক্ষা করে দেখুন।
  3. টমক্যাট সার্ভার বা আপনার পিসি পুনরায় চালু করুন।

আপনার সমস্যা অবশ্যই সমাধান করা হবে।


-1

অনুগ্রহ করে পরীক্ষা করুন প্রসঙ্গটি শূন্য হতে পারে না

আপনি যদি গ্রহণ করছেন:
ডান ক্লিক করুন , বৈশিষ্ট্য নির্বাচন করুন , তারপরে ওয়েব প্রকল্প সেটিংসপ্রসঙ্গটি রুট খালি থাকতে পারে তা পরীক্ষা করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.