Java 使用字符串查询参数重定向基于servlet的服务失败
情境:在下面的代码中,我试图学习如何使用表单参数,特别是通过传播字符串查询参数重定向Java servlet 问题:我似乎无法理解为什么使用所需的字符串查询参数将用户从表单(即index.html)重新定向到正确的页面时会遇到问题 以下是我在发布此消息之前采取的步骤:Java 使用字符串查询参数重定向基于servlet的服务失败,java,servlets,Java,Servlets,情境:在下面的代码中,我试图学习如何使用表单参数,特别是通过传播字符串查询参数重定向Java servlet 问题:我似乎无法理解为什么使用所需的字符串查询参数将用户从表单(即index.html)重新定向到正确的页面时会遇到问题 以下是我在发布此消息之前采取的步骤: 我确保@WebServlet注释的URL模式是正确的 i、 e.在我的情况下/CityManagerWebStarter/mainmenuresponder.do 我确保在查看URL时我的内容根是正确的,即。 /CityMana
- 我确保@WebServlet注释的URL模式是正确的 i、 e.在我的情况下/CityManagerWebStarter/mainmenuresponder.do
- 我确保在查看URL时我的内容根是正确的,即。 /CityManager WebStarter和我可以在启动 下面是它的网址 按预期显示index.html页面
package company.citymanagerweb.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MainMenuResponder
*/
@WebServlet("/CityManagerWebStarter/mainmenuresponder.do")
public class MainMenuResponder extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MainMenuResponder() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String userChoiceSelect = request.getParameter("menuChoice");
String[] userOptionsCBox = request.getParameterValues("adminoptions");
StringBuilder params = new StringBuilder();
String queryStringParams = params.toString();
if(userOptionsCBox != null) {
boolean isFirst = true;
for(int i = 0; i < userOptionsCBox.length; i++) {
// Build URL with string query parameters i.e. URL + ? + PARAM1 + AMAPERSAND + PARAM2
// Arguments is value of the value attribute
if(!isFirst) {
params.append("&");
} else {
params.append("?");
}
if(userOptionsCBox[i].equalsIgnoreCase("useDB")) {
// append() argument is value of the value attribute belonging to the input attribute
params.append("useDB=1");
} else if(userOptionsCBox[i].equalsIgnoreCase("sendEmail")) {
params.append("sendEmail=1");
}
isFirst = false;
}
queryStringParams = params.toString();
}
if(userChoiceSelect.equals("1")) {
response.sendRedirect("ListCities.html" + queryStringParams);
} else if(userChoiceSelect.equals("2")) {
response.sendRedirect("AddCity.html" + queryStringParams);
} else if(userChoiceSelect.equals("3")) {
response.sendRedirect("DeleteCity.html" + queryStringParams);
} else {
response.sendRedirect("index.html");
}
}
}
package company.citymanagerweb.servlet;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
/**
*Servlet实现类MainMenuResponder
*/
@WebServlet(“/CityManagerWebStarter/mainmenuresponder.do”)
公共类MainMenuResponder扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
/**
*@参见HttpServlet#HttpServlet()
*/
公共主要赞助方(){
超级();
//TODO自动生成的构造函数存根
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
//TODO自动生成的方法存根
}
/**
*@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
字符串userChoiceSelect=request.getParameter(“menuChoice”);
字符串[]userOptionsCBox=request.getParameterValues(“adminoptions”);
StringBuilder参数=新建StringBuilder();
字符串queryStringParams=params.toString();
if(userOptionsCBox!=null){
布尔值isFirst=true;
对于(int i=0;i
index.html:
<html>
<head>
<title>Welcome to the City Manager</title>
</head>
</html>
<body>
<form id="form1" method="post"
action="/CityManagerWeb/mainmenuresponder.do">
<table style="width:100%">
<tr>
<td style="width:100%" align="center">
<h1>Welcome to the World City Manager</h1>
</td>
</tr>
<tr>
<td>
<h3>What would you like to do today?</h3>
</td>
</tr>
<tr>
<td>
<select id="menuChoice" name="menuChoice">
<option id="1" value="1">
List Cities
</option>
<option id="2" value="2">
Add a new city
</option>
<option id="3" value="3">
Delete a city
</option>
</select>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="adminoptions" id="optionDatabase" value="useDB" />Use Database<br>
<input type="checkbox" name="adminoptions" id="optionEmail" value="sendEmail" />Send Confirmation<br>
</td>
</tr>
<tr>
<td>
<input name="chooser" type="submit" value="Choose" />
</td>
</tr>
</table>
</form>
</body>
欢迎来到城市经理
欢迎来到世界城市经理
你今天想做什么?
列出城市
添加一个新城市
删除一个城市
使用数据库
发送确认信息
ListCities.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Listing Cities</title>
</head>
<body>
<table style="width:450px;">
<tr>
<td style="width:150px;"><b>COUNTRY</b></td>
<td style="width:300px;"><b>CITY</b></td>
</tr>
<tr>
<td>Russia</td>
<td>Moscow</td>
</tr>
<tr>
<td>England</td>
<td>London</td>
</tr>
<tr>
<td>United States</td>
<td>Washington, D.C.</td>
</tr>
</table>
</body>
</html>
上市城市
国
城市
俄罗斯联邦
莫斯科
英格兰
伦敦
美国
华盛顿特区。
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>CityManagerWebStarter</display-name>
<servlet>
<servlet-name>citymanagerwebstarter</servlet-name>
<servlet-class>company.citymanagerweb.servlets</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>citymanagerwebstarter</servlet-name>
<url-pattern>/citymanagerwebstarter/mainmenuresponder.do</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>
城市管理员网络启动程序
城市管理员网络启动程序
company.citymanagerweb.servlets
城市管理员网络启动程序
/CityManager WebStarter/mainmenuresponder.do
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
感谢您的建议/帮助。如果
citymanagerwebstarter
是内容根目录。它不应该是web.xml
和@WebServlet
注释中url部分的一部分。我现在看到的一个相当常见的问题是,人们使用最新的IDE工具,使用Servlet 3.0规范生成web项目,即生成的文件使用新的@WebServlet
,@WebFilter<servlet>
<servlet-name>citymanagerwebstarter</servlet-name>
<servlet-class>company.citymanagerweb.servlets</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>citymanagerwebstarter</servlet-name>
<url-pattern>/citymanagerwebstarter/mainmenuresponder.do</url-pattern>
</servlet-mapping>
@WebServlet("/mainmenuresponder.do")
public class MainMenuResponder extends HttpServlet {
<form id="form1" method="post" action="mainmenuresponder.do">