Java 请求时从servlet转发相同的URL,因此再次重复该操作

Java 请求时从servlet转发相同的URL,因此再次重复该操作,java,jakarta-ee,servlets,jstl,Java,Jakarta Ee,Servlets,Jstl,我一直在努力使我的项目更加结构化,因此我一直在遵循中的netbeans电子商务示例项目的例子。我根据示例更改了控制器。现在我在转到显示数据库中的值的页面时遇到了问题 下面给出了我的Servlet protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setC

我一直在努力使我的项目更加结构化,因此我一直在遵循中的netbeans电子商务示例项目的例子。我根据示例更改了控制器。现在我在转到显示数据库中的值的页面时遇到了问题

下面给出了我的Servlet

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    Op_Stock ops = new Op_Stock();
    String userPath = request.getServletPath();
    String param = null;
    Map<String, String> prdMap = new LinkedHashMap<String, String>();
    Map<String, String> lvlMap = new LinkedHashMap<String, String>();
    ArrayList<HashMap<String, String>> stkList = new ArrayList<>();
    switch (userPath) {
        case "/ViewStock":
            stkList = ops.getAllStockDetails();
            request.setAttribute("stkList", stkList);
            userPath = "Stock.jsp";
            param = "type=m&page=stk";
            break;
        case "/AddStockForm":
            prdMap = ops.getAllProducts();
            lvlMap = ops.getAllLevels();
            request.setAttribute("prdMap", prdMap);
            request.setAttribute("lvlMap", lvlMap);
            userPath = "Insertstk.jsp";
            param = "type=m&page=stk";
            break;
        case "/AddStock":
            System.out.println("prdId: " + request.getParameter("prdId"));
            int iprdId = Integer.parseInt(request.getParameter("prdId"));
            int istkIn = Integer.parseInt(request.getParameter("stkIn"));
            int istkthld = Integer.parseInt(request.getParameter("stkthld"));
            int ilvlId = Integer.parseInt(request.getParameter("lvlId"));
            int stkIn = ops.insertStockDetails(iprdId, istkIn, istkthld, ilvlId);
            stkList = ops.getAllStockDetails();
            request.setAttribute("stkList", stkList);
            if (stkIn > 0) {
                userPath = "/Stock.jsp";
                param = "message=Stock Details Created!&pg=stk&type=m";
            } else {
                prdMap = ops.getAllProducts();
                lvlMap = ops.getAllLevels();
                request.setAttribute("prdMap", prdMap);
                request.setAttribute("lvlMap", lvlMap);
                userPath = "/Insertstk.jsp";
                param = "message=Could not create!&pg=stk&type=m";
            }
            break;
        case "/DeleteStock":
            int delStk = ops.deleteStockDetails(request.getParameter("stkId"));
            if (delStk > 0) {
                userPath = "Stock.jsp";
                param = "message=Stock Details Deleted!&pg=stk&type=m";
                stkList = ops.getAllStockDetails();
                request.setAttribute("stkList", stkList);
            } else {
                userPath = "Stock.jsp";
                stkList = ops.getAllStockDetails();
                request.setAttribute("stkList", stkList);
                param = "message=Could not delete!&pg=stk&type=m";
            }
            break;
    }

    // use RequestDispatcher to forward request internally
    String url = userPath + "?" + param;
    request.getRequestDispatcher(url).forward(request, response);
    //response.sendRedirect(url);

}
<div class="col-md-10">
                    <form method="POST" action="AddStock" class="form-horizontal">
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Product</label>
                            <div class="col-sm-4">                                    
                                <select id="s_prdname" class="form-control" name="prdId" required>
                                    <option>Select</option>
                                    <c:forEach items="${prdList}" var="mapItem">
                                        <option value="${mapItem.key}">${mapItem.value}</option>
                                    </c:forEach> 
                                </select>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Level</label>
                            <div class="col-sm-4">                                    
                                <select id="s_lvlname" class="form-control" name="lvlId" required>
                                    <option>Select</option>
                                    <c:forEach items="${lvlList}" var="mapItem">
                                        <option value="${mapItem.key}">${mapItem.value}</option>
                                    </c:forEach> 
                                </select>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">In-Stock</label>
                            <div class="col-sm-2">
                                <input type="number" name="stkIn" class="form-control" id="stkIn"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Threshold</label>
                            <div class="col-sm-2">
                                <input type="number" name="stkthld" class="form-control" id="stkthld"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-default btn-primary"><strong>Submit</strong></button>
                            </div>
                        </div>
                    </form>
                </div> 
