【问题标题】:JSP Redirect submit valueJSP 重定向提交值
【发布时间】:2017-12-16 13:34:37
【问题描述】:

我有一个这样的jsp,我想处理一些输入数据。为什么当前的jsp不等待提交值然后执行servlet?该站点立即重定向到定义的下一页。我想显示页面,用户应该输入一个值然后重定向。

这是我的代码:

<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ include file="/resources/taglibs.jsp"%>

<%
session.setAttribute("MyName", System.getProperty("user.name"));
request.setAttribute("hideNav", true);
%>

<fmt:setLocale value="${lang}" />
<fmt:bundle basename="messages">
<t:template>
    <jsp:attribute name="header"> 
        <fmt:message key="topic.bag_transfer" />
    </jsp:attribute>

    <jsp:attribute name="navigation_static">
        <li><a href="info"><font size="+0.1">${lang}</font></a></li>
    </jsp:attribute>
    <jsp:body>
        <p class="msg">
            <fmt:message key="all.message" />
            <c:out value="${requestScope.Message}" />
        </p>
        <%--Form--%>
        <form method="post" action="login">
            <div>
                <p class="f_head">
                    <fmt:message key="all.user" />
                </p>
                <p class="f_form">
                    <input id="1" class="f_txt" type="text" name="login"    />
                </p>
                <%--button--%>
                <p class="f_form_bl">
                    <input id="3" class="f_btn" type="submit" name="btn"   value="Weiter" />
                </p>
            </div>
        </form>     
    </jsp:body>
</t:template>

还有一个像这样的servlet

public class BagScanStartLocation extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String CONTENT_TYPE = "text/html; charset=UTF-8"; //$NON-NLS-1$
private static final String PAGE_JSP_THIS = "/bag_scan_start_location.jsp"; //$NON-NLS-1$
private static final String PAGE_JSP_LOGIN = "/"; //$NON-NLS-1$
private static final String PAGE_JSP_NEXT = "/scan_bag.jsp"; //$NON-NLS-1$

