স্প্রিং বুট অ্যাপ্লিকেশনে প্রসঙ্গের পথ যুক্ত করুন


174

আমি প্রোগ্রামিং হিসাবে একটি স্প্রিং বুট অ্যাপ্লিকেশন কনটেক্সট কনটেক্সট রুট সেট করার চেষ্টা করছি। প্রসঙ্গের মূলের কারণ হ'ল আমরা চাই অ্যাপটিটি অ্যাক্সেস করা উচিত localhost:port/{app_name}এবং এতে সমস্ত কন্ট্রোলার পাথ যুক্ত হয়।

এখানে ওয়েব-অ্যাপ্লিকেশনটির জন্য অ্যাপ্লিকেশন কনফিগারেশন ফাইল রয়েছে।

@Configuration
public class ApplicationConfiguration {

  Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);

  @Value("${mainstay.web.port:12378}")
  private String port;

  @Value("${mainstay.web.context:/mainstay}")
  private String context;

  private Set<ErrorPage> pageHandlers;

  @PostConstruct
  private void init(){
      pageHandlers = new HashSet<ErrorPage>();
      pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,"/notfound.html"));
      pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,"/forbidden.html"));
  }

  @Bean
  public EmbeddedServletContainerFactory servletContainer(){
      TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
      logger.info("Setting custom configuration for Mainstay:");
      logger.info("Setting port to {}",port);
      logger.info("Setting context to {}",context);
      factory.setPort(Integer.valueOf(port));
      factory.setContextPath(context);
      factory.setErrorPages(pageHandlers);
      return factory;
  }

  public String getPort() {
      return port;
  }

  public void setPort(String port) {
      this.port = port;
  }
}

এখানে মূল পৃষ্ঠার জন্য সূচক নিয়ন্ত্রক।

@Controller
public class IndexController {

  Logger logger = LoggerFactory.getLogger(IndexController.class);

  @RequestMapping("/")
  public String index(Model model){
      logger.info("Setting index page title to Mainstay - Web");
      model.addAttribute("title","Mainstay - Web");
      return "index";
  }

}

অ্যাপ্লিকেশনটির নতুন মূলটি হওয়া উচিত localhost:12378/mainstay, তবে এটি এখনও অবস্থিত localhost:12378

আমি কী অনুভব করছি যা অনুরোধ ম্যাপিংয়ের আগে স্প্রিং বুটকে প্রসঙ্গের মূলটি সংযোজন করতে বাধ্য করছে?

উত্তর:


382

আপনি কেন নিজের সমাধানটি রোল করার চেষ্টা করছেন? স্প্রিং-বুট ইতিমধ্যে এটি সমর্থন করে।

আপনার যদি ইতিমধ্যে একটি না application.propertiesথাকে তবে এতে একটি ফাইল যুক্ত করুন src\main\resources। এই বৈশিষ্ট্য ফাইলটিতে 2 টি বৈশিষ্ট্য যুক্ত করুন:

server.contextPath=/mainstay
server.port=12378

আপডেট (স্প্রিং বুট 2.0)

স্প্রিং বুট ২.০ হিসাবে (স্প্রিং এমভিসি এবং স্প্রিং ওয়েবফ্লাক্স উভয়ের সমর্থনের কারণে) contextPathনিম্নলিখিতটিতে পরিবর্তন করা হয়েছে:

server.servlet.contextPath=/mainstay

তারপরে আপনি কাস্টম সার্লেট পাত্রে আপনার কনফিগারেশনটি সরাতে পারেন। আপনার যদি ধারকটিতে কিছু পোস্ট প্রসেসিং করতে হয় তবে EmbeddedServletContainerCustomizerআপনি নিজের কনফিগারেশনে একটি প্রয়োগ যুক্ত করতে পারেন (উদাহরণস্বরূপ ত্রুটি পৃষ্ঠাগুলি যুক্ত করার জন্য)।

মূলত পরিসেবার অভ্যন্তরের বৈশিষ্ট্যগুলি application.propertiesএকটি ডিফল্ট হিসাবে পরিবেশন করা হয় আপনি সর্বদা আপনার সরবরাহিত application.propertiesশিল্পের পাশের আর একটি ব্যবহার করে বা জেভিএম প্যারামিটার ( -Dserver.port=6666) যুক্ত করে ওভাররাইড করতে পারেন ।

