为了账号安全,请及时绑定邮箱和手机立即绑定

单击按钮时路由到不同的应用程序

单击按钮时路由到不同的应用程序

宝慕林4294392 2022-06-15 16:24:32
为了学习 nginx,我创建了 2 个 java web 应用程序。目前,我可以localhost通过修改nginx.conf文件来路由到我的一个网络应用程序。在我的应用程序中,有一个click here链接。我试图通过点击路由到我的第二个网络应用程序。我怎样才能做到这一点?我的nginx.conf服务器指令片段-: server {        listen       80;        server_name  localhost;        #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {            root   html;            index  index.html index.htm;        proxy_pass http://127.0.0.1:8081/Hello_World/;        }    location /saytime {            root   html;            index  index.html index.htm;        proxy_pass http://127.0.0.1:8080/FirstServletProject/FirstServlet/;        }运行的第一台服务器http://127.0.0.1:8081/Hello_World/第二台服务器正在运行http://127.0.0.1:8080/FirstServletProject/FirstServlet/我的 Hello_Worldindex.html文件-:<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Hello World</title></head><body><a href="saytime">Click Here</a></body></html>我的 Hello_World servlet-:package com.example.helloworld;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class HelloWorldServlet */@WebServlet("/saytime")public class HelloWorldServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * @see HttpServlet#HttpServlet()     */    public HelloWorldServlet() {        super();        // TODO Auto-generated constructor stub    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)     */    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        PrintWriter out = response.getWriter();        out.print("<html><body><h1 align='center'>" +        new Date().toString() + "</h1></body></html>");    }
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

因此,当用户单击 HTML链接时,您的HelloWorld服务器必须重定向到FirstServletProject服务器。<a>

这里有一些问题:

  1. 您的/saytime控制器与索引位于同一服务器中。所以它永远无法在另一个应用程序中处理请求。

  2. 如果您将控制器移动到FirstServletProject重定向是可能的,但您仍然必须将 URL 指定的<a>链接从索引服务器的相对路径更改<a href="saytime">为绝对路径<a href="http://localhost:80/saytime"

  3. 如果您使用 Nginx 服务进行重定向,则不需要@WebServlet("/saytime")注释。您已经告诉 Nginx,当他在/saytime上收到请求时,它应该将其重定向到http://127.0.0.1:8080/FirstServletProject/FirstServlet/

  4. 也看看 Nginx 服务。有时配置中的错误不允许服务启动。用于systemctl status nginx查看它是否正在运行。如果它不journalctl -e用于调试错误。

编辑

在与 OP 讨论后,所提供的解决方案均无效。

尝试在 Nginx conf 中创建另一个服务器块(不同于默认的)和每个服务器的上游块:

server {

      listen 8082;

      location / {

         proxy_pass http://helloworld;

      }

      location /saytime/ {

         proxy_pass http://firstservlet;

      }

   }


   upstream helloworld {

      server http://127.0.0.1:8081/;

   }


   upstream firstserver {

      server http://127.0.0.1:8080/;

   }


我认为您应该取消注释@WebServlet("/saytime")注释。


查看完整回答
反对 回复 2022-06-15
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号