- 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/31175315/
有人告诉我,如果我只有一个“东西”,比如家(不是多个家),我应该在 routes.rb 中使用资源 :home,而不是资源 :home。但是当我查看路由时,POST 函数似乎想要 home#creat
Activity 开始。这些代码框架顺利通过。 // Initialize array adapters. One for already paired devices and //
资源 search-hadoop.com search-hadoop.com索引所有邮件列表,非常适合历史搜索。当你遇到问题时首先在这里搜索,因为很可能有人已经遇到了你的问题。 邮件列表 在A
我是 WPF 的新手,正在努力使用位于单独程序集中的样式。这就是我正在做的:- 我有一个带有\Themes 文件夹的类库项目,其中包含一个“generic.xaml”,它合并了\Themes 内的子文
我正在编写一个使用虚拟树状文件结构的插件。基本上它就像一个包含文件的标准文件系统,区别在于这些文件实际上并不存在于文件系统中的特定位置,而只是 java 对象。 这些当前由使用 SettingProv
如果我在 XAML 中使用以下内容,我会收到错误消息: 错
我正在使用 laravel 资源来获取 api 的数据: return [ 'id' => $this->id, 'unread' =>
我有以下 pom.xml: 4.0.0 mycompany resource-fail 0.0.1-SNAPSHOT BazBat
许多GDI +类都实现IDisposable,但是我不确定何时应该调用Dispose。对于使用new或静态方法(例如Graphics.CreateGraphics)创建的实例来说,这很明显。但是,由属
我正在构建一组 RESTful 资源,其工作方式如下:(我将使用“people”作为示例): 获取/people/{key} - 返回一个人对象 (JSON) GET/people?first_nam
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一个使用 $resource 的简单 Controller : var Regions = $resource('mocks/regions.json'); $scope.regions =
在 Azure 门户中,如何查看不同资源之间的依赖关系。我特别想查看哪些资源正在使用我要删除的存储。 最佳答案 您可以使用应用程序洞察应用程序 map 来执行此操作: 您还可以打开存储帐户的日志记录:
我正在使用 ionic 生成资源(图标和启动画面)。我正在使用 ionic v2.1.0 和 cordova v6.4.0。 到目前为止我一直在使用(它在以前的版本中工作): cordova plat
是否可以使用 Assets 包含子文件夹中的文件? 示例:[base_url]/assets/css/pepper-grinder/jquery-ui-1.8.11.custom.min.css 最佳
我正在阅读一些尝试教授 Android 开发的书。在书中,作者概述了 res/下的一些目录。他提到 res/menu 包含基于 XML 的菜单规范。他还提到了保存“通用文件”的 res/raw。当我创
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我在服务器上使用 express-resource。在我的 AngularJS Controller 中: var User = $resource('/services/users/:use
因此,每当我运行我的应用程序时,它都会立即崩溃并给出以下错误: No package identifier when getting value for resource number 0x00000
对于我正在创建的(网络)应用程序,我需要使用基本身份验证在我的 UIWebView 中加载页面。 现在设置我使用的授权 header : NSString *result = [NSString st
我是一名优秀的程序员,十分优秀!