আরও দেখুন রেফারেন্স গাইড বিশেষত বৈশিষ্ট্য অধ্যায়।

ক্লাস ServerPropertiesপ্রয়োগ করে EmbeddedServletContainerCustomizer। ডিফল্ট contextPathহল ""। আপনার কোড নমুনায় আপনি contextPathসরাসরি উপর সেট করা হয় TomcatEmbeddedServletContainerFactory। পরবর্তী ServerPropertiesদৃষ্টান্তটি এই দৃষ্টান্তটি প্রক্রিয়া করবে এবং আপনার পাথ থেকে পুনরায় সেট করবে ""। ( এই লাইনটি একটি nullচেক করে তবে ডিফল্ট হিসাবে ""এটি সর্বদা ব্যর্থ হয় এবং প্রসঙ্গটি সেট করে ""এবং এভাবে আপনার ওভাররাইড হয়)।


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

2
আমি একজনের কাছ EmbeddedServletContainerCustomizerথেকেও কাজ করার আশা করব। তবে আমি যা যা সরবরাহ করা হয় তা নিজেই বল্টু করার চেষ্টা করার পরিবর্তে যাব। কেন আপনার সমাধান কাজ ডিফল্ট আচরণ প্রোগ্রাম (? ঘটনাক্রমে) এ কি আছে না ServerProperties, ডিফল্ট কনফিগার contextPathহয় ""(এবং এটির জন্য চেক nullএবং ""পরেরটির ওভাররাইড আপনার স্পষ্টভাবে সেট। contextPath
এম Deinum

বৈশিষ্ট্যগুলি পরিবর্তিত হয়েছে, নীচে আমার উত্তর দেখুন।
মাইকেল

5
আমার ধারণা স্প্রিং বুট ২.০ এ সম্পত্তিটি "সার্ভার.সারলেট.কন্টেক্সট-পাথ"
IamVickyAV

34

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

পরিবর্তে, যদি একটি কার্যকারিতা বেসিক কনফিগারেশনের জন্য উপলব্ধ থাকে, তবে এটি একটি "বৈশিষ্ট্য" ফাইলটিতে সেট করা যেতে পারে application, যা src\main\resourcesআপনার অ্যাপ্লিকেশন কাঠামোর অধীনে থাকা উচিত । "বৈশিষ্ট্য" ফাইলটি দুটি ফর্ম্যাটে উপলব্ধ

  1. .yml

  2. .properties

আপনি কনফিগারেশনগুলিকে যেভাবে নির্দিষ্ট করে বা সেট করেন সেটি এক ফর্ম্যাট থেকে অপরটির চেয়ে আলাদা।

আপনার নির্দিষ্ট ক্ষেত্রে, যদি আপনি এক্সটেনশান ব্যবহার করার সিদ্ধান্ত নেন .properties, তাহলে আপনি একটি ফাইল নামক হবে application.propertiesঅধীনে src\main\resourcesনিম্নলিখিত কনফিগারেশন সেটিংস

server.port = 8080
server.contextPath = /context-path

ওটিওএইচ, আপনি যদি .ymlএক্সটেনশনটি ব্যবহার করার সিদ্ধান্ত নেন (ie application.yml), আপনাকে নীচের বিন্যাসটি (যেমন YAML) ব্যবহার করে কনফিগারেশন সেট করতে হবে :

server:
    port: 8080
    contextPath: /context-path

স্প্রিং বুটের আরও সাধারণ বৈশিষ্ট্যের জন্য নীচের লিঙ্কটি দেখুন:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html


22

যদি আপনি স্প্রিং বুট 2.0.0 ব্যবহার করেন:

server.servlet.context-path

2
এটি বাহ্যিক টমক্যাটে মোতায়েন করা যুদ্ধের জন্য কাজ করে না
22:18

1
আমার জন্য এটি কার্যকর হয়নি (স্প্রিং বুট ২.১.২), কিন্তু এটি কাজ করেছে:server.servlet.contextPath=/api
লস্পিজোস

2
@ পিস, আপনি কি জানেন যে এটি কীভাবে বাহ্যিক টমক্যাটে যুদ্ধের জন্য ঠিক করা যায়?
mohax

11

দয়া করে মনে রাখবেন যে "সার্ভার.কমটেক্সট-পাথ" বা "সার্ভার.সারলেট.কন্টেক্সট-পাথ" [স্প্রিংবুট ২.০.x থেকে শুরু] বৈশিষ্ট্যগুলি কেবলমাত্র তখনই কাজ করবে যদি আপনি এমবেডেড কনটেইনার যেমন, এমবেডড টমক্যাট ব্যবহার করেন। আপনি উদাহরণস্বরূপ যদি কোনও বাহ্যিক টমক্যাটের কাছে যুদ্ধ হিসাবে আপনার অ্যাপ্লিকেশনটি নিযুক্ত করে থাকেন তবে এই বৈশিষ্ট্যগুলির কোনও প্রভাব থাকবে না।

এই উত্তরটি এখানে দেখুন: https://stackoverflow.com/a/43856300/4449859


বহিরাগত টমক্যাটে warফাইল ব্যবহার করে springboot v2.xএবং ব্যবহার করার সময় কী কী এটি কনফিগার করতে হয় তা কি কেউ আবিষ্কার করেছেন tomcat v8.5?
সরল-সমাধান

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

আমি চেষ্টা করে দেখছিলাম এটি ঠিক উপরের লিঙ্কে যা বলা হয়েছিল ঠিক তার মতোই। আপনার প্রসঙ্গের পথে বিল্ড -> চূড়ান্ত নাম বৈশিষ্ট্যটির মানটি পরিবর্তন করুন। ফলস্বরূপ যুদ্ধ ফাইলটি প্রসঙ্গের পথটিকে ফাইলের নাম হিসাবে ব্যবহার করবে, যা পরে টমক্যাট দ্বারা প্রসঙ্গের পথ হিসাবে পরিবেশন করা হবে।
DriLLFreAK100

বাহ্যিক টমক্যাটে যুদ্ধ হিসাবে মোতায়েনের জন্য আমি যে উপায়টি ভাবতে পারি তা হ'ল যুদ্ধের নামটি আপনার পরবর্তী প্রসঙ্গে মেলে তা নিশ্চিত করা। সুতরাং উদাহরণস্বরূপ, আপনি যদি প্রসঙ্গটি '/ xyzwebapp' হতে চান তবে আপনার যুদ্ধের নাম অবশ্যই xyzwebapp.war রাখা উচিত। এটি অর্জন করতে, আপনি আপনার পম.এক্সএমএল <<বিল্ড> উপাদানটিতে নিম্নলিখিতগুলি যুক্ত করতে পারেন: <ফাইনালনাম> জাইজওব্যাপ্প </ ফাইনালনাম>।
আবদেল

9

সঠিক বৈশিষ্ট্য হয়

server.servlet.path

ডিসপ্যাচারসারভ্লেটের পাথটি কনফিগার করতে

এবং

server.servlet.context-path

এর নীচে অ্যাপ্লিকেশন প্রসঙ্গে পাথটি কনফিগার করতে।


আপনাকে অনেক ধন্যবাদ
হেমার চন্দ্র

2

আমরা বৈশিষ্ট্য ফাইলে একটি সাধারণ এন্ট্রি ব্যবহার করে প্রসঙ্গের রুট পাথ পরিবর্তন করতে পারি।

application.properties

### Spring boot 1.x #########
server.contextPath=/ClientApp

### Spring boot 2.x #########
server.servlet.context-path=/ClientApp

1

আমরা এটি application.propertiesহিসাবে সেট করতে পারেনAPI_CONTEXT_ROOT=/therootpath

এবং আমরা নীচে উল্লিখিত হিসাবে এটি জাভা ক্লাসে অ্যাক্সেস

@Value("${API_CONTEXT_ROOT}")
private String contextRoot;

1

server.contextPath = / সহায়

আমার জন্য কাজ করে যদি আমার জেবিওএসে একটি যুদ্ধ ফাইল থাকে। একাধিক যুদ্ধ ফাইলের মধ্যে যেখানে প্রতিটিতে jboss-web.xML রয়েছে এটি কাজ করে না। আমি বিষয়বস্তু সহ ওয়েব-আইএনএফ ডিরেক্টরিতে jboss-web.xML রাখতে হয়েছিল

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
    <context-root>mainstay</context-root>
</jboss-web>

1

স্প্রিং বুটে 1.5:

নিম্নলিখিত সম্পত্তি যুক্ত করুন application.properties:

server.context-path=/demo

দ্রষ্টব্য: /demoআপনার প্রসঙ্গের পথের URL।


1

আপনি [src \ প্রধান \ সংস্থানসমূহ]। প্রপার্টি ফাইল এবং। জেএল ফাইলটিতে কনফিগারেশন যুক্ত করতে সহজেই পোর্ট এবং কনটেক্সটপথ যুক্ত করে এটি করতে পারেন

application.porperties ফাইল কনফিগারেশন

server.port = 8084
server.contextPath = /context-path

প্রয়োগ.আইএমএল ফাইল কনফিগারেশন

server:
port: 8084
contextPath: /context-path

আমরা স্প্রিং বুটে প্রোগ্রামগতভাবে এটি পরিবর্তন করতে পারি।

@Component
public class ServerPortCustomizer implements     WebServerFactoryCustomizer<EmbeddedServletContainerCustomizer > {

@Override
public void customize(EmbeddedServletContainerCustomizer factory) {
    factory.setContextPath("/context-path");
    factory.setPort(8084);
}

}

আমরা একটি অন্য উপায় যোগ করতে পারেন

@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {SpringApplication application =     new pringApplication(MyApplication.class);
    Map<String, Object> map = new HashMap<>();
    map.put("server.servlet.context-path", "/context-path");
    map.put("server.port", "808");
    application.setDefaultProperties(map);
    application.run(args);
    }       
}

