我使用Eclipse for Java EE,Mars 2。我首先在这个IDE中使用Java8和Apache Tomcat8.0.x编写了一个servlet应用程序,该应用程序运行良好。
现在,我正试图将代码移植到Kotlin。但是,从下面发布的信息来看,Apache Tomcat服务器似乎无法找到并加载我的类LoginServlet
。
我已经移植了helper类和刚才命名为loginservlet
的一个servlet类。我在这个问题中删除了所有其余的代码,只是为了展示一个裸露的骨骼。
package bookyard.server;
// import statements ommitted for brevity
open class LoginServlet : HttpServlet() {
override fun doGet(request : HttpServletRequest, response : HttpServletResponse) {
val msg: String = "HTTP GET method not supported.";
try {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
} catch (e: IOException) {
e.printStackTrace();
}
}
override fun doPost(request : HttpServletRequest, response : HttpServletResponse) {
this.doPostInternal(request, response);
}
private fun doPostInternal(request: HttpServletRequest, response: HttpServletResponse) {
...
}
}
我首先用@webservlet(“/login”)
注释注释了loginservlet
类,但是这个注释运行服务器很好,但是对于路径/login,甚至对于servletcontext
路径http://localhost:8080/bookyardserver/给出了404。
因此,我将servlet配置移到WEB-INF\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>BookyardServer</display-name>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>bookyard.server.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<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>
</web-app>
我的项目生成路径包括对代码使用的所有库的引用。这里提供了它的快照。
在我的项目方面和目标运行时中,我引用了Apache Tomcat8.0运行时。
但是,当我在服务器上调试为->Debug时,浏览器会报告以下错误:
HTTP状态500-实例化servlet类bookyard.server.LoginServlet时出错
异常javax.servlet.servletException:实例化servlet类bookyard.server.loginServlet)org.apache.coyote.abstractProtocol$abstractConnectionHandler.process(abstractProtocol.java:670)org.apache.tomcat.util.net.nioEndpoint$socketprocessor.dorun(NioEndpoint.java:1520)org.apache.tomcat.util.net.nioEndpoint$socketprocessor.run(.java:61)java.lang.thread.run(来源未知)
根原因java.lang.ClassNotFoundException:bookyard.server.loginServlet org.apache.catalina.loader.webappClassLoaderBase.loadClass(webappClassLoaderBase.java:1332)org.apache.catalina.loader.webappClassLoaderBase.loadClass catalina.connector.coyoteAdapter.service(CoyoteAdapter.java:528)org.apache.coyote.http11.abstractHttp11Processor.process(abstractHttp11Processor.java:1099)org.apache.coyotp11Processor.java:1099)org.apache.coyote.abstractConnectionHandler.process(abstractProtocol.java:670)org.apache.tomcat.util.net.nioEndpoint$socketPro源代码)java.util.concurrent.threadpoolexecutor$worker.run(未知源代码)org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61)java.lang.thread.run(未知源代码)
我很确定这与%classpath%有关,但我不确定是什么。我已经在类路径中设置了Apache Tomcat jar文件。我的代码使用的所有其他内容也在类路径中。
我不知道为什么它不能加载我的servlet类。你能帮忙吗?
=====================================================================
编辑日期为2017/09/04:
朋友们好:
我找到了一个变通办法。也许能帮到你。
(1)创建一个Kotlin主类,例如:
fun main(args: Array<String>) {
println("Hello, world!")
}
(2)右键单击主类,选择“Run”=>“Kotlin Application”,这将使Kotlin插件编译所有的Kotlin源文件,并生成类文件。
<wb-resource deploy-path="/WEB-INF/classes" source-path="/var/classes"/>
=====================================================================
2016/11/17编辑:
嗨,朋友们,我为这个问题创建了一个问题:
请阅读这篇文章:无法将Kotlin类文件发布到Tomcat服务器
我最终解决了这个问题,将以下设置添加到WTP设置文件中。settings/org.eclipse.wst.common.component:
<wb-resource deploy-path="/WEB-INF/classes"
source-path="/kotlin_bin"/>
现在,Kotlin类文件将被编译到虚拟文件夹/kotlin_bin,该文件夹中的类文件将被部署到Tomcat服务器中。
[/kotlin_bin]文件夹中的类文件只包含类和方法声明信息,但在这些类文件中不生成实现代码。
因此,即使这些类文件部署到Tomcat服务器中,当我试图启动Tomcat服务器时,这些不完整的类文件将导致java.lang.ClassFormatError出现以下错误消息:
类文件xxxx/xxxx/xxxx中不是本机或抽象的方法中缺少代码属性
我正试图用PhpUnit和Composer。为此,我做了: 1添加phpUnit到req作曲家部分: 2.根据需要安装: php编写器。phar安装--dev 手术成功结束。 安装phpunit/phpunit(3.7.6)下载:100% 不幸的是,当我想做测试时,我得到了 ./vendor/bin/phpunit PHP致命错误:对/home/serek/PHP/project/tests/bo
我有一个gradle 4.1多项目,其中包含一个包含2个子文件夹“api”和“实现”的“项目A”。 多项目使用在主build.gradle的子项目部分中定义的< code>kotlin和< code>java-library插件。实现项目具有对< code>:projectA:api的API依赖性 在api文件夹中,我在“src/main/java”中有kotlin和java文件,在实现项目中,我
我想用cdn的axios 但是我得到了一个错误:拒绝加载脚本的https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js'因为它违反了以下内容安全策略指令:“script src'self'”。请注意,未显式设置“script src elem”,因此将“script src”用作回退。
我试图在点击事件上使用ajax调用servlet。从那个servlet,我称之为谷歌身份验证endpoint。我尝试将标头设置为我正在调用的servlet,但我无法摆脱此错误 XMLHttpRequest 无法加载 https://accounts.google.com/o/oauth2/auth?client_id=2536-a...nid 个人资料电子邮件 这是代码 在servlet上,我将其
我需要计算所有点的菜的总价,但我没有写减价法。这是一个方法签名(参数有一个Dish的映射,以及它被订购了多少次)。 所以它一定是每道菜的总和。getPrice*DishQuantity 有人问我的失败代码
问题内容: 我正在尝试从“远程”网站获取一些json数据。我在99000端口上运行Web服务,然后在99001端口上启动网站(http:// localhost:99001 / index.html)。 我收到以下消息: 即使以HTML文件启动网页,我也会得到以下信息: Web服务返回数据。我尝试捕获这样的数据项: 我正在尝试获得以下结构: 您知道我为什么会收到此错误吗? 问题答案: 您无法执行X