- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在WebContent/jsps
文件夹的JSP文件中有一个HTML表单。我的默认包servlet.java
文件夹中有一个servlet类src
。在我的web.xml
中,它映射为/servlet
。
我已经尝试了HTML表单的action
属性中的几个URL:
<form action="/servlet">
<form action="/servlet.java">
<form action="/src/servlet.java">
<form action="../servlet.java">
最佳答案
将Servlet类放入package
首先,将servlet类放入Java package
中。您应该始终将可公共重用的Java类放在包中,否则它们对于包中的类(例如服务器本身)是不可见的。这样,您就可以消除潜在的特定于环境的问题。无软件包servlet仅在特定的Tomcat + JDK组合中工作,并且永远不应依赖于此。
如果是“普通” IDE项目,则需要将该类放在其包结构中的“ Java Resources”文件夹中,而不是“ WebContent”中,这是针对Web文件(如JSP)的。以下是在导航器视图中看到的默认Eclipse Dynamic Web Project文件夹结构的示例:
EclipseProjectName
|-- src
| `-- com
| `-- example
| `-- YourServlet.java
|-- WebContent
| |-- WEB-INF
| | `-- web.xml
| `-- jsps
| `-- page.jsp
:
main/java
and thus not e.g. main/resources
, this is for non-class files中的包结构中。下面是一个默认的Maven webapp项目的文件夹结构示例,如Eclipse的Navigator视图所示:
MavenProjectName
|-- src
| `-- main
| |-- java
| | `-- com
| | `-- example
| | `-- YourServlet.java
| |-- resources
| `-- webapp
| |-- WEB-INF
| | `-- web.xml
| `-- jsps
| `-- page.jsp
:
/jsps
子文件夹不是严格必需的。您甚至可以不使用它,而将JSP文件直接放在webcontent / webapp根目录中,但是我只是从您的问题中接管该文件。
url-pattern
中设置servlet URL
@WebServlet
批注的值。
package com.example; // Use a package!
@WebServlet("/servlet") // This is the URL of the servlet.
public class YourServlet extends HttpServlet { // Must be public and extend HttpServlet.
// ...
}
/servlet/foo/bar
之类的路径参数,请改用
/servlet/*
的URL模式。另见
Servlet and path parameters like /xyz/{value}/test, how to map in web.xml?
@WebServlet
仅适用于Servlet 3.0或更高版本
@WebServlet
,您只需要确保您的
web.xml
文件(如果有)(自Servlet 3.0起是可选的)被声明为符合Servlet 3.0+版本
and thus not conform e.g. 2.5 version or lower。下面是与Servlet 3.1兼容的一个(与Tomcat 8 +,WildFly 8 +,GlassFish 4+等匹配)。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1"
>
<!-- Config here. -->
</web-app>
@WebServlet
批注。
package com.example;
public class YourServlet extends HttpServlet {
// ...
}
web.xml
中注册servlet:
<servlet>
<servlet-name>yourServlet</servlet-name>
<servlet-class>com.example.YourServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>yourServlet</servlet-name>
<url-pattern>/servlet</url-pattern> <!-- This is the URL of the servlet. -->
</servlet-mapping>
/WEB-INF/classes
文件夹中。对于
package com.example; public class YourServlet
,它必须位于
/WEB-INF/classes/com/example/YourServlet.class
中。否则,如果遇到
@WebServlet
也是404错误,或者遇到
<servlet>
出现HTTP 500错误,如下所示:
java.lang.ClassNotFoundException: com.example.YourServlet
,然后是
java.lang.NoClassDefFoundError: com.example.YourServlet
,然后是
javax.servlet.ServletException: Error instantiating servlet class com.example.YourServlet
。
/WEB-INF/classes
中缺少servlet类,则说明该项目配置错误或某些IDE /项目配置默认值被错误地还原(例如,在Eclipse中已禁用了Project> Build Automatically)。如果您没有任何线索,最好是从头开始,并且不要触摸任何IDE /项目配置默认值。
localhost:8080
上运行,并且WAR已成功部署在
/contextname
的上下文路径(默认为IDE项目名称,区分大小写!)上,并且Servlet的初始化未失败(阅读)服务器日志记录任何部署/ servlet成功/失败消息以及实际的上下文路径和servlet映射),然后在
/servlet
上可以使用URL模式为
http://localhost:8080/contextname/servlet
的servlet。
doGet()
,那么您将在浏览器中看到其输出。或者,如果您没有任何
doGet()
或它错误地调用了
super.doGet()
,则将显示“
HTTP 405: HTTP method GET is not supported by this URL”错误(仍然比404更好,因为405可以证明Servlet本身实际上是找到)。
service()
是一个不好的做法,除非您要重新发明MVC框架-如果您刚开始使用servlet并且对于当前问题中描述的问题一无所知,这是非常不可能的;)另请参见
Design Patterns web based applications 。
<form action>
值必须是有效的URL。
<a href>
同样。您需要了解绝对/相对URL的工作方式。您知道,URL是一个网址,您可以在浏览器的地址栏中输入/查看。如果您将相对网址指定为表单操作,即没有
http://
方案,则该网址将相对于当前网址相对,如您在网络浏览器的地址栏中看到的那样。因此,它绝对不像许多初学者认为的那样相对于服务器的WAR文件夹结构中的JSP / HTML文件位置。
http://localhost:8080/contextname/jsps/page.jsp
打开,并且您需要提交到
http://localhost:8080/contextname/servlet
中的servlet,这是几种情况(请注意,您可以安全地将
<form action>
替换为
<a href>
这里):
<form action="/servlet">
/
使URL相对于域,因此表单将提交到
http://localhost:8080/servlet
<form action="servlet">
http://localhost:8080/contextname/jsps/servlet
<form action="../servlet">
http://localhost:8080/contextname/servlet
<form action="${pageContext.request.contextPath}/servlet">
<form action="/contextname/servlet">
action="..."
或
action='...'
)中使用直引号,而不是在
action=”...”
或
action=’...’
之类的卷曲引号中使用。 HTML不支持使用弯引号,它们只是成为值的一部分。
关于html - Servlet返回“HTTP状态404请求的资源(/Servlet)不可用”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41798621/
我正在通读 Windows Phone 7.5 Unleashed,有很多代码看起来像这样(在页面的代码隐藏中): bool loaded; protected override void OnNav
在cgi服务器中,我这样返回 print ('Status: 201 Created') print ('Content-Type: text/html') print ('Location: htt
我正在查看 esh(easy shell)的实现,无法理解在这种情况下什么是 22 和 9 信号。理想情况下,有一个更具描述性的常量,但我找不到列表。 最佳答案 信号列表及其编号(包括您看到的这两个)
我的Oozie Hive Action 永远处于运行模式。 oozie.log文件中没有显示错误。
我正在编写一个使用 RFCOMM 通过蓝牙连接到设备的 Android 应用程序。我使用 BluetoothChat 示例作为建立连接的基础,大部分时间一切正常。 但是,有时由于出现套接字已打开的消息
我有一个云调度程序作业,它应该每小时访问我的 API 以更新一些价格。这些作业大约需要 80 秒才能运行。 这是它的作用: POST https://www.example.com/api/jobs/
我正在 Tomcat 上访问一个简单的 JSP 页面: 但是当我使用 curl 测试此页面时,我得到了 200 响应代码而不是预期的 202: $ curl -i "http://localhos
有时 JAR-RS 客户端会发送错误的语法请求正文。服务器应响应 HTTP status 400 (Bad Request) , 但它以 HTTP status 500 (Internal Serve
我正在尝试通过 response.send() 发送一个整数,但我不断收到此错误 express deprecated res.send(status): Use res.sendStatus(sta
我已经用 Excel 和 Java 做过很多次了……这次我需要用 Stata 来做,因为保存变量更方便'labels .如何将 dataset_1 重组为下面的 dataset_2? 我需要转换以下
我正在创建一个应用程序,其中的对象具有状态查找功能。为了提供一些上下文,让我们使用以下示例。 帮助台应用程序,其中创建作业并通过以下工作流程移动: 新 - 工作已创建但未分配 进行中 - 分配给工作人
我想在 Keras 中运行 LSTM 并获得输出和状态。在 TF 中有这样的事情 with tf.variable_scope("RNN"): for time_step in range
有谁知道 Scala-GWT 的当前状态 项目? 那里的主要作者 Grzegorz Kossakowski 似乎退出了这个项目,在 Spring 中从事 scalac 的工作。 但是,在 interv
我正在尝试编写一个 super 简单的 applescript 来启动 OneDrive App , 或确保打开,当机器的电源设置为插入时,将退出,或确保关闭,当电源设置为电池时。 我无法找到如何访问
目前我正在做这样的事情 link.on('click', function () { if (link.attr('href') !== $route.current.originalPath
是否可以仅通过查看用户代理来检测浏览器上是否启用/禁用 Javascript。 如果是,我应该寻找什么。如果否,检测用户浏览器是否启用/禁用 JavaScript 的最佳方法是什么 最佳答案 不,没有
Spring 和 OSGi 目前的开发状况如何? 最近好像有点安静了。 文档的最新版本 ( http://docs.spring.io/osgi/ ) 来自 2009 年。 我看到一些声明 Sprin
我正在从主函数为此类创建一个线程,但即使使用 Thread.currentThread().interrupt() 中断它,输出仍然包含“Still Here”行。 public class Writ
为了满足并发要求,我想知道如何在 Godog 中的多个步骤之间传递参数或状态。 func FeatureContext(s *godog.Suite) { // This step is ca
我有一个UIButton子类,它不使用UIImage背景,仅使用背景色。我注意到的一件事是,当您设置按钮的背景图像时,有一个默认的突出显示状态,当按下按钮时,该按钮会稍微变暗。 这是我当前的代码。
我是一名优秀的程序员,十分优秀!