开发者社区> 问答> 正文

jsp的servlet在本地能运行, 在云服务器上显示404 Not Found,怎么办?

请问servlet怎么发布到服务器(ubuntu+tomcat环境)才能正常运行呢?
我写了一个测试项目test1,eclipse里这个项目结构如下:

在云服务器里项目路径和结构如下:






index.jsp内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>标题</title>
</head>
<body>
<%response.sendRedirect("Servlettest"); %>
</body>
</html>
Servlettest.java内容如下:
package bao;

import java.io.IOException;
import java.io.PrintWriter;

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 Servlettest
*/
//@WebServlet("/Servlettest")
public class Servlettest extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Servlettest() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out=response.getWriter();
        out.print("<html>");
        out.print("<head>");
        out.print("<title>标题</title>");
        out.print("</head>");
        out.print("<body>");
        out.print("<center>servlet能用了</center>");
        out.print("</body>");
        out.print("</html>");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
web.xml内容如下: <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>test1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Servlettest</servlet-name>
    <servlet-class>bao.Servlettest</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Servlettest</servlet-name>
    <url-pattern>/Servlettest</url-pattern>
  </servlet-mapping>
</web-app>
我是先用浏览器打开index.jsp文件,然后跳转到Servlettest,用 doGet方法输出<html>页面。
这个测试项目在本地的win8.1+tomcat7环境上可以正常运行,

然而在服务器ubuntu+tomcat环境上servlettest不能运行,显示404 not found.

我谷歌搜索了很久,没有找到解决方法,谁知道这是怎么回事?


展开
收起
李黑白 2016-02-10 11:20:53 15312 0
4 条回答
写回答
取消 提交回答
  • 你好问题解决了么,我的问题和您一样。。。

    2020-08-09 21:23:21
    赞同 展开评论 打赏
  • R&amp;S网络资深工程师 ,阿里云论坛官方版主,阿里云云计算ACP,春考教学网站长,IT技术晋级之路专辑作者
    学到新知识了 感谢
    2016-02-11 12:24:06
    赞同 展开评论 打赏
  • 回 1楼dongshan8的帖子
    问题已经解决。我在本地ubuntu+tomcat7环境下写好web程序,然后上传到云服务器(也是ubuntu+tomcat7环境),程序终于能正常运行了。
    之前不能运行时因为web程序是在windows+tomcat7系统下编写的,然而云服务器是ubuntu+tomcat7环境。
    且访问时加上:8080端口号时就正常了。

    -------------------------

    回 1楼dongshan8的帖子
    问题已经解决。我在本地ubuntu+tomcat环境重新写了web程序,然后上传到云服务器,再用你提供的加上端口号的地址就能打开了。

    -------------------------

    回 2楼李黑白的帖子
    有没有办法可以在访问时省略:8080端口号,直接用http://yzq2017.top/test1/Servlettest地址访问呢?

    -------------------------

    Rejsp的servlet在本地能运行, 在云服务器上显示404 Not Found,怎么办?

    我把tomcat下conf文件夹下的server.xml,找到端口号8080,修改为80。
    <Connector executor="tomcatThreadPool"
                   port="80" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    然后在浏览器地址栏输入http://yzq2017.top/test1/index.jsp 就出现502 Bad Gateway


    nginx/1.6.0错误了。

    -------------------------

    回 5楼dongshan8的帖子
    我把tomcat下conf文件夹下的server.xml,端口号8080,修改为80了。

    然后重启了tomcat和nginx.输入http://yzq2017.top/test1/index.jsp来访问,然后出现502错误。

    -------------------------

    Rejsp的servlet在本地能运行, 在云服务器上显示404 Not Found,怎么办?

    -------------------------

    回 8楼dongshan8的帖子
    http://www.aintnot.com/2015/12/10/nginx-non80-port-forward
    我按照上面链接里的方法,修改nginx,增加了test.conf文件,内容如下:
    server {
        server_name www.yzq2017.top/test1
        listen 80;
        index index.jsp;
        location / {
            proxy_pass http://127.0.0.1:8080;
        }
    }
    然而还是没有用,你能否帮我看看?
    另一种方法修改tomcat的server.xml,我试过了,没能成功。
    2016-02-10 17:10:56
    赞同 展开评论 打赏
  • 旺旺:nectar2。
    楼主您好,

    您在本地测试时,访问的是8080的端口,

    如果现在访问 http://yzq2017.top:8080/test1 ,会自动跳转到 http://yzq2017.top:8080/test1/Servlettest

    -------------------------

    回 4楼(李黑白) 的帖子
    您好,

    您可以修改tomcat的监听端口(从默认的8080到80),或使用nginx的代理功能将80端口的请求转发给后端的tomcat处理。

    -------------------------

    回 7楼(李黑白) 的帖子
    您好,

    如果您使用nginx作为80端口,且转发给后端的8080端口,那就不必修改tomcat中的server.xml端口设置了(保持默认的8080)。

    -------------------------

    回 10楼(李黑白) 的帖子
    您好,

    从这里的 nginx 配置来看,server_name 里应该是填写:
    server_name www.yzq2017.top您已经离成功不远了,请继续加油喔。


    2016-02-10 11:31:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS计算与存储分离架构实践 立即下载