জাভা কমান্ডটি স্প্রিং বুট ব্যবহার করে 1.X

java -jar my-app.jar --server.contextPath=/spring-boot-app     --server.port=8585 

জাভা কমান্ডটি স্প্রিং বুট 2 এক্স ব্যবহার করে

java -jar my-app.jar --server.servlet.context-path=/spring-boot-app --server.port=8585 

আমরা প্রোগ্রামারগতভাবে সার্ভার পোর্টটিও যুক্ত করতে পারি
গোলাম মুর্তজা

0

আপনি যদি অ্যাপ্লিকেশন.আইএমএল এবং বসন্ত সংস্করণ ২.০ এর উপরে ব্যবহার করছেন তবে নীচের পদ্ধতিতে কনফিগার করুন।

server:
  port: 8081
  servlet:
     context-path: /demo-api

এখন সমস্ত এপিআই কল পোস্টের মতো হবে : // লোকালহোস্ট: 8081 / ডেমো-এপি /


0

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

@Bean
    public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>
      webServerFactoryCustomizer() {
        return factory -> factory.setContextPath("/demo");
}

0

যদি আপনি স্প্রিং বুট ২.x ব্যবহার করেন এবং কমান্ড লাইনে প্রসঙ্গের পথটি সম্পত্তিটি পাস করতে চান তবে আপনার দ্বিগুণ // লাগানো উচিত:

