কিভাবে স্প্রিং এমভিসিতে স্থির সামগ্রী হ্যান্ডেল করবেন?


200

আমি স্প্রিং এমভিসি 3 ব্যবহার করে একটি ওয়েব অ্যাপ ডেভেলপ করছি এবং DispatcherServlet'/' এর মতো (ওয়েব.এক্সএমএল) সমস্ত অনুরোধ পেয়েছি:

  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

এখন এটি বিজ্ঞাপন হিসাবে কাজ করে, তবে আমি কীভাবে স্থির সামগ্রী হ্যান্ডেল করতে পারি? পূর্বে, আরআরএসএফুল ইউআরএলগুলি ব্যবহার করার আগে, আমি উদাহরণস্বরূপ সমস্ত * .html কে ধরে এটি পাঠিয়ে দিতাম DispatcherServlet, তবে এখন এটি একটি ভিন্ন বলের খেলা।

আমার কাছে একটি / স্ট্যাটিক / ফোল্ডার রয়েছে যার মধ্যে / স্টাইল /, / জেএস /, / ইমেজ / ইত্যাদি অন্তর্ভুক্ত রয়েছে এবং আমি / স্ট্যাটিক / * কে বাদ দিতে চাই DispatcherServlet

আমি যখন এটি করি তখন আমি স্থিতিশীল সংস্থানগুলিতে কাজ করতে পারি:

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/app/</url-pattern>
  </servlet-mapping>

তবে আমি চাই যে এটির URL ভাল লাগবে (স্প্রিং এমভিসি 3 ব্যবহার করে আমার বক্তব্য) ল্যান্ডিং পৃষ্ঠাটি www.domain.com/app/ নয়

আমি টমক্যাট বা অন্য কোনও সার্লেট পাত্রে মিলিত কোনও সমাধানও চাই না, এবং এটি (তুলনামূলকভাবে) কম ট্রাফিকের জন্য আমার কোনও ওয়েবসার্ভারের (অ্যাপাচি httpd এর মতো) সম্মুখের প্রয়োজন নেই।

এর কোন পরিষ্কার সমাধান আছে কি?



@hamo একজন সম্পর্কিত থ্রেড: stackoverflow.com/questions/34279705/...
smwikipedia

উত্তর:


266

যেহেতু আমি এই বিষয়ে অনেক সময় ব্যয় করেছি, তাই আমি ভেবেছিলাম যে আমি আমার সমাধানটি ভাগ করব। বসন্ত 3.0.০.৪ থেকে, একটি কনফিগারেশন প্যারামিটার বলা হয় <mvc:resources/>( রেফারেন্স ডকুমেন্টেশন ওয়েবসাইটে সে সম্পর্কে আরও কিছু ) যা আপনার সাইটের মূলের ডিসপ্যাচ সার্ভলেট ব্যবহার করার সময় স্থির সংস্থানগুলি সরবরাহ করতে ব্যবহৃত হতে পারে।

এটি ব্যবহার করার জন্য, একটি ডিরেক্টরি কাঠামো ব্যবহার করুন যা নিম্নলিখিতগুলির মতো দেখায়:

src/
 springmvc/
  web/
   MyController.java
WebContent/
  resources/
   img/
    image.jpg
  WEB-INF/
    jsp/
      index.jsp
    web.xml
    springmvc-servlet.xml

ফাইলগুলির বিষয়বস্তু দেখতে হবে:

src / springmvc / ওয়েব / HelloWorldController.java:

package springmvc.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController {

 @RequestMapping(value="/")
 public String index() {
  return "index";
 }
}

WebContent / web-INF / web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 <servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
</web-app>

WebContent / web-INF / springmvc-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- not strictly necessary for this example, but still useful, see http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-controller for more information -->
 <context:component-scan base-package="springmvc.web" />

    <!-- the mvc resources tag does the magic -->
 <mvc:resources mapping="/resources/**" location="/resources/" />

    <!-- also add the following beans to get rid of some exceptions -->
 <bean      class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
 <bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
 </bean>

    <!-- JSTL resolver -->
 <bean id="viewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
 </bean>

</beans>

WebContent / JSP / index.jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Page with image</h1>
<!-- use c:url to get the correct absolute path -->
<img src="<c:url value="/resources/img/image.jpg" />" />

আশাকরি এটা সাহায্য করবে :-)


