টমক্যাট .0.০-তে কোনও ওয়েব অ্যাপ্লিকেশনের প্রসঙ্গের পথটি কীভাবে সেট করবেন


162

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

উপাদানগুলি সরাসরি সার্ভার.এক্সএমএল ফাইলে রাখার প্রস্তাব দেওয়া হয় না

সুতরাং আমি এটির প্রস্তাব করে এমন অন্য পদ্ধতিটি করার চেষ্টা করেছি।

স্বতন্ত্র প্রসঙ্গ উপাদানগুলি স্পষ্টভাবে সংজ্ঞায়িত করা যেতে পারে: /META-INF/context.xML এ পৃথক ফাইলের মধ্যে অ্যাপ্লিকেশন ফাইলের অভ্যন্তরে।

সুতরাং আমি /META-INF/context.xmlনিম্নলিখিত কোড সহ একটি তৈরি করেছি ,

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>

তবে সার্ভারটি পুনরায় চালু করার পরে স্থাপনের পরে এটি "/" এ প্রসঙ্গটি লোড করতে এখনও ব্যর্থ হয়েছিল, এটি এখনও এটি দিয়ে লোড করেছে "/<WEB_APP_NAME>"

কোন পয়েন্টার সহায়ক।



1
ডক্সে প্রদত্ত "সার্ভার.এক্সএমএল ফাইলটিতে উপাদানগুলি সরাসরি রাখার পরামর্শ দেওয়া হয় না" এর কারণটি পরবর্তী বাক্যটিতে অনুসরণ করে: "এটি কারণ কনফেক্সট কনফিগারেশনটিকে আরও আক্রমণাত্মক করে তোলে কারণ মূল কনফারেন্স / সার্ভার.এক্সএমএল ফাইলটি পারেন না টমক্যাট পুনরায় আরম্ভ না করে পুনরায় লোড করা হবে " নীচের স্বীকৃত উত্তরটি সরাসরি সমস্যার সমাধান করে, তবে আপনি যদি আবার এই পথটি সংশোধন করতে না পারেন বা পুনরায় চালু করা খুব বাধাগ্রস্ত না হয় তবে সার্ভার.এক্সএমএল সংশোধন করা সমস্ত অযৌক্তিক বলে মনে হয় না।
রিমস্কি

উত্তর:


236

আপনি যা করতে পারেন তা নিম্নলিখিত;

নামক কোনো ফাইল যোগ করুন ROOT.xmlমধ্যে<catalina_home>/conf/Catalina/localhost/

এই রুট.এক্সএমএল সেই ইঞ্জিন এবং হোস্ট (ক্যাটালিনা এবং লোকালহোস্ট) এর জন্য টমক্যাট ইনস্টলেশনটির মূল প্রসঙ্গে ডিফল্ট সেটিংসকে ওভাররাইড করবে।

ROOT.xML ফাইলে নিম্নলিখিতটি প্রবেশ করান;

<Context 
  docBase="<yourApp>" 
  path="" 
  reloadable="true" 
/>

এখানে, <yourApp>ভাল, আপনার অ্যাপ্লিকেশন এর নাম .. :)

এবং সেখানে আপনি যান, আপনার অ্যাপ্লিকেশনটি এখন ডিফল্ট অ্যাপ্লিকেশন এবং এটি প্রদর্শিত হবে http://localhost:8080

তবে এর এক পার্শ্ব প্রতিক্রিয়া রয়েছে; আপনার অ্যাপ্লিকেশন দুইবার লোড করা হবে। একবার localhost:8080এবং একবার জন্য localhost:8080/yourApp। এটি সমাধানের জন্য আপনি নিজের আবেদনটি <catalina_home>/webappsআউটসাইডে রাখতে পারেন এবং ROOT.xML এর ডকবেস ট্যাগটিতে একটি আপেক্ষিক বা পরম পথ ব্যবহার করতে পারেন । এটার মতো কিছু;

<Context 
  docBase="/opt/mywebapps/<yourApp>" 
  path="" 
  reloadable="true" 
