Java 执行servlet后,如何控制浏览器地址栏中生成的地址?
为了练习,我编写了一个简单的网页,向用户显示一个下拉菜单。用户将选择一个数字并点击Java 执行servlet后,如何控制浏览器地址栏中生成的地址?,java,servlets,Java,Servlets,为了练习,我编写了一个简单的网页,向用户显示一个下拉菜单。用户将选择一个数字并点击Submit按钮 之后,将执行servlet,并返回偶数列表 查看web浏览器地址栏中的地址,它是: http://localhost:8080/FindEvenOdd/FindEvenOdd 我希望它是http://localhost:8080/FindEvenOdd/Result 我该怎么做? 我的DD看起来像这样: <web-app xmlns="http://java.sun.com/xml/ns/
Submit
按钮
之后,将执行servlet,并返回偶数列表
查看web浏览器地址栏中的地址,它是:
http://localhost:8080/FindEvenOdd/FindEvenOdd
我希望它是http://localhost:8080/FindEvenOdd/Result
我该怎么做?我的DD看起来像这样:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>Evens</servlet-name>
<servlet-class>FindIt</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Evens</servlet-name>
<url-pattern>/FindEvenOdd</url-pattern>
</servlet-mapping>
</web-app>
埃文斯
芬迪特
埃文斯
/芬德维诺德
我的HTML:
<html>
<head>
<title> List of Even/Odd Numbers </title>
</head>
<body>
<form method="POST" action="FindEvenOdd">
<center>
<select name="number" size="1">
<option> <50
<option> <100
<option> <150
</select>
</center>
<center>
<input type="SUBMIT">
</center>
</form>
</body>
</html>
偶数/奇数列表
你所尝试的几乎是正确的。url模式
必须设置为/Result
不过有一些注意事项:
- 始终将您的类放在一个包中。不在默认包中
- 生成有效的HTML5
center
是一个不应该长时间使用的标记,并且您的选择框是无效的HTML
- 学习Servlet3.0而不是Servlet2.4李>
您尝试的几乎是正确的。
url模式
必须设置为/Result
不过有一些注意事项:
- 始终将您的类放在一个包中。不在默认包中
- 生成有效的HTML5
center
是一个不应该长时间使用的标记,并且您的选择框是无效的HTML
- 学习Servlet3.0而不是Servlet2.4李>
要更改URL,您需要在servlet中进行重定向
String contextPath = request.getContextPath();
response.sendRedirect(response.encodeRedirectURL(contextPath + "/Result") );
为了更改URL,您需要在servlet中进行重定向
String contextPath = request.getContextPath();
response.sendRedirect(response.encodeRedirectURL(contextPath + "/Result") );
将url模式更改为/findevenod/Result
并尝试将url模式更改为/findevenod/Result
并尝试是的,先生,我会的。我对HTML几乎一无所知。另外,我将关注Servlet 3.0:)只是一个问题:HTML中action
的值必须与DD中url模式
的值完全匹配。正确吗?否。正如其名称所示,url模式包含映射到Servlet的url模式。它可以是.action或/foo/例如。该模式始终相对于webapp的上下文路径(在您的示例中为/findevenoded)。HTML表单中的action属性是绝对或相对URL。如果是相对的(即,如果它不是以/
开头),则它是相对于您在浏览器地址栏中看到的路径的。如果它是绝对的(即,它以/
开头),那么它将始终从web服务器的根目录开始。因此,在您的情况下,使用相对URLResult
与使用绝对URL/FindEvenOdd/Result
相同。请始终记住,浏览器对Java Web应用程序一无所知。应用程序的上下文路径与Java webapp相关,浏览器不知道也不关心该页面是由Java webapp、静态文件或小精灵池生成的。至于你的第二条评论,我发现:)有一个用户知道的名称,然后是Servlet的部署名称和实际文件名。Servlet2.4和Servlet3.0有多大区别?我在servlets上得到的唯一一本好书是Head First,它在2.4Servlet3.0上允许使用Java注释来声明和映射servlets和其他组件,而不是web.xml文件。它使事情变得更容易。它还支持文件上传和异步请求处理,IIRC。是的,先生,我会的。我对HTML几乎一无所知。另外,我将关注Servlet 3.0:)只是一个问题:HTML中action
的值必须与DD中url模式
的值完全匹配。正确吗?否。正如其名称所示,url模式包含映射到Servlet的url模式。它可以是.action或/foo/例如。该模式始终相对于webapp的上下文路径(在您的示例中为/findevenoded)。HTML表单中的action属性是绝对或相对URL。如果是相对的(即,如果它不是以/
开头),则它是相对于您在浏览器地址栏中看到的路径的。如果它是绝对的(即,它以/
开头),那么它将始终从web服务器的根目录开始。因此,在您的情况下,使用相对URLResult
与使用绝对URL/FindEvenOdd/Result
相同。请始终记住,浏览器对Java Web应用程序一无所知。应用程序的上下文路径与Java webapp相关,浏览器不知道也不关心该页面是由Java webapp、静态文件或小精灵池生成的。至于你的第二条评论,我发现:)有一个用户知道的名称,然后是Servlet的部署名称和实际文件名。Servlet2.4和Servlet3.0有多大区别?我在servlets上得到的唯一一本好书是Head First,它在2.4Servlet3.0上允许使用Java注释来声明和映射servlets和其他组件,而不是web.xml文件。它使事情变得更容易。它还支持文件上传和异步请求处理IIRC。