12
এই উদাহরণটি বসন্তের ব্যবহারকারী গাইডে থাকা উচিত - আমি এই বিষয়টিতে এটি সবচেয়ে ভাল দেখেছি। ধন্যবাদ জরিস!
পল

এটি অবশ্যই আমার জন্য কৌশলটি করেছে - নিছক রোজকির পরামর্শটিই আমি যা করতে শুরু করেছি তবে কোনও কারণে আমার হোম-পৃষ্ঠাটি ব্যতীত অন্য কোনও পৃষ্ঠা, পৃষ্ঠার সাথে সংস্থান-URL- এর সম্পর্কিত সম্পর্কিত করে দিচ্ছে - এই পরামর্শ অনুসরণ করে তাদের আপেক্ষিক করে তোলে পরিবর্তে আমার অ্যাপ্লিকেশন এর প্রসঙ্গ-মূল - এবং পুরোপুরি কাজ করে! ধন্যবাদ!
বেন

ধন্যবাদ! আমি লাইনটি পরিবর্তন না করা পর্যন্ত আমি আমার চুল টানছিলাম: <এমভিসি: রিসোর্সস ম্যাপিং = "/ রিসোর্স / **" লোকেশন = "/, ক্লাসপাথ: / মেটা-আইএনএফ / ওয়েব-রিসোর্সস" "> থেকে <এমভিসি: রিসোর্স ম্যাপিং = "/ রিসোর্স / **" অবস্থান = "/ সংস্থান /" />
ডি

2
@ বেন যেমন উল্লেখ করেছেন, <সি: ইউআরএল মান = ... /> এই সমাধানের মূল অংশ। আপনি (বা যে কেউ) আমাকে কেন বলবেন মনে করবেন? ধন্যবাদ!
চিহ্নিত করুন

4
আপনি <এমভিসি: রিসোর্স ম্যাপিং = "/ **" অবস্থান = "/ রিসোর্স /" /> ব্যবহার করতে পারেন এবং এটি ম্যাপ করা হবে। (যেমন: মূলটিতে সংস্থান এবং জেএসপিএস উভয়ই থাকবে)। এটি সি: url সর্বত্র ব্যবহার করে আপনাকে বাঁচাতে পারে
ইফাজ

46

এই সমস্যা বসন্ত 3.0.4.RELEASE যেখানে আপনি ব্যবহার করতে পারেন সমাধান করা হয় <mvc:resources mapping="..." location="..."/> আপনার বসন্ত ডেস্প্যাচার কনফিগারেশন ফাইলের মধ্যে কনফিগারেশন উপাদান।

স্প্রিং ডকুমেন্টেশন চেক করুন


5
আসলে "ভুল" না হলেও এই উত্তরটি খুব সংক্ষিপ্ত কারণ স্প্রিংয়ের নিজস্ব ডকুমেন্টেশন (যা আপনি নিজের উত্তর হিসাবে উল্লেখ করেছেন) মনে হচ্ছে কিছু অনুপস্থিত রয়েছে। আরও সম্পূর্ণ উত্তরের জন্য জরিসের উত্তর পরীক্ষা করে দেখুন ... এটি দীর্ঘ নয় এমন সত্য নয় তবে তিনি <সি: ইউআরএল ...> ব্যবহারের উল্লেখ করেছেন যা আপনার উত্তর বা স্প্রিংয়ের ডক্সের কোনও উল্লেখই করে নি - এবং যা প্রমাণিত হয়েছে সমাধানের একটি সমালোচনামূলক অংশ হতে হবে।
বেন

38

স্প্রিংয়ে ..০.x আপনার সার্লেট-কনফিগারেশন.এক্সএমএল-তে নিম্নলিখিতটি যুক্ত করুন (ফাইলটি যা ওয়েব.এক্সএমএল কনটেক্সট কনফিগলোকেশন হিসাবে কনফিগার করা আছে You আপনাকে এমভিসি নেমস্পেসও যুক্ত করতে হবে তবে কেবল গুগল যদি আপনি না জানেন তবে !;)

সেটা আমার জন্য কাজ করে

<mvc:default-servlet-handler/>

শুভেচ্ছা সহ

আইয়ুব মালিক