/>

এবং তারপর এটি সব ঠিক করা উচিত!


32
নিচে ভোট দিয়েছেন? ঠিক আছে কিন্তু কেন? এর চেয়ে ভাল বিকল্প যদি থাকে তবে আমাকেও জানান! : ডি
প্যাসকে

1
এটি কি নিয়মিত ওয়েব অ্যাপস ফোল্ডারে অন্যান্য যুদ্ধের সাথে কাজ করবে?
chrislovecnm

5
ডাবল-স্থাপনার সমাধানের জন্য আপনি সার্ভার.এক্সএমএলে হোস্ট বৈশিষ্ট্যের মিথ্যা "ডিপ্লোইঅনস্টার্টআপ" এবং "অটোডেপ্লাই" উভয় সেট করতে পারেন
সেফলার

8
আমি খুঁজে পেয়েছি যে আপনি / ওয়েব অ্যাপস এর অধীনে ডিফল্ট রুট ফোল্ডারটির নাম পরিবর্তন না করলে "বিড়ালটি ফিরে আসে" এবং এটি ROOT.xML এ ডকবেস পুনরায় সেট করে। এটি ভিএমওয়্যারের ভিফ্যাব্রিক টিসি ডেভলপমেন্ট সার্ভারের সাথে ... সতর্কতা অবলম্বন করুন।
হোসারডুড

3
দেখা যাচ্ছে যে টমক্যাট 7 এখন / ওয়েব অ্যাপস-এর ভিতরে কোনও ডকব্যাসের অনুমতি দেবে না, সুতরাং যুদ্ধের ফাইলটি অন্য কোথাও সনাক্ত করা বাধ্যতামূলক বলে মনে হবে।
মোজো

12

এখানে আমার জন্য কাজ করা একমাত্র সমাধান অনুসরণ করা হয়েছে । এটি কনফ / সার্ভার.এক্সএমএলে হোস্ট নোডে যুক্ত করুন

<Context path="" docBase="yourAppContextName">

  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

টমক্যাট সার্ভার.এক্সএমএল ফাইলটিতে যান এবং পাথ ফাঁকা সেট করুন


1
হবে server.xmlনাকি context.xml? আমি <Context>আমারcontext.xml
সাইফ

6
সার্ভার.এক্সএমএল-তে একটি প্রসঙ্গ xML ট্যাগও রয়েছে তবে প্রসঙ্গ নির্ধারণের জন্য সার্ভার.এক্সএমএল ব্যবহার নিরুৎসাহিত করা হয়েছে
ইয়াভুজ

4

টমক্যাট 9.0-এ, আমাকে কেবল নিম্নলিখিতটিতে পরিবর্তন করতে হবে server.xml

<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

প্রতি

<Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

3

এই সামান্য কোডটি ভার্চুয়াল হোস্টগুলি ব্যবহার করে আমার পক্ষে কাজ করেছিল

<Host name="my.host.name" >
   <Context path="" docBase="/path/to/myapp.war"/>
</Host>

এই ভিতরে server.xml? উদাহরণস্বরূপ Ali.Mojtehedy অনুযায়ী সমস্যাটি সমস্যাযুক্ত। এছাড়াও, অন্যান্য উত্তর বলে যে /path/toচাহিদা হতে বাহিরে স্বাভাবিক webapps পথের।
জিন জর্দান

ঠিকঠাক কাজ মনে হচ্ছে। অবশ্যই, আপনি চান না যে একই অ্যাপ্লিকেশন ফোল্ডারে মূল অ্যাপ্লিকেশনটি আপনার সাথে দ্বন্দ্ব বোধ করে।
অ্যান্টনি হ্যাওয়ার্ড

2

দ্রুততম এবং সর্বোত্তম সমাধান হ'ল নীচের বিষয়বস্তু থাকা <TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml

<Context 
  docBase="/your_webapp_location_directory" 
  path="" 
  reloadable="true" 
/>

