单击按钮路由到其他应用程序

时间:2019-02-11 12:19:37

标签: java nginx

为了学习nginx,我创建了2个Java Web应用程序。 目前,通过修改var player; var box_tnt; function create (){ this.physics.add.collider(player, box_tnt, hitTnt, null, this); } //the function hitTnt stop the game because the player died function hitTnt (player, boxes){ this.physics.pause(); player.setTint(0xff0000); player.anims.play('default'); gameOver = true; textGameOver.setText('GAME OVER'); } 文件,可以在点击localhost时将其路由到我的一个Web应用程序。

在我的应用程序中,有一个nginx.conf链接。点击后,我试图路由到我的第二个Web应用程序。我该如何实现?

我的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/上运行

我的Hello_World http://127.0.0.1:8080/FirstServletProject/FirstServlet/文件-:

index.html

我的Hello_World servlet-:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<a href="saytime">Click Here</a>
</body>
</html>

即使点击链接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>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } ,它也不会转发到该应用。

根据Victor的答案更改后进行更新-

获取http://localhost/saytime

HTTP Status 404 – Not Found

1 个答案:

答案 0 :(得分:1)

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

这里有一些问题:

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

  2. 如果将控制器移至 FirstServletProject ,则可以进行重定向,但仍必须将指定的<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")注释。