আমি যখন এই লাইনটি যুক্ত করব তখন আমি পেয়েছি: org.springframework.beans.factory.xml.XMLBeanDefinitionStoreException: শ্রেণি পথের সংস্থান থেকে এক্সএমএল ডকুমেন্টের লাইন 31 [মেটা-আইএনএফ / বসন্ত / অ্যাপ্লিকেশন-প্রসঙ্গ.এক্সএমএল] অবৈধ; নেস্টেড ব্যতিক্রম হল org.xML.sax.SAXParseException; লাইন সংখ্যা: 31; কলাম নম্বর: 35; সিভিসি-কমপ্লেক্স-টাইপ .২.৪.২: ম্যাচিং ওয়াইল্ডকার্ড কঠোর, তবে 'এমভিসি: ডিফল্ট-সার্লেট-হ্যান্ডলার' উপাদানটির জন্য কোনও ঘোষণা খুঁজে পাওয়া যায় না।
অ্যালেক্স ওয়ার্ডেন

আপনি যখন অন্য কিছু ভিউ রিসলভারগুলিও পেয়েছেন তখন হ্যান্ডলারের ক্রমটি মোকাবেলা করতে ভুলবেন না।
ফিনিক্স

20

আমি যদি আপনার সমস্যাটি সঠিকভাবে বুঝতে পারি তবে আমার ধারণা আমি আপনার সমস্যার সমাধান খুঁজে পেয়েছি:

আমার একই সমস্যা ছিল যেখানে কাঁচা আউটপুট কোনও CSS শৈলী, জাভাস্ক্রিপ্ট বা jquery ফাইল খুঁজে পাওয়া যায় নি।

আমি সবেমাত্র "ডিফল্ট" সার্লেলে ম্যাপিংগুলি যুক্ত করেছি। নিম্নলিখিতটি ওয়েব.এক্সএমএল ফাইলটিতে যুক্ত করা হয়েছিল:

 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.css</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
 </servlet-mapping>

এটি ডিসপ্যাচারআরেউয়েস্ট অবজেক্ট থেকে জাভাস্ক্রিপ্ট এবং সিএসএস ফাইল অনুরোধগুলি ফিল্টার করে ফেলে।

আবার, আপনার পরে কী তা নিশ্চিত তা নিশ্চিত নয়, তবে এটি আমার পক্ষে কাজ করে। আমি মনে করি যে "ডিফল্ট" হ'ল জবস-এর মধ্যে থাকা ডিফল্ট সার্লেটের নাম। অন্যান্য সার্ভারের জন্য এটি কী তা খুব নিশ্চিত নয়।


1
আমি আসলে ডিফল্ট সার্লেট ব্যবহার করতে চাই না
hamo

@ হমো কেন এমন সমস্যা? (এটি একটি আসল প্রশ্ন, তর্কাত্মক প্রতিক্রিয়া নয়)। বসন্তের চালনার জন্য আপনার যে কোনও উপায়ে সার্ভার (jboss / tomcat / jetty) চালানো দরকার, তাই না?
মানব

3
এবং আপনি <url-pattern>একই ভিতরে সমস্ত ট্যাগ যুক্ত করতে পারেন<servlet-mapping>
মিলানকা

16

আরও একটি স্ট্যাক ওভারফ্লো পোস্ট রয়েছে যার একটি দুর্দান্ত সমাধান রয়েছে

এটি টমকেট নির্দিষ্ট বলে মনে হচ্ছে না, সহজ, দুর্দান্ত কাজ করে। আমি এই পোস্টে বসন্তের এমভিসি ৩.১ সহ বেশ কয়েকটি সমাধান চেষ্টা করেছি তবে তারপরে আমার গতিশীল বিষয়বস্তু পরিবেশন করতে সমস্যা হয়েছিল।

সংক্ষেপে, এটি বলে যে এইভাবে একটি সার্লেট ম্যাপিং যুক্ত করুন:

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>

11

আমি এটির কাছাকাছি পথের সন্ধান পেয়েছি টুকির urlrewritefilter ব্যবহার করে। আপনার যদি একটি উত্তর থাকে তবে নির্দ্বিধায় উত্তর দিন!

