如何使用可嵌入的tomcat在maven项目结构中访问tomcat servlet

如何使用可嵌入的tomcat在maven项目结构中访问tomcat servlet,maven,tomcat,servlets,Maven,Tomcat,Servlets,我正在maven项目结构中使用可嵌入的Tomcat (如此处:)但我不会部署到Heroku。 我可以在localhost:8080/ 但我无法确定如何访问我的servlet(即使在添加web.xml之前,也要继续使用404) 在localhost:8080/Archery尝试 在localhost:8080/servlets/servlet.ArcheryShootServlet上尝试 已在localhost:8080/servlet/servlet.ArcheryShootServlet 已在

我正在maven项目结构中使用可嵌入的Tomcat
(如此处:)
但我不会部署到Heroku。
我可以在
localhost:8080/

但我无法确定如何访问我的servlet(即使在添加web.xml之前,也要继续使用404)
localhost:8080/Archery尝试
在
localhost:8080/servlets/servlet.ArcheryShootServlet上尝试
已在
localhost:8080/servlet/servlet.ArcheryShootServlet

已在
localhost:8080/servlet.ArcheryShootServlet

localhost:8080/目标/射箭

已在
localhost:8080/target/ArcheryShootServlet

已在
localhost:8080/target/servlet.ArcheryShootServlet

我已经试着把它们放到已经是项目一部分的resources文件夹中

我已尝试添加webResources文件夹,并将其添加到pom文件配置中:


4.0.0
com.heroku.sample
嵌入式TomcatSample
1.0-快照
embeddedTomcatSample Maven Webapp
http://maven.apache.org
7.0.34
org.apache.tomcat.embed
tomcat嵌入式内核
${tomcat.version}
org.apache.tomcat.embed
tomcat嵌入式日志
${tomcat.version}
org.apache.tomcat.embed
汤姆卡特·贾斯珀
${tomcat.version}
org.apache.tomcat
雄猫贾斯珀
${tomcat.version}
org.apache.tomcat
雄猫贾斯珀
${tomcat.version}
org.apache.tomcat
tomcat jsp api
${tomcat.version}
org.swinglabs
摆动布局
1.0.3
嵌入式TomcatSample
maven战争插件
1.1.1
WebContent/WEB-INF
**/*.物业
**/*.xml
**/*.css
**/*.html
org.codehaus.mojo
appassembler maven插件
1.1.1
目标
launch.ArcheryServer
网络应用
包裹
集合
web.xml


射箭射击
servlet.ArcheryShootServlet
射箭射击
/射箭
30
/WEB-INF/index.jsp
context.xml

 <?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Archery"/>

ArcheryShootServlet.java

    package servlet;

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

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
        name = "Archery", 
        urlPatterns = {"/Archery"}
    )

public class ArcheryShootServlet extends HttpServlet {
protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
String xmlSent = req.toString();    
System.out.println(xmlSent);
    ServletOutputStream out = resp.getOutputStream();
    PrintWriter test = resp.getWriter();
test.write("hello");
    out.write("hello heroku".getBytes());
out.write(xmlSent.getBytes());

    out.flush();
    out.close();
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. doGet and doPost call processRequest">...
包servlet;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.ServletOutputStream;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@WebServlet(
name=“射箭”,
urlPatterns={“/射箭”}
)
公共类ArcheryShootServlet扩展了HttpServlet{
受保护的void processRequest(HttpServletRequest-req、HttpServletResponse-resp)
抛出ServletException、IOException{
字符串xmlssent=req.toString();
System.out.println(xmlSent);
ServletOutputStream out=resp.getOutputStream();
PrintWriter测试=resp.getWriter();
测试。写(“你好”);
out.write(“hello heroku.getBytes());
write(xmlssent.getBytes());
out.flush();
out.close();
}
// ...

}

您的应用程序上下文路径是
/Archery
(在
context.xml
中定义)

您的servlet路径也是
/Archery
@WebServlet
urlPatterns
属性) 它也被web.xml复制

因此,您的URL应该是
localhost:8080/Archery/Archery

第一个服务器[:端口],后跟上下文路径,后跟servlet路径

无论如何,您必须修复项目结构才能使其正常工作。 如果您遵循Maven惯例,web资源目录应该是
src/main/webapp
web.xml
(和
context.xml
)应放在此目录下的web-INF目录下


打包war后,只需确保这些文件存在(在WEB-INF下)

只需尝试此路径,仍然无法:(刚刚发现,xml需要符合3.0才能使用注释。因此,它应该忽略我的注释。但我将尝试不使用它们。注释仍然是404。我需要一个全局web.xml吗?请查看我编辑的响应。这应该仍然有效,因为web中也有servlet映射。xmlI需要Maven con中的教程。)通风设备。移动到webapp/WEB-INF文件夹下实现了这一目的,但是,即使有注释,它仍在访问
localhost:port/Archery
。因此我猜它会因为版本而忽略它们。或者可能只是因为它的重复。谢谢@orid
 <?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Archery"/>
    package servlet;

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

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
        name = "Archery", 
        urlPatterns = {"/Archery"}
    )

public class ArcheryShootServlet extends HttpServlet {
protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
String xmlSent = req.toString();    
System.out.println(xmlSent);
    ServletOutputStream out = resp.getOutputStream();
    PrintWriter test = resp.getWriter();
test.write("hello");
    out.write("hello heroku".getBytes());
out.write(xmlSent.getBytes());

    out.flush();
    out.close();
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. doGet and doPost call processRequest">...