我正在尝试在Tomcat中实现一个自定义阀门,说MyValve扩展了BaseValve。 我创建了一个项目jar,将其添加到Tomcat \ lib文件夹
中下一步是配置server.xml或context.xml 我试过了两个 但我的阀门类没有被发现......
有人可以让我知道创建阀门并使用它的步骤。
谢谢
答案 0 :(得分:1)
你在运行什么版本的Tomcat? CATALINA_HOME\lib
是Tomcat v6.x的正确目录(我相信v7)。如果您的阀门没有被拿起,可能是您没有编辑server.xml
目录中的context.xml
或CATALINA_BASE
文件。您使用的是Eclipse IDE还是类似的东西?如果是,请检查Tomcat服务器设置,因为它将XML文件从CATALINA_HOME
(安装)复制到CATALINA_BASE
(已配置的实例)目录。这个问题让我吵了一阵。
答案 1 :(得分:1)
问题在于创建和使用自定义阀所需的步骤。因此,让我逐步解释它,以便其他人也可以利用它。在我的示例中,我将使用 Java Maven项目。 (Git Project)
第1步:打开一个新的或现有的Maven项目(也可以从上面的仓库中克隆)。
第2步:将以下依赖项添加到pom.xml
文件中。
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>7.0.85</version>
<scope>provided</scope>
</dependency>
步骤3 :在src/main/java
路径下,创建一个包并创建一个新的Java类:TomcatValve.java
(可以是任何名称)。通过ValueBase
类扩展该类。
第4步:这样,您将必须实现其invoke
方法。整个类看起来类似于以下内容:
import java.io.IOException;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ValveBase;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
/**
* @author Keet Sugathadasa
*/
public class TomcatValve extends ValveBase {
private static final Logger logger = Logger.getLogger(TomcatValve.class.getName());
public void invoke(Request request, Response response) throws IOException, ServletException {
HttpServletRequest httpServletRequest = request.getRequest();
Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
logger.info("Receiving request");
while (headerNames.hasMoreElements()) {
String header = headerNames.nextElement();
logger.log(Level.INFO, "Header --> {0} Value --> {1}", new Object[]{header, httpServletRequest.getHeader(header)});
}
getNext().invoke(request, response);
}
}
步骤5 :打开一个终端,然后运行mvn install
。现在,在target/
文件夹中,应该已经建立了jar。
步骤6 :将此jar复制到${TOMCAT_HOME}/lib
或${CATALINA_HOME}/lib
文件夹中。通常在/usr/local/apache-tomcat9/lib
中。
第7步:转到${TOMCAT_HOME}/conf
或${CATALINA_HOME}/conf
文件夹,然后将以下行添加到server.xml
:
类名:TomcatValve
PackageName:com.keetmalin.tomcat
<Valve className="com.keetmalin.tomcat.TomcatValve"/>
步骤9 :转到${TOMCAT_HOME}/bin
或${CATALINA_HOME}/bin
文件夹,然后在终端中运行以下命令:
./catalina.sh run
步骤10 :接下来,您的Tomcat服务器将启动。打开浏览器,然后转到http://localhost:8080/
,然后返回到终端。您将看到正在打印日志。现在,您可以执行任何您想做的事情,而不必打印日志。希望对您有帮助!
答案 2 :(得分:0)
我发现我创建了一个包含java文件的jar,而不是使用netbeans的类文件。
对我有用的解决方案是创建一个具有正确的包目录结构的jar(MyValve.jar \ org \ apache \ catalina \ connector),并将类文件粘贴到该目录中。我把jar放在同一个位置(CATALINA_HOME \ lib)。
我在以下部分的server.xml文件中添加了一个条目:
<Valve className="org.apache.catalina.connector.MyValve"
classField="value">