<div class="table-responsive">
                    <table class="table table-bordered table-striped table-hover">
                        <thead>
                        <th><strong>Product Name</strong></th>
                        <th><strong>Level</strong></th>
                        <th><strong>In Stock</strong></th>
                        <th><strong>Threshold</strong></th>
                        <th><strong>Expiry</strong></th>
                        <th><strong>Operations</strong></th>
                        </thead>                            
                        <tbody>
                            <jsp:useBean id="lvl" scope="request" class="Level.Level"/>
                            <jsp:useBean id="prd" scope="request" class="Product.Product"/>
                            <c:forEach items="${stkList}" var="row">
                                <tr>
                                    <td><jsp:setProperty name="prd" property="prdId" value="${row.prdStk}"/><jsp:getProperty name="prd" property="prdName"/></td>
                                    <td><jsp:setProperty name="lvl" property="lvlId" value="${row.lvlStk}"/><jsp:getProperty name="lvl" property="lvlName"/></td>
                                    <td>${row.inStk}</td>
                                    <td>${row.thldStk}</td>
                                    <td>${row.expStk}</td>
                                    <td>
                                        <button type="button" class="btn btn-default btn-sm btn-danger" onclick="deletedata('${row.idStk}');">
                                            <span class="glyphicon glyphicon-trash"></span>
                                        </button>                                            
                                        <button class="btn btn-info btn-sm" data-toggle="modal" data-target="#myModal">
                                            <span class="glyphicon glyphicon-eye-open"></span>
                                        </button>                                    
                                    </td>
                                </tr>
                            </c:forEach>
                        </tbody>
                        <tfoot>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        </tfoot>
                    </table>
                </div>
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
Op_股票ops=新Op_股票();
字符串userPath=request.getServletPath();
字符串参数=null;
Map prdMap=newlinkedhashmap();
Map lvlMap=newlinkedhashmap();
ArrayList stkList=新的ArrayList();
交换机(用户路径){
案例“/ViewStock”:
stkList=ops.getAllStockDetails();
setAttribute(“stkList”,stkList);
userPath=“Stock.jsp”;
param=“type=m&page=stk”;
打破
案例“/AddStockForm”:
prdMap=ops.getAllProducts();
lvlMap=ops.getAllLevel();
setAttribute(“prdMap”,prdMap);
setAttribute(“lvlMap”,lvlMap);
userPath=“Insertstk.jsp”;
param=“type=m&page=stk”;
打破
案例“/AddStock”:
System.out.println(“prdId:+request.getParameter(“prdId”);
intiprdid=Integer.parseInt(request.getParameter(“prdId”);
int-istkIn=Integer.parseInt(request.getParameter(“stkIn”);
int-istkthld=Integer.parseInt(request.getParameter(“stkthld”);
int ilvlId=Integer.parseInt(request.getParameter(“lvlId”);
int stkIn=ops.insertStockDetails(iprdId、istkIn、istkthld、ilvlId);
stkList=ops.getAllStockDetails();
setAttribute(“stkList”,stkList);
如果(stkIn>0){
userPath=“/Stock.jsp”;
param=“message=Stock Details Created!&pg=stk&type=m”;
}否则{
prdMap=ops.getAllProducts();
lvlMap=ops.getAllLevel();
setAttribute(“prdMap”,prdMap);
setAttribute(“lvlMap”,lvlMap);
userPath=“/Insertstk.jsp”;
param=“message=无法创建!&pg=stk&type=m”;
}
打破
案例“/DeleteStock”:
int delStk=ops.deleteStockDetails(request.getParameter(“stkId”);
如果(增量大于0){
userPath=“Stock.jsp”;
param=“message=Stock Details!&pg=stk&type=m”;
stkList=ops.getAllStockDetails();
setAttribute(“stkList”,stkList);
}否则{
userPath=“Stock.jsp”;
stkList=ops.getAllStockDetails();
setAttribute(“stkList”,stkList);
param=“message=无法删除!&pg=stk&type=m”;
}
打破
}
//使用RequestDispatcher在内部转发请求
字符串url=userPath+“?”+param;
getRequestDispatcher(url).forward(请求,响应);
//sendRedirect(url);
}
在servlet中,我将属性设置为存储数据库内容的请求

假设我正在执行一个insert操作,该操作在开关情况下为“/AddStock”,执行此操作后,请求被转发到我的页面,在该页面上显示表格,因为我正在使用forward,它将转到显示页面,但地址栏中的URL将与我的insert表单中的所有请求参数保持相同,因此,当我刷新页面时,插入操作将再次发生。如果我使用response.sendRedirect(url),我将无法使用请求属性,因此无法显示DB值

我的插入表格如下

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    Op_Stock ops = new Op_Stock();
    String userPath = request.getServletPath();
    String param = null;
    Map<String, String> prdMap = new LinkedHashMap<String, String>();
    Map<String, String> lvlMap = new LinkedHashMap<String, String>();
    ArrayList<HashMap<String, String>> stkList = new ArrayList<>();
    switch (userPath) {
        case "/ViewStock":
            stkList = ops.getAllStockDetails();
            request.setAttribute("stkList", stkList);
            userPath = "Stock.jsp";
            param = "type=m&page=stk";
            break;
        case "/AddStockForm":
            prdMap = ops.getAllProducts();
            lvlMap = ops.getAllLevels();
            request.setAttribute("prdMap", prdMap);
            request.setAttribute("lvlMap", lvlMap);
            userPath = "Insertstk.jsp";
            param = "type=m&page=stk";
            break;
        case "/AddStock":
            System.out.println("prdId: " + request.getParameter("prdId"));
            int iprdId = Integer.parseInt(request.getParameter("prdId"));
            int istkIn = Integer.parseInt(request.getParameter("stkIn"));
            int istkthld = Integer.parseInt(request.getParameter("stkthld"));
            int ilvlId = Integer.parseInt(request.getParameter("lvlId"));
            int stkIn = ops.insertStockDetails(iprdId, istkIn, istkthld, ilvlId);
            stkList = ops.getAllStockDetails();
            request.setAttribute("stkList", stkList);
            if (stkIn > 0) {
                userPath = "/Stock.jsp";
                param = "message=Stock Details Created!&pg=stk&type=m";
            } else {
                prdMap = ops.getAllProducts();
                lvlMap = ops.getAllLevels();
                request.setAttribute("prdMap", prdMap);
                request.setAttribute("lvlMap", lvlMap);
                userPath = "/Insertstk.jsp";
                param = "message=Could not create!&pg=stk&type=m";
            }
            break;
        case "/DeleteStock":
            int delStk = ops.deleteStockDetails(request.getParameter("stkId"));
            if (delStk > 0) {
                userPath = "Stock.jsp";
                param = "message=Stock Details Deleted!&pg=stk&type=m";
                stkList = ops.getAllStockDetails();
                request.setAttribute("stkList", stkList);
            } else {
                userPath = "Stock.jsp";
                stkList = ops.getAllStockDetails();
                request.setAttribute("stkList", stkList);
                param = "message=Could not delete!&pg=stk&type=m";
            }
            break;
    }

    // use RequestDispatcher to forward request internally
    String url = userPath + "?" + param;
    request.getRequestDispatcher(url).forward(request, response);
    //response.sendRedirect(url);

}
<div class="col-md-10">
                    <form method="POST" action="AddStock" class="form-horizontal">
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Product</label>
                            <div class="col-sm-4">                                    
                                <select id="s_prdname" class="form-control" name="prdId" required>
                                    <option>Select</option>
                                    <c:forEach items="${prdList}" var="mapItem">
                                        <option value="${mapItem.key}">${mapItem.value}</option>
                                    </c:forEach> 
                                </select>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Level</label>
                            <div class="col-sm-4">                                    
                                <select id="s_lvlname" class="form-control" name="lvlId" required>
                                    <option>Select</option>
                                    <c:forEach items="${lvlList}" var="mapItem">
                                        <option value="${mapItem.key}">${mapItem.value}</option>
                                    </c:forEach> 
                                </select>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">In-Stock</label>
                            <div class="col-sm-2">
                                <input type="number" name="stkIn" class="form-control" id="stkIn"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Threshold</label>
                            <div class="col-sm-2">
                                <input type="number" name="stkthld" class="form-control" id="stkthld"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-default btn-primary"><strong>Submit</strong></button>
                            </div>
                        </div>
                    </form>
                </div> 
<div class="table-responsive">
                    <table class="table table-bordered table-striped table-hover">
                        <thead>
                        <th><strong>Product Name</strong></th>
                        <th><strong>Level</strong></th>
                        <th><strong>In Stock</strong></th>
                        <th><strong>Threshold</strong></th>
                        <th><strong>Expiry</strong></th>
                        <th><strong>Operations</strong></th>
                        </thead>                            
                        <tbody>
                            <jsp:useBean id="lvl" scope="request" class="Level.Level"/>
                            <jsp:useBean id="prd" scope="request" class="Product.Product"/>
                            <c:forEach items="${stkList}" var="row">
                                <tr>
                                    <td><jsp:setProperty name="prd" property="prdId" value="${row.prdStk}"/><jsp:getProperty name="prd" property="prdName"/></td>
                                    <td><jsp:setProperty name="lvl" property="lvlId" value="${row.lvlStk}"/><jsp:getProperty name="lvl" property="lvlName"/></td>
                                    <td>${row.inStk}</td>
                                    <td>${row.thldStk}</td>
                                    <td>${row.expStk}</td>
                                    <td>
                                        <button type="button" class="btn btn-default btn-sm btn-danger" onclick="deletedata('${row.idStk}');">
                                            <span class="glyphicon glyphicon-trash"></span>
                                        </button>                                            
                                        <button class="btn btn-info btn-sm" data-toggle="modal" data-target="#myModal">
                                            <span class="glyphicon glyphicon-eye-open"></span>
                                        </button>                                    
                                    </td>
                                </tr>
                            </c:forEach>
                        </tbody>
                        <tfoot>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        </tfoot>
                    </table>
                </div>

产品
选择
${mapItem.value}
数量
选择
${mapItem.value}
库存
门槛
提交
我的显示页面如下所示

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    Op_Stock ops = new Op_Stock();
    String userPath = request.getServletPath();
    String param = null;
    Map<String, String> prdMap = new LinkedHashMap<String, String>();
    Map<String, String> lvlMap = new LinkedHashMap<String, String>();
    ArrayList<HashMap<String, String>> stkList = new ArrayList<>();
    switch (userPath) {
        case "/ViewStock":
            stkList = ops.getAllStockDetails();
            request.setAttribute("stkList", stkList);
            userPath = "Stock.jsp";
            param = "type=m&page=stk";
            break;
        case "/AddStockForm":
            prdMap = ops.getAllProducts();
            lvlMap = ops.getAllLevels();
            request.setAttribute("prdMap", prdMap);
            request.setAttribute("lvlMap", lvlMap);
            userPath = "Insertstk.jsp";
            param = "type=m&page=stk";
            break;
        case "/AddStock":
            System.out.println("prdId: " + request.getParameter("prdId"));
            int iprdId = Integer.parseInt(request.getParameter("prdId"));
            int istkIn = Integer.parseInt(request.getParameter("stkIn"));
            int istkthld = Integer.parseInt(request.getParameter("stkthld"));
            int ilvlId = Integer.parseInt(request.getParameter("lvlId"));
            int stkIn = ops.insertStockDetails(iprdId, istkIn, istkthld, ilvlId);
            stkList = ops.getAllStockDetails();
            request.setAttribute("stkList", stkList);
            if (stkIn > 0) {
                userPath = "/Stock.jsp";
                param = "message=Stock Details Created!&pg=stk&type=m";
            } else {
                prdMap = ops.getAllProducts();
                lvlMap = ops.getAllLevels();
                request.setAttribute("prdMap", prdMap);
                request.setAttribute("lvlMap", lvlMap);
                userPath = "/Insertstk.jsp";
                param = "message=Could not create!&pg=stk&type=m";
            }
            break;
        case "/DeleteStock":
            int delStk = ops.deleteStockDetails(request.getParameter("stkId"));
            if (delStk > 0) {
                userPath = "Stock.jsp";
                param = "message=Stock Details Deleted!&pg=stk&type=m";
                stkList = ops.getAllStockDetails();
                request.setAttribute("stkList", stkList);
            } else {
                userPath = "Stock.jsp";
                stkList = ops.getAllStockDetails();
                request.setAttribute("stkList", stkList);
                param = "message=Could not delete!&pg=stk&type=m";
            }
            break;
    }

    // use RequestDispatcher to forward request internally
    String url = userPath + "?" + param;
    request.getRequestDispatcher(url).forward(request, response);
    //response.sendRedirect(url);

}
<div class="col-md-10">
                    <form method="POST" action="AddStock" class="form-horizontal">
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Product</label>
                            <div class="col-sm-4">                                    
                                <select id="s_prdname" class="form-control" name="prdId" required>
                                    <option>Select</option>
                                    <c:forEach items="${prdList}" var="mapItem">
                                        <option value="${mapItem.key}">${mapItem.value}</option>
                                    </c:forEach> 
                                </select>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Level</label>
                            <div class="col-sm-4">                                    
                                <select id="s_lvlname" class="form-control" name="lvlId" required>
                                    <option>Select</option>
                                    <c:forEach items="${lvlList}" var="mapItem">
                                        <option value="${mapItem.key}">${mapItem.value}</option>
                                    </c:forEach> 
                                </select>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">In-Stock</label>
                            <div class="col-sm-2">
                                <input type="number" name="stkIn" class="form-control" id="stkIn"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">Threshold</label>
                            <div class="col-sm-2">
                                <input type="number" name="stkthld" class="form-control" id="stkthld"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-default btn-primary"><strong>Submit</strong></button>
                            </div>
                        </div>
                    </form>
                </div> 
<div class="table-responsive">
                    <table class="table table-bordered table-striped table-hover">
                        <thead>
                        <th><strong>Product Name</strong></th>
                        <th><strong>Level</strong></th>
                        <th><strong>In Stock</strong></th>
                        <th><strong>Threshold</strong></th>
                        <th><strong>Expiry</strong></th>
                        <th><strong>Operations</strong></th>
                        </thead>                            
                        <tbody>
                            <jsp:useBean id="lvl" scope="request" class="Level.Level"/>
                            <jsp:useBean id="prd" scope="request" class="Product.Product"/>
                            <c:forEach items="${stkList}" var="row">
                                <tr>
                                    <td><jsp:setProperty name="prd" property="prdId" value="${row.prdStk}"/><jsp:getProperty name="prd" property="prdName"/></td>
                                    <td><jsp:setProperty name="lvl" property="lvlId" value="${row.lvlStk}"/><jsp:getProperty name="lvl" property="lvlName"/></td>
                                    <td>${row.inStk}</td>
                                    <td>${row.thldStk}</td>
                                    <td>${row.expStk}</td>
                                    <td>
                                        <button type="button" class="btn btn-default btn-sm btn-danger" onclick="deletedata('${row.idStk}');">
                                            <span class="glyphicon glyphicon-trash"></span>
                                        </button>                                            
                                        <button class="btn btn-info btn-sm" data-toggle="modal" data-target="#myModal">
                                            <span class="glyphicon glyphicon-eye-open"></span>
                                        </button>                                    
                                    </td>
                                </tr>
                            </c:forEach>
                        </tbody>
                        <tfoot>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        </tfoot>
                    </table>
                </div>

产品名称
级别
库存中
阈值
到期日
操作