ওয়েব.এক্সএমএল এ:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/app/*</url-pattern>
  </servlet-mapping>

Urlrewrite.xML এ:

<urlrewrite default-match-type="wildcard">
<rule>
    <from>/</from>
    <to>/app/</to>
</rule>
<rule match-type="regex">
    <from>^([^\.]+)$</from>
    <to>/app/$1</to>
</rule>
<outbound-rule>
    <from>/app/**</from>
    <to>/$1</to>
</outbound-rule>    

এর অর্থ হ'ল যে কোনও 'ইউরি' দিয়ে। এটিতে (উদাহরণস্বরূপ স্টাইল। CSS এর মতো) পুনরায় লেখা হবে না।


5
আরও ভাল উত্তর হ'ল স্প্রিং 3 এর <mvc:resources/>, যেমনটি @ জরিস দেখিয়েছেন।
পল

11

আমি স্প্রিং এমভিসি ৩.০ এ কেবল এই সমস্যাটির সাথে জড়িত হয়েছি এবং আমি প্রাথমিকভাবে আরলরউইট্রাইট ফিল্টার বিকল্পটি দিয়েছিলাম। তবে আমি এই সমাধানটির সাথে খুশি ছিলাম না কারণ এটি "সঠিক মনে হয়নি" (আমি একমাত্র নই - উপরের লিঙ্কটি স্প্রিং ফোরামগুলিতে দেখুন যেখানে "হ্যাক" শব্দটি কয়েকবার প্রকাশিত হয়েছে)।

সুতরাং আমি উপরে "অজানা (গুগল)" এর অনুরূপ সমাধান নিয়ে এসেছি তবে সমস্ত স্ট্যাটিক সামগ্রী / স্ট্যাটিক / (পোষাক স্টোর অ্যাপ্লিকেশনটির স্প্রিং রু সংস্করণ থেকে নেওয়া) থেকে পরিবেশিত করার ধারণা ধার নিয়েছিলাম b "ডিফল্ট" সার্লেটটি আমার পক্ষে কাজ করে নি তবে স্প্রিং ওয়েবফ্লো রিসোর্স সার্ভলেট করেছে (স্প্রিং রু তৈরির অ্যাপ্লিকেশন থেকেও নেওয়া)।

Web.xml:

<servlet>
    <servlet-name>mainDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mainDispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

আমি জেএসপিতে একমাত্র পরিবর্তনটি হ'ল সিএসএস, জেএস এবং চিত্রগুলির জন্য ইউআরএলগুলিতে / স্ট্যাটিক / পাথ যুক্ত করা। যেমন "$ {pageContext.request.contextPath} /static/css/screen.css"।

ম্যাভেন ব্যবহারকারীদের জন্য "org.springframework.js.resource.ResourceServlet" এর নির্ভরতা হ'ল:

<dependency>
    <groupId>org.springframework.webflow</groupId>
    <artifactId>org.springframework.js</artifactId>
    <version>2.0.8.RELEASE</version>
</dependency>

খারাপ সমাধান নয় নিকডস- আপনাকে ধন্যবাদ! মূল স্প্রিং এমভিসিতে (ওয়েব প্রবাহের সাথে অন্য একটি নির্ভরতা যুক্ত করার চেয়ে) বা বাক্সের বাইরে অন্য কোনও সমাধান কেন নেই এমন কেন আমি এখনও এটি "পাই না"। উরলিউরাইট আমার পক্ষে ভাল কাজ করে তাই আপাতত আমি এটির সাথে থাকি! চিয়ার্স, হুক
হুক

2
স্প্রিং পোষা ক্লিনিক অ্যাপ্লিকেশনটির স্ট্যান্ডার্ড (নন-রু) সংস্করণটির দিকে ফিরে তাকালে আমি লক্ষ্য করেছি যে "ডিফল্ট" এর জন্য সার্লেট সংজ্ঞাটি অতিরিক্ত মন্তব্যে মন্তব্য করা হয়েছে: "এটি পাত্রে (গ্লাস ফিশ) অস্বীকৃতি দেয় যা এটি ঘোষণা করে না বাক্সের বাইরে অন্তর্নিহিত সংজ্ঞা "। ডিফল্টর জন্য সুস্পষ্ট প্যাকেজ ঘোষণাটি হল org.apache.catalina.servlet.DefaultServlet। সুতরাং এটি আপনার "বাক্সের বাইরে" রিসোর্স সার্লেট (?) হতে পারে। আমি জেটি কে দেব কাজের জন্য ব্যবহার করি এবং মনে হয় জেটি কোনও অন্তর্নিহিত ডিফল্ট সার্লেট (গ্লাসফিশের মতো) সরবরাহ করে না।
নিকডোস

8

এই সমস্যাটির সাথে আমার নিজের অভিজ্ঞতা নীচে রয়েছে। বেশিরভাগ বসন্ত সম্পর্কিত ওয়েব পৃষ্ঠাগুলি এবং বইগুলি মনে হয় যে সর্বাধিক উপযুক্ত সিনট্যাক্সটি নিম্নলিখিত is

    <mvc:resources mapping="/resources/**" location="/resources/" />

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

যাইহোক, আমার অভিজ্ঞতা, শুধুমাত্র পদ্ধতির (আমি অন্ধকার এবং হুল বিড়াল প্লাগইন ব্যবহার করছি) যদি আপনার কাছে এই ফোল্ডারে আপনার সংস্থানগুলি স্থান কাজ যে ভিতরে WEB_INF (অথবা মেটা-INF)। সুতরাং, আমি প্রস্তাবিত বাক্য গঠনটি নিম্নরূপ।

    <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" />

আপনার জেএসপিতে (বা অনুরূপ) নীচে হিসাবে উত্সটি উল্লেখ করুন।

<script type="text/javascript"
        src="resources/my-javascript.js">
</script>

উল্লেখ করার প্রয়োজন নেই, পুরো প্রশ্নটি কেবল তখনই উত্থাপিত হয়েছিল কারণ আমি চেয়েছিলাম যে আমার স্প্রিং প্রেরণকারী সার্লেট (ফ্রন্ট কন্ট্রোলার) সমস্ত কিছু, যা সব গতিশীল, সেটিকে আটকাতে পারে। সুতরাং আমার ওয়েব.এক্সএমএল-এ নিম্নলিখিতগুলি রয়েছে।

<servlet>
    <servlet-name>front-controller</servlet-name>
    <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    <!-- spring automatically discovers /WEB-INF/<servlet-name>-servlet.xml -->
</servlet>

<servlet-mapping>
    <servlet-name>front-controller</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

অবশেষে, যেহেতু আমি বর্তমান সেরা অনুশীলনগুলি ব্যবহার করছি, আমার সামনে নিয়ামক সার্ভারলেট এক্সএমএলে নিম্নলিখিতটি রয়েছে (উপরে দেখুন)।

<mvc:annotation-driven/>

সমস্ত আসন্ন অনুরোধগুলি হ্যান্ডেল করার জন্য আমার কাছে একটি ডিফল্ট পদ্ধতি আছে তা নিশ্চিত করার জন্য এবং আমার আসল নিয়ামক প্রয়োগে আমার নিম্নলিখিতগুলি রয়েছে।

@RequestMapping("/")

আশা করি এটা কাজে লাগবে.


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

আপনি টমক্যাট দৃষ্টিকোণ দিয়ে বলেছেন, দুর্দান্ত ...
ওমকার সিররা

আমি এই পৃষ্ঠায় প্রতিটি উত্তর চেষ্টা করেছিলাম। ধন্যবাদ আমি যখন এইটির কাছে পৌঁছলাম তখন আর চেষ্টা করার দরকার নেই।
টাইমট্রাক্স

6

আমি একই সমস্যা পেয়েছি এবং জোরিসের উত্তরটি খুব সহায়ক বলে খুঁজে পেয়েছি। তবে অতিরিক্ত আমি যুক্ত করতে হবে

<mvc:annotation-driven /> 

সার্লেট কনফিগারেশন ফাইলটিতে। তা ছাড়া রিসোর্স ম্যাপিং কাজ করবে না এবং সমস্ত হ্যান্ডলার কাজ বন্ধ করবে। আশা করি এটি কারও সাহায্য করবে।


2

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


2

আমি এটি এইভাবে সমাধান করেছি:

<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>

এটি টমক্যাট এবং অবশ্যই জবস-এ কাজ করে। তবে শেষ পর্যন্ত আমি সমাধানটি ব্যবহার করার সিদ্ধান্ত নিয়েছি স্প্রিংয়ের (রোজকি দ্বারা উল্লিখিত) যা আরও বেশি বহনযোগ্য।


2

আমি বসন্তের এমভিসি 3.0.০.x ভিত্তিক urlrewrite এবং টীকা উভয় উপায়ে ব্যবহার করেছি এবং জানতে পেরেছি যে টীকাগুলি ভিত্তিক পদ্ধতিটি সবচেয়ে উপযুক্ত

<annotation-driven />

<resources mapping="/resources/**" location="/resources/" />

ইউরলিউরাইটের ক্ষেত্রে, প্রচুর নিয়ম সংজ্ঞায়িত করতে হবে এবং কিছু সময়ের জন্য urlRewriteFilter এর জন্য ইতিমধ্যে নির্ভরতা সরবরাহ করা হয়েছে এমন ক্লাস ব্যতিক্রম পাওয়া যায় নি। আমি দেখতে পেয়েছি যে এটি ট্রানজিটিভ নির্ভরতার উপস্থিতির কারণে ঘটছে, তাই আবার এক ধাপ বাড়বে এবং সেই নির্ভরতাটিকে pom.xML ব্যবহার করে বাদ দিতে হবে

<exclusion></exclusion> tags.

সুতরাং টীকাগুলি ভিত্তিক পদ্ধতির ভাল চুক্তি হবে।


2

স্প্রিং 3 থেকে সমস্ত সংস্থান আলাদাভাবে ম্যাপ করা দরকার। সংস্থানগুলির অবস্থান নির্দিষ্ট করতে আপনাকে ট্যাগটি ব্যবহার করতে হবে।

উদাহরণ:

<mvc:resources mapping="/resources/**" location="/resources/" />

এইভাবে করে আপনি স্ট্যাটিক সামগ্রীর সন্ধানের জন্য ডিরেক্টরি সংস্থানগুলি অনুসন্ধান করার জন্য প্রেরণকারী সার্লেটকে নির্দেশ দিচ্ছেন।


1

এই সমস্যাটি সমাধানের জন্য আমার পদ্ধতিতে আপনার সমস্ত ক্রিয়াগুলি "ওয়েব" বা "পরিষেবা" এর মতো নির্দিষ্ট উপসর্গের সাথে স্থাপন করা এবং কনফিগার করা হয় যে সমস্ত ইউআরএলটির উপসর্গটির সাথে ডিসপ্যাচারসার্ভালেট দ্বারা আটকানো হবে।


1

আমি সমস্যাটি সমাধানের জন্য টুকির ইউর্ল্রাইট্রাইটফিল্টার (urlrewrite.xML) এ বসন্তের ডিফল্ট নিয়ম (/ **) এর আগে মাত্র তিনটি বিধি যুক্ত করেছি

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
    <urlrewrite default-match-type="wildcard">
     <rule>
      <from>/</from>
      <to>/app/welcome</to>
     </rule>
     <rule>
      <from>/scripts/**</from>
      <to>/scripts/$1</to>
     </rule>
     <rule>
      <from>/styles/**</from>
      <to>/styles/$1</to>
     </rule>
     <rule>
      <from>/images/**</from>
      <to>/images/$1</to>
     </rule>
     <rule>
      <from>/**</from>
      <to>/app/$1</to>
     </rule>
     <outbound-rule>
      <from>/app/**</from>
      <to>/$1</to>
     </outbound-rule> 
    </urlrewrite>

1

আমি জানি স্থিতিশীল সামগ্রীগুলি ব্যবহারের জন্য কয়েকটি কনফিগারেশন রয়েছে তবে আমার সমাধানটি হ'ল আমি আপনার টমক্যাটের মধ্যে কেবল একটি বাল্ক ওয়েব-অ্যাপ্লিকেশন ফোল্ডার তৈরি করি। এই "বাল্ক ওয়েব অ্যাপ্লিকেশন" অ্যাপ্লিকেশন পরিবেশন না করে কেবল সমস্ত স্থির-সামগ্রী সরবরাহ করে serving এটি আপনার আসল বসন্তের ওয়েবপ্যাটে স্থির বিষয়বস্তু পরিবেশন করার জন্য ব্যথামুক্ত এবং সহজ সমাধান।

উদাহরণস্বরূপ, আমি আমার টমক্যাটে দুটি ওয়েবঅ্যাপ ফোল্ডার ব্যবহার করছি।

  1. springapp : এটি ইমগস, জেএস বা সিএসএসের মতো স্থির-সামগ্রী ব্যতীত কেবল বসন্তের ওয়েব অ্যাপ্লিকেশনটি চলছে। (বসন্ত অ্যাপ্লিকেশন জন্য উত্সর্গীকৃত।)
  2. সংস্থানসমূহ : এটি জেএসপি, সার্লেট বা জাভা ওয়েব অ্যাপ্লিকেশন কোনও প্রকার ছাড়াই কেবল স্থির সামগ্রী সরবরাহ করে serving (স্থির বিষয়বস্তুর জন্য উত্সর্গীকৃত)

আমি যদি জাভাস্ক্রিপ্ট ব্যবহার করতে চাই তবে আমি আমার জাভাস্ক্রিপ্ট ফাইলটির জন্য কেবল ইউআরআই যুক্ত করব।

প্রাক্তন> / রিসোর্সস / পাথ / টো / এসএস / মাইজাভাস্ক্রিপ্ট.জেএস

স্থির চিত্রগুলির জন্য, আমি একই পদ্ধতি ব্যবহার করছি।

এক্স> / রিসোর্সস /পাথ / টো / আইএমজি / মাইমজি.জেপিজি

সর্বশেষে, আমি " সুরক্ষা-সীমাবদ্ধতা " রেখেছি প্রকৃত ডিরেক্টরিতে অ্যাক্সেস আটকাতে আমার টমক্যাটে " রেখেছি। আমি "কেউ নেই" ব্যবহারকারীর রোলকে এই সীমাবদ্ধতায় রেখেছি যাতে লোকেরা স্থির-সামগ্রীর পথে অ্যাক্সেস করার চেষ্টা করার সময় পৃষ্ঠাটি "403 নিষিদ্ধ ত্রুটি" উত্পন্ন করে।

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


1

এটি আমার ক্ষেত্রে আসল কাজটি করেছে

ওয়েব.এক্সএমএল:

...
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
    <url-pattern>/css/*</url-pattern>
    <url-pattern>/javascripts/*</url-pattern>
</servlet-mapping>


<servlet-mapping>
    <servlet-name>spring-mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

...


1

জাভা ভিত্তিক বসন্ত কনফিগারেশনের জন্য আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন

ব্যবহার ResourceHandlerRegistry যা সঞ্চয় স্ট্যাটিক সম্পদ ভজনা জন্য রিসোর্স হ্যান্ডেলার এর নিবন্ধীকরণের।

আরও তথ্য @ ওয়েবমভিসিকনফিগুরারএডাপ্টার, যা স্প্রিং এমভিসি-র জন্য জাভা-ভিত্তিক কনফিগারেশনটি @EnableWebMvc এর মাধ্যমে সক্ষম করার জন্য কলব্যাক পদ্ধতিগুলি সংজ্ঞায়িত করে।

@EnableWebMvc
@Configurable
@ComponentScan("package.to.scan")
public class WebConfigurer extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static_resource_path/*.jpg").addResourceLocations("server_destination_path");

    }

0

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

নোট করুন যে আপনি এখানে আপনার মেভেন বিল্ড প্রসেসে ওয়েবফ্লো কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও তথ্য পাবেন: http://static.springsource.org/spring-webflow/docs/2.0.x/reference/html/ch01s05.html

আপনি যদি স্ট্যান্ডার্ড মাভেন কেন্দ্রীয় ভান্ডারটি ব্যবহার করেন তবে নিদর্শনটি (উপরে বর্ণিত স্প্রিংসোর্স বান্ডেলের বিপরীতে):

<dependency>
    <groupId>org.springframework.webflow</groupId>
    <artifactId>spring-js</artifactId>
    <version>2.0.9.RELEASE</version>
</dependency> 

0

এটি অন্তত তিনটি উপায়ে অর্জন করা যায়।

সমাধান :

  • এইচটিএমএল রিসোর্স ফাইল হিসাবে প্রকাশ করুন
  • JspServlet কে *। html অনুরোধগুলি পরিচালনা করতে নির্দেশ দিন
  • আপনার নিজস্ব সার্লেট লিখুন (বা অন্য বিদ্যমান সার্লেট পত্রকে * .html তে অনুরোধ করুন)।

কীভাবে এটি অর্জন করা যায় তার সম্পূর্ণ উদাহরণের জন্য দয়া করে অন্য পোস্টে আমার উত্তরটি দেখুন: স্প্রিং এমভিসিতে এইচটিএমএল ফাইলের জন্য কীভাবে অনুরোধগুলি ম্যাপ করবেন?


0

সমস্যাটি ইউআরএল প্যাটার্নে রয়েছে

আপনার সার্লেলে ম্যাপিংয়ে "/" থেকে "/ *" তে আপনার URL প্যাটার্নটি পরিবর্তন করুন


0
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:default-servlet-handler/>
</beans>

এবং যদি আপনি নীচে কোড টীকাদান ভিত্তিক কনফিগারেশন ব্যবহার করতে চান

@Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

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