Java 使链接转到servlet以重定向到另一个页面

Java 使链接转到servlet以重定向到另一个页面,java,jsp,jakarta-ee,servlets,Java,Jsp,Jakarta Ee,Servlets,首先让我说,我的servlet以我刚刚好的形式加载选项列表。问题是当我像我所希望的那样从index.jsp开始时,列表不会加载。因此,基本上,我希望单击index.jsp上的一个链接,将我带到servlet,然后根据单击的链接将我重定向到正确的页面。也许我已经看这个太久了,只是需要新鲜的眼睛,但我不明白为什么它不起作用 我已经包括了Index.jsp和servlet Index.jsp 在此处插入标题 Servlet 包edu.witc.Assignment03.controller; 导

首先让我说,我的servlet以我刚刚好的形式加载选项列表。问题是当我像我所希望的那样从index.jsp开始时,列表不会加载。因此,基本上,我希望单击index.jsp上的一个链接,将我带到servlet,然后根据单击的链接将我重定向到正确的页面。也许我已经看这个太久了,只是需要新鲜的眼睛,但我不明白为什么它不起作用

我已经包括了Index.jsp和servlet

Index.jsp

在此处插入标题

Servlet
包edu.witc.Assignment03.controller;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.List;
导入javax.servlet.*;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
//导入javax.servlet.annotation.WebServlet;
//导入javax.servlet.http.HttpServlet;
//导入javax.servlet.http.HttpServletRequest;
//导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.http.HttpSession;
导入edu.witc.Assignment03.model.Customer;
导入edu.witc.Assignment03.model.Phone;
导入edu.witc.Assignment03.model.States;
@WebServlet(description=“servlet获取表单和模型之间的控制器角色”,urlPatterns={”/customerServlet“,“/addCustomer”,“/addPet”})
公共类CustomerServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
公共CustomerServlet(){
超级();
}
私有void processRequest(HttpServletRequest请求,
HttpServletResponse响应)引发ServletException,IOException{
//TODO自动生成的方法存根
HttpSession session=request.getSession();
电话=新电话();
状态=新状态();
Collection phones=phone.getPhoneCollection();
集合状态=state.getStateCollection();
session.setAttribute(“电话”,电话);
session.setAttribute(“状态”,状态);
getRequestDispatcher(“/customerManagement.jsp”).forward(请求,响应);
//}
}
private List customers=new ArrayList();
私有void addCustomer(HttpServletResponse,HttpServletRequest)//重定向到索引
抛出IOException、ServletException{
字符串url=“/customerManagement.jsp”;
processRequest(请求、响应);
getRequestDispatcher(url).forward(请求,响应);
}
私有void addPet(HttpServletResponse,HttpServletRequest)//重定向到索引
抛出IOException、ServletException{
字符串url=“/pets.jsp”;
getRequestDispatcher(url).forward(请求,响应);
}
私人客户getCustomer(int customerId){
用于(客户:客户){
if(customer.getCustomerId()==customerId){
退货客户;
}
}
返回null;
}
私有void sendEditCustomerForm(HttpServletRequest请求,
HttpServletResponse响应)引发IOException,ServletException{
字符串url=“/customerManagement.jsp”;
request.setAttribute(“客户”,客户);
getRequestDispatcher(url).forward(请求,响应);
}
公共无效数据集(HttpServletRequest请求,
HttpServletResponse(响应)
抛出ServletException、IOException{
字符串uri=request.getRequestURI();
if(uri.endsWith(“/addCustomer”)){
添加客户(响应、请求);
}else if(uri.endsWith(“/addPet”)){
addPet(响应、请求);
}
}
public void doPost(HttpServletRequest请求,
HttpServletResponse(响应)
抛出ServletException、IOException{
processRequest(请求、响应);
//更新客户
int customerId=0;
试一试{
客户ID=
Integer.parseInt(request.getParameter(“id”);
}捕获(数字格式){
}
Customer=getCustomer(customerId);
如果(客户!=null){
customer.setFirstName(request.getParameter(“firstName”);
customer.setLastName(request.getParameter(“lastName”);
customer.setEmail(request.getParameter(“电子邮件”));
customer.setPhone(request.getParameter(“phone”);
customer.setAddress(request.getParameter(“地址”);
customer.setCity(request.getParameter(“city”);
customer.setZip(request.getParameter(“zip”);
}
}
}

使用一个参数并检查值比手动解析URL更容易:

<a href="customerServlet?action=addCustomer">Add Customer</a>
<br/><a href="customerServlet?action=addPet">Add Pet</a>
如果您使用的是“表单”,那么这可能是将参数发送到servlet的解决方案

 <form action="ServletName" method="POST">
     <input type="text" name="paramName">
     <input type="submit" value="Add">
    </form>
如果您仅使用href之类的链接,则应发送如下参数:

<a href="ServletName?ID=12345">

我应该把这个放在doPost吗?不,链接总是使用GET。我想你把链接放在表单里,把自己弄糊涂了。即使在表单中,它们也不是表单提交。再次查看您的代码,我怀疑它永远不会做您认为它在做的事情。你太复杂了。MVC并不意味着所有表单提交和链接都应该指向同一个servlet。这意味着它们在被转发到JSP之前都应该转到servlet。但是,它们不应该都指向一个servlet。你应该做不同的servlet,这样你会犯更少的错误。这很奇怪……它对addPet有效,但当我点击addCustomer链接时,它似乎不起作用。是的,我这样做了,但我只是在乞求jsp和servlet。当你离得这么近,而它又不想工作的时候,这是令人沮丧的
String action = request.getParameter("action");
if("addCustomer".equals(action)) { ... }
else if("addPet".equals(action)) { ... }
 <form action="ServletName" method="POST">
     <input type="text" name="paramName">
     <input type="submit" value="Add">
    </form>
String costumerName = request.getParameter("paramName");
<a href="ServletName?ID=12345">
String costumerName = request.getParameter("ID");