public void init(ServletConfig config) throws ServletException {
    super.init(config);
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {


    response.setContentType(CONTENT_TYPE);
    response.setCharacterEncoding("UTF-8"); //$NON-NLS-1$

    HttpSession session = request.getSession(true);
    Locale lang = (Locale) session.getAttribute("lang"); //$NON-NLS-1$
    AppsSession myAppsUser = (AppsSession) session.getAttribute("USER"); //$NON-NLS-1$

    //.....

    request.setAttribute("UserName", myAppsUser.getUserName()); //$NON-NLS-1$
    request.setAttribute("messageText", "Test"); //$NON-NLS-1$

    RequestDispatcher disp =     this.getServletContext().getRequestDispatcher("/scan_bag.jsp");
    disp.forward(request, response);
}

我用一个简单的例子试了一下:

小服务程序

protected void doGet(HttpServletRequest request, 
HttpServletResponse response) throws ServletException, IOException 
{
// reading the user input
 String color= request.getParameter("color");    
 PrintWriter out = response.getWriter();
 out.println (

  "<html> \n" +
    "<head> \n" +
      "<meta http-equiv=\"Content-Type\" content=\"text/html;   charset=ISO-8859-1\"> \n" +
      "<title> My first jsp  </title> \n" +
    "</head> \n" +
    "<body> \n" +
      "<font size=\"12px\" color=\"" + color + "\">" +
        "Hello World" +
      "</font> \n" +
    "</body> \n" +
  "</html>" 
);  

jsp

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title> My first JSP   </title>
</head> 
<body>      
    <form action="BagScanStartLocation">            
         Please enter a color <br>
        <input type="text" name="color"size="20px">
        <input type="submit" value="submit">                        
    </form>     
</body> 

我像这样在 topic.jsp 中链接它

                <li><a id="10" href="bag_scan_start_location"> <fmt:message key="topic.bag_transfer" /></a></li>

和 web.xml:

<servlet-mapping>
    <servlet-name>BagScanStartLocation</servlet-name>
    <url-pattern>/bag_scan_start_location</url-pattern>
</servlet-mapping>

    <servlet>
    <description>
    </description>
    <display-name>BagScanStartLocation</display-name>
    <servlet-name>BagScanStartLocation</servlet-name>
    <servlet-class>de.blablabla.oracle.blab.BagScanStartLocation</servlet-class>
</servlet>

当我单击主题 href 时,servlet 将立即执行。为什么 JSP没有显示

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"      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 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>bla_WA</display-name>
<welcome-file-list>
    <welcome-file>index</welcome-file>
</welcome-file-list>
<servlet>
    <servlet-name>Root</servlet-name>
    <servlet-class>de.xxx.oracle.bla.Root</servlet-class>
</servlet>
<servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.Login</servlet-class>
</servlet>
<servlet>
    <servlet-name>Info</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.InfoServlet</servlet-class>
</servlet>
<servlet>
    <servlet-name>testreplier</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.testreplier</servlet-class>
</servlet>
<servlet>
    <servlet-name>CycleCountIndex</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.CycleCountIndex</servlet-class>
</servlet>

<servlet>
    <servlet-name>CycleCountLocator</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.CycleCountLocator</servlet-class>
</servlet>
<servlet>
    <servlet-name>CycleCountAddItem</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.CycleCountAddItem</servlet-class>
</servlet>

<servlet>
    <servlet-name>SimpleCycleCountIndex</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.SimpleCycleCountIndex</servlet-class>
</servlet>

<servlet>
    <servlet-name>SimpleCycleCountLocator</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.SimpleCycleCountLocator</servlet-class>
</servlet>

<servlet>
    <servlet-name>SimpleCycleCountAddItem</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.SimpleCycleCountAddItem</servlet-class>
</servlet>

<servlet>
    <servlet-name>ReturnMtxIndex</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.ReturnMtxIndex</servlet-class>
    <init-param>
        <param-name>PAGE_JSP_THIS</param-name>
        <param-value>/return_mtx_index.jsp</param-value>
    </init-param>
</servlet>
<servlet>
    <servlet-name>ReturnMtxIndexPocket</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.ReturnMtxIndex</servlet-class>
    <init-param>
        <param-name>PAGE_JSP_THIS</param-name>
        <param-value>/return_mtx_index_pocket.jsp</param-value>
    </init-param>
</servlet>
<servlet>
    <servlet-name>RcvMtxIndex</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.RcvMtxIndex</servlet-class>
</servlet>
<servlet>
    <servlet-name>RcvMtxOverview</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.RcvMtxOverview</servlet-class>
</servlet>
<servlet>
    <servlet-name>RcvMtxItem</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.RcvMtxItem</servlet-class>
</servlet>
<servlet>
    <servlet-name>RcvMtxBook</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.RcvMtxBook</servlet-class>
</servlet>
<servlet>
    <servlet-name>RcvMtxClose</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.RcvMtxClose</servlet-class>
</servlet>
<servlet>
    <servlet-name>RcvJitIndex</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.RcvJitIndex</servlet-class>
</servlet>
<servlet>
    <servlet-name>PalletPick</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.PalletPick</servlet-class>
</servlet>
<servlet>
    <servlet-name>RcvBBIndex</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.RcvBBIndex</servlet-class>
</servlet>
<servlet>
    <servlet-name>ZPixCall</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.util.ZPixCall</servlet-class>
</servlet>
<servlet>
    <servlet-name>XtimeLogin</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.XtimeLogin</servlet-class>
    <init-param>
        <param-name>PAGE_JSP_THIS</param-name>
        <param-value>/xtime_login.jsp</param-value>
    </init-param>
</servlet>

<servlet>
    <description>
    </description>
    <display-name>DoSo</display-name>
    <servlet-name>DoSo</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.DoSo</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>DlcClearingPoint</display-name>
    <servlet-name>DlcClearingPoint</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.DlcClearingPoint</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>DlcKidToLoc</display-name>
    <servlet-name>DlcKidToLoc</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.DlcKidToLoc</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>DlcKeToKid</display-name>
    <servlet-name>DlcKeToKid</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.DlcKeToKid</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>DlcInvoice</display-name>
    <servlet-name>DlcInvoice</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.DlcInvoice</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>DlcStatusMonitor</display-name>
    <servlet-name>DlcStatusMonitor</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.DlcStatusMonitor</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>BagScanStartLocation</display-name>
    <servlet-name>BagScanStartLocation</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.BagScanStartLocation</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>ScanBag</display-name>
    <servlet-name>ScanBag</servlet-name>
    <servlet-class>de.xxx.oracle.xxsh.ScanBag</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Root</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Info</servlet-name>
    <url-pattern>/info</url-pattern>
</servlet-mapping>
    <servlet-mapping>
    <servlet-name>testreplier</servlet-name>
    <url-pattern>/testreplier</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CycleCountIndex</servlet-name>
    <url-pattern>/cycle_count_index</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CycleCountLocator</servlet-name>
    <url-pattern>/cycle_count_locator</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CycleCountAddItem</servlet-name>
    <url-pattern>/cycle_count_add_item</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>SimpleCycleCountIndex</servlet-name>
    <url-pattern>/simple_cycle_count_index</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>SimpleCycleCountLocator</servlet-name>
    <url-pattern>/simple_cycle_count_locator</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>SimpleCycleCountAddItem</servlet-name>
    <url-pattern>/simple_cycle_count_add_item</url-pattern>
</servlet-mapping>  
<servlet-mapping>
    <servlet-name>ReturnMtxIndex</servlet-name>
    <url-pattern>/return_mtx_index</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ReturnMtxIndexPocket</servlet-name>
    <url-pattern>/return_mtx_index_pocket</url-pattern>
</servlet-mapping> 
<servlet-mapping>
    <servlet-name>RcvMtxIndex</servlet-name>
    <url-pattern>/rcv_mtx_index</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RcvMtxOverview</servlet-name>
    <url-pattern>/rcv_mtx_overview</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RcvMtxItem</servlet-name>
    <url-pattern>/rcv_mtx_item</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RcvMtxBook</servlet-name>
    <url-pattern>/rcv_mtx_book</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RcvMtxClose</servlet-name>
    <url-pattern>/rcv_mtx_close</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RcvJitIndex</servlet-name>
    <url-pattern>/rcv_jit_index</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>PalletPick</servlet-name>
    <url-pattern>/pallet_pick</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>XtimeLogin</servlet-name>
    <url-pattern>/xtime_login</url-pattern>
</servlet-mapping>  
<servlet-mapping>
    <servlet-name>RcvBBIndex</servlet-name>
    <url-pattern>/rcv_bb_index</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ZPixCall</servlet-name>
    <url-pattern>/zpixcall</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>DoSo</servlet-name>
    <url-pattern>/DoSo</url-pattern>
</servlet-mapping>
    <servlet-mapping>
    <servlet-name>DlcClearingPoint</servlet-name>
    <url-pattern>/dlc_clearing_point</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>DlcKidToLoc</servlet-name>
    <url-pattern>/dlc_kid_to_loc</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>DlcKeToKid</servlet-name>
    <url-pattern>/dlc_ke_to_kid</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>DlcInvoice</servlet-name>
    <url-pattern>/dlc_invoice</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>DlcStatusMonitor</servlet-name>
    <url-pattern>/dlc_statusmonitor</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>BagScanStartLocation</servlet-name>
    <url-pattern>/bag_scan_start_location</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ScanBag</servlet-name>
    <url-pattern>/scan_bag</url-pattern>
</servlet-mapping>
<resource-ref>
    <description>description</description>
    <res-ref-name>jdbc/ORACLE_APPS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-    1">
    <title> My first JSP   </title>
</head> 
<body>      
    <form action="BagScanStartLocation" method="get">           
         Please enter a color <br>
        <input type="text" name="color"size="20px">
        <input type="submit" value="submit">                        
    </form>     
</body> 
</html>

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    这是因为在您的 doGet() 中调用了 doPost() 方法;

    【讨论】:

    • 在这段代码之间建立联系有点困难?但是让我们尝试一下:当您单击 href 链接时,它会向 BagScanStartLocation servlet 发送 GET 请求,对吗?然后它调用doGet,然后是doPost,然后将您转发到带有颜色输入表单的jsp?它会立即将您重定向到下一个 servlet?可能是因为从 doPost 方法转发而发生的。尝试在 BagScanStartLocation servlet 中将 doPost 中的所有内容替换为 doGet
    • 如果没有,请显示完整的 jsp 以进行重定向和完整的 web.xml
    • 未显示 JSP。我希望首先页面输入颜色,然后是 servlet 的结果。
    • 好的。您单击 href="bag_scan_start_location"。之后你想要带有颜色输入表单的jsp,但它没有显示? url 'bag_scan_start_location' 引导我们进入 servlet BagScanStartLocation#doGet。在这里你没有调用doPost,而是转发到你的“jsp_with_form.jsp”(我在代码中没有看到它的名字)
    • 您点击 href="bag_scan_start_location"。之后你想要带有颜色输入表单的jsp,但它没有显示? --正是
    【解决方案2】:

    web.xml 中似乎有错误的配置。我从头开始构建项目并且它可以工作。

    非常感谢。

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多