এবং আপনার ওয়েব অ্যাপ্লিকেশন পাওয়া যাবে http://<host>:<port>/


1
সেই ডকবেস ডিরেক্টরিটি কি কোনও নির্দিষ্ট ফোল্ডারের সাথে নিখুঁত বা আপেক্ষিক?
হোসে মার্টিনেজ

3
আমি এটি চেষ্টা করেছিলাম, কিন্তু এটি কাজ করে না। আমি একটি অ্যাপ্লিকেশন নামের Foobarমধ্যে /opt/tomcat/webapps/Foobar। আমি ডকবেস Foobarএবং এছাড়াও সেট করার চেষ্টা করেছি /opt/tomcat/webapps/Foobar, কিন্তু যখন আমি `http: // <হোস্ট>: <port> / এ যাই তখনও আমি আমার ফুবার অ্যাপের পরিবর্তে টমক্যাট হোম পৃষ্ঠাটি দেখতে পাই। এমনকি টমকেট পুনরায় চালু করেছি। আমি কি ভুল করছি?
কিম্বাওদি

আমি যখন পথটি শূন্য করি তখন এটি আমার অ্যাপে পৌঁছায় না):
Snickers3192

1

আমি এক মাসের জন্য এই সমস্যার মুখোমুখি হয়েছি, সার্ভার.এক্সএমএল এর মধ্যে প্রসঙ্গের ট্যাগ লাগানো নিরাপদ নয় এটি অন্যান্য সমস্ত হোস্টের জন্য নিযুক্ত প্রসঙ্গের উপাদানগুলিকে প্রভাবিত করে, বড় অ্যাপ্লিকেশানের ক্ষেত্রে এটি সংযোগ ত্রুটিগুলিও ভাল রাখে না উদাহরণস্বরূপ আপনি ফোল্ডার নাম ডোমেন 2 দ্বারা অন্য সাইটগুলিতে অ্যাক্সেস করতে পারেন .com / ডোমেইন 1 ফোল্ডার !! এছাড়াও ডাটাবেস সেশন সংযোগ দুটি লোড! অন্য উপায়ে ROOT.xML ফাইল স্থাপন করা হয়েছে যাতে পুরো পথের সাথে প্রসঙ্গ ট্যাগ রয়েছে:

 <Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />

কনফারেন্স / ক্যাটালিনা / ওয়েব অ্যাপসফোল্ডারনেমে এবং যুদ্ধ অ্যাপ্লিকেশনগুলিকে ওয়েব অ্যাপসফোল্ডারনেমের মধ্যে রূট.ওয়ার হিসাবে স্থাপন করুন এবং হোস্টগুলি যেমন নির্দিষ্ট করে

 <Host name="domianname"  appBase="webapps2" unpackWARs="true"  autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false" >

        <Logger className="org.apache.catalina.logger.FileLogger"
               directory="logs"  prefix="localhost_log." suffix=".txt"
          timestamp="true"/>
</Host>

এই পদ্ধতিতে একই ধরণের অ্যাপ্লিকেশনগুলির জন্য ব্যবহারকারীর সেশনগুলিরও ভাল বিচ্ছিন্নতা নেই! আপনি অ্যাপ 1 এর ভিতরে যদি অ্যাপ 1 টি অ্যাপ 2 এর সমান হতে পারেন আপনি সার্ভার সাইড সেশনে লগইন করার পরে স্বয়ংক্রিয়ভাবে অ্যাপ 2 এ লগইন করতে পারবেন ?! সুতরাং আপনাকে ব্যবহারকারীদের সেশনটি ক্লায়েন্টের পাশের ক্যাশে রাখতে হবে এবং জেসিওনিড দিয়ে নয়! এটি সমাধানের জন্য আমরা লোকালহোস্ট থেকে ইঞ্জিনের নাম পরিবর্তন করতে পারি। তবে ধরা যাক টমক্যাট নিয়ে খেলতে অন্যান্য বিড়ালের সাথে খেলার চেয়ে বেশি সময় প্রয়োজন!


1

সার্ভার.এক্সএমএল বা রুট.এক্সএমএল এর মতো সার্ভার কনফিগারেশন আপডেট করার প্রস্তাব দেওয়া হয় না।

প্রসঙ্গের পথের সেটিংটি অন্তর্ভুক্ত করে আপনি আপনার ওয়েব-অ্যাপ্লিকেশন মেটা-আইএনএফ ডিরেক্টরিতে একটি কনটেক্সট.এক্সএমএল কনফিগারেশন ফাইল রাখতে পারেন। এটি ডিফল্ট সার্ভার সেটিং ওভাররাইড করবে?

অর্থাৎ,

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">

1

<Context docBase="yourAppName" path="" reloadable="true">

টমক্যাট সার্ভার.এক্সএমএল ফাইলটিতে যান এবং পাথ ফাঁকা সেট করুন


1

টমক্যাট 8: অনেকগুলি অনুসন্ধানের পরে এটি কেবল কোডিং কোড: সার্ভার.এক্সএমএল এ

<!-- Set /apple as default path -->
    <Host name="localhost"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
     <Context path="" docBase="apple">
         <!-- Default set of monitored resources -->
         <WatchedResource>WEB-INF/web.xml</WatchedResource>
     </Context>
    </Host>

টমক্যাটটি পুনরায় চালু করুন, আপনি যখন 127.0.0.1:8080 অ্যাক্সেস করবেন তা নিশ্চিত করুন, এটি 127.0.0.1:8080/apple এ সামগ্রীটি প্রদর্শিত করবে

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


1

আমার জন্য উভয় উত্তর কাজ করে।

  1. / কনফিউশন / ক্যাটালিনা / লোকালহোস্ট / এ আরওআউট.এক্সএমএল নামে একটি ফাইল যুক্ত করা হচ্ছে
<Context
    docBase="/tmp/wars/hpong"
  path=""
  reloadable="true"
/>
  1. সার্ভার.এক্সএমএলে এন্ট্রি যুক্ত করা হচ্ছে
<Service name="Catalina2">
    <Connector port="8070" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8743" />
    <Engine name="Catalina2" defaultHost="localhost">
        <Host name="localhost"
            unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="/tmp/wars/hpong"  reloadable="true">
                <WatchedResource>WEB-INF/web.xml</WatchedResource>
            </Context>
      </Host>
    </Engine>
</Service>

দ্রষ্টব্য: আপনি যখন প্রসঙ্গের অধীনে ডকবেস ঘোষণা করেন তখন হোস্টে অ্যাপবেস উপেক্ষা করুন।

  1. তবে আমি আমার যুদ্ধের নাম রূপান্তরিত করতে পছন্দ করেছি ROOT.warএবং এটি ওয়েব অ্যাপসের আওতায় রেখেছি। সুতরাং এখন অন্যান্য যুদ্ধের (কনটেক্সটপ্যাথ) অনাবিল url অনুরোধগুলি এই যুদ্ধে নেমে আসবে। মূল ("/ **") প্রসঙ্গের পথটি হ্যান্ডেল করার এটি ভাল উপায়।

দ্বিতীয় বিকল্পটি হ'ল (ডাবল) ওয়েব অ্যাপস ফোল্ডার থেকেও যুদ্ধগুলি লোড করা। এছাড়াও এটির জন্য কেবল অসম্পূর্ণ যুদ্ধের ফোল্ডার দরকার যা মাথা ব্যথা।




1

টমক্যাট ৮. এক্স-এ, সার্ভার.এক্সএমএলে টমক্যাট হোম ডিরেক্টরি / কনফিড / ফোল্ডারের আওতায় আপনি নীচে প্রদর্শিত হিসাবে <Context>ট্যাগের আওতায় <Host>ট্যাগ যুক্ত করতে পারেন । কার্যকর হওয়ার জন্য আপনাকে সার্ভারটি পুনরায় চালু করতে হবে

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

     <Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
  </Host>

অথবা আপনি যদি টমক্যাট X. এক্স ব্যবহার করছেন তবে আপনি আপনার প্রকল্পের ওয়েব-আইএনএফ ফোল্ডারে কনটেক্সট.এক্সএমএল ফাইল যুক্ত করতে পারেন। আমি ব্যবহৃত ফাইলটির বিষয়বস্তুগুলি দেখানো হয়েছে। এবং এটা আমার জন্য ভাল কাজ করে। এই ক্ষেত্রে আপনাকে সার্ভার পুনরায় চালু করতে হবে না।

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />

টমক্যাটে পরীক্ষিত: 9.0 ডকার এবং এটি আপনার উল্লেখ করা 8.0 হিসাবে কাজ করে। localhost:8080/<Your App Directory Name>/এবং localhost:8080/<your app path you wish>/এই 2 টি URL গুলি একই সাথে কাজ করে। এই দুটি আওতায় ফোল্ডার অধীনে পাওয়া গেছে $CATALINA_HOME/webapps/
নিয়াওমজিয়ান

1

সবচেয়ে সহজ এবং নমনীয় সমাধান নীচে: ভিতরে $ {টমক্যাট_হোম} / কনফিগ / সার্ভার.এক্সএমএল

নীচের মত হোস্ট উপাদানটির অধীনে অটোডেপলয় = "মিথ্যা" ডিপ্লোয়অনস্টার্টআপ = "মিথ্যা" পরিবর্তন করুন এটি অবশ্যই is

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false" deployOnStartup="false">

হোস্ট উপাদান অধীনে লাইন যোগ করুন ।

<Context path="" docBase="ServletInAction.war"  reloadable="true">
            <WatchedResource>WEB-INF/web.xml</WatchedResource>
        </Context>

উপরোক্ত পদ্ধতির সাহায্যে আমরা বিভিন্ন প্রসঙ্গের পথের নাম সহ ওয়েব অ্যাপসের অধীনে যতগুলি অ্যাপ্লিকেশন যুক্ত করতে পারি।


উপরোক্ত কনফিগারেশন ব্যতীত বিকল্প সমাধানটি আপনার ওয়ার ফাইলটি root.war এ পুনরায় নামকরণ এবং ওয়েব অ্যাপস ডিরেক্টরিতে রাখবে under স্বয়ংক্রিয়ভাবে প্রসঙ্গের পথটি / এ সেট করা হবে।
রবি গুপ্ত

-6

নীচের কৌশলটি আমার পক্ষে কাজ করেছিল।

1) টমক্যাটের সার্ভার.এক্সএমএল ফাইল (কনফিড ফোল্ডারের অভ্যন্তরে) থেকে নীচের কনফিগারেশনটি মন্তব্য / মুছুন।

২) টমক্যাট ওয়েব অ্যাপস ফোল্ডারের অভ্যন্তরে থাকা বিদ্যমান রুট ফোল্ডার (যদি থাকে তবে) মুছুন। এবং আপনার যুদ্ধের নামকরণ করুন (উদাহরণস্বরূপ: test.war) ফাইলটি ROOT.war এ নামকরণ করুন।

মনে রাখবেন যে ROOT.war এ যুদ্ধ ফাইলটির নামকরণের সময় "রুট" ক্যাপগুলিতে থাকা উচিত।

সীমাবদ্ধতা: আপনি একটি টমক্যাটের উদাহরণের মধ্যে কেবল একটি অ্যাপ্লিকেশন স্থাপন করতে পারেন।


3
প্রশ্ন থেকে: "আমি জানি যে আমি আমার ওয়েবআপ (বা এটি ওয়ার ফাইল) এর নামটি মূলের সাথে নামকরণ করতে পারি তবে এটি করার একটি ভয়ঙ্কর উপায়, আইএমএইচও।"
জিন জর্দান

1
আমি টমক্যাটের ক্ষেত্রে প্রতি একক ওয়েব অ্যাপ্লিকেশন ব্যবহারের মধ্যে নিজেকে সীমাবদ্ধ রাখতে চাই না।
উলিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.