--server.servlet.context-path=//your-path

এটি আমার উইন্ডোতে দৌড়ানোর জন্য কাজ করেছিল।


0
<!-- Server port-->

server.port=8080

<!--Context Path of the Application-->

server.servlet.context-path=/ems

সার্ভার পোর্টটি 8080 হবে you আপনি যদি অন্য কোনও বন্দর চান তবে আপনি 8080 প্রতিস্থাপন করতে পারেন application আপনার প্রয়োজন অনুসারে আপনি অন্য পথ নির্ধারণ করতে পারেন
বোর্ডোলোই পার্থ

1
এটি দরকারী তথ্য, কেন আপনি কোনও মন্তব্যের পরিবর্তে এটি আপনার উত্তরে যুক্ত করবেন না?
কে-ডেন

0

এটি অবশ্যই হওয়া উচিত: সার্ভার.সারলেট.কন্টেক্সট-পাথ = / ডেমো নোট করুন যে এতে কেবল '/' এর আগে থাকা মানটি নেই যা এই মানটি আপনার অ্যাপ্লিকেশনটিতে যায় goes


-1

প্রসঙ্গের পথটি সরাসরি কোডে সংহত করা যায় তবে এটি যুক্তিযুক্ত নয় যেহেতু এটি পুনরায় ব্যবহার করা যায় না তাই অ্যাপ্লিকেশনটিতে লিখুন rop প্রপার্টি ফাইল সার্ভার.কন্টেক্সটপথ = / আপনি যে ফোল্ডারের কোড প্রসঙ্গটি রেখেছিলেন সেখানে ফোল্ডারের নামপথ = আপনার ফোল্ডারের নাম name কোড / নোট: স্ল্যাশটি সাবধানে দেখুন।

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