我有一个简单的Maven servlet/jsp应用程序,我部署到本地Tomcat 9(通过Eclipse)。JSP页面存储在根文件夹(src\main\webapp\*. jsp
)下,当Maven安装WAR时,它们位于根文件夹(MyAppContext\*. jsp
旁边的MyAppContext\META-INF\
和MyAppContext\WEB-INF\
)下。
servlet的URL模式是为每个servlet注释的,例如/doactionone
,/doactionTwo
等。大多数servlet执行对各种JSP页面的调度,但是我在其中一个页面上有一个直接的锚链接。
我想将这些JSP页面移动到各自的目录中,所以我将它们移动到src\main\webapp\JSP\*。jsp
文件夹,当Maven安装运行时,它们被放置在MyAppContext\jsp\
下。
我在web.xml
中唯一的条目是一个欢迎文件,在重新定位JSP文件后,它指向加载相应JSP页面的jsp\doactionone.jsp
。这个页面包含一个简单的表单:
<form action="doactionone" method="post">
...
<a href="jsp/doactiontwo.jsp">
<input type="submit" />...
</form>
这个页面上的提交实际上调用了正确的servlet(用doactionone
URL模式定义的那个)。我还有一个将用户带到第二个页面的链接(doactiontwo.jsp
)。
然而,当我通过这个链接导航到第二个页面时,它有另一个简单的表单(见下文),并执行提交(发布),我在浏览器的调试中看到网址请求是http://localhost:8080/MyAppContext/jsp/doactiontwo
,出于明显的原因,将返回404状态(并且不会命中此servlet的doPost()
(或doget()
)方法)。
<form action="doactiontwo" method="post">
...
<input type="submit" />...
</form>
如果我试图将第二个servlet的URL模式修改为/jsp/doactiontwo
,我可以点击该servlet,但是当doactiontwo
实际在处理后将请求发送/转发到第一个servlet(doactionone
)时,使用以下命令:
RequestDispatcher rd = request.getRequestDispatcher("doactionone.jsp");
rd.forward(request, response);
当它被加载时,当悬停在第一页上最初指向第二个JSP页的网址上时(
jsp/jsp/doactiontwo.jsp
有趣的是doactionone的源代码。jsp仍然将其显示为
jsp/doactiontwo。jsp
,但将鼠标悬停在上面会显示http://localhost:8080/MyAppContext/jsp/jsp/doactiontwo
,当点击时,它显然会导致404状态。
有人能解释为什么,首先,第二个JSP页面上的提交要求servlet有一个
/jsp/doactionTwo
的模式来工作,而不是/doactionTwo
吗?有没有办法避免在URL模式上追加/jsp
?
其次,为什么当第二个servlet处理请求并将其分派/转发到第一个页面时,URL现在包含两个
jsp/
?
您需要更改您的设计,以允许控制器(又名Servlet)驱动您的应用程序。在这种情况下,使用第二个Servlet的URL Pattern(doactionTwo
)来代替您的链接:
@WebServlet(urlPatterns = { "doactiontwo" }
public class DoActionTwoServlet extends HttpServlet { /* ... */ }
<form action="doactionone" method="post">
...
<a href="doactiontwo"> <!-- This should match your second servlet's URL pattern -->
<input type="submit" />...
</form>
现在,由于调用锚点链接时的默认方法是GET
,因此需要覆盖DoActionTwoServlet
的doget()
方法,并将这些请求转发到实际的doactiontwo.jsp
:
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
RequestDispatcher rd = request.getRequestDispatcher("jsp/doactiontwo.jsp");
rd.forward(request, response);
}
问题内容: 我有一张桌子DEAL和一张桌子DEAL_TYPE。我想映射以下代码: 问题在于数据已经存在于数据库中。而且我很难将类映射到数据库。 数据库看起来像这样: 我知道我可以在交易类型之间使用简单的@OneToMany关系,但是我更喜欢使用枚举。这可能吗? 我几乎可以通过使用EnumType.ORDINAL类型来使其工作。但不幸的是,我的交易类型表中的ID不是连续的,并且不是从1开始。 有什么
我有一个JSP登录页面,可以调用login action类。我使用的是Struts注释,而不是到映射,一切正常。我随机尝试了一些新东西,所以我从action类和struts中删除了所有注释。xml还没有映射到我的
我有这些网址 如何设置web.xml以将此模式映射到servlet? 其中xx是一个两个字母的字符串。我把什么放在xx的地方,这样上面的所有链接都将转到MyClass?
我有一些这样的豆子: 3)移动将在bins中搜索注释移动到,并将setter添加到: 但是在这个解决方案中,我不喜欢方法。
问题内容: 我所有的数据库表都应有一个endTime字段,默认情况下应为END_OF_TIME或类似的内容。我对2038的限制不满意,所以我希望endTime在mysql中为DATETIME类型。 我的Java代码是: 我可以通过手动创建带有DATETIME类型的endTime字段的表来解决,而不是将实体endTime映射到该列,但是我希望Hibernate自动生成表- 我该怎么做? 问题答案:
我试图用strut 2应用程序配置spring插件,而strut 2应用程序已经用常规插件运行了,所以我使用了注释。我使用ExtJs提交表单,在我引入spring插件之前,它最初工作得很好,现在ajax请求无法定位操作,并且在firebug中没有显示任何响应。 绒球.xml struts.xml web.xml applicationContext.xml 操作类 Ajax请求火虫报告,XML选项