在jsp页面上使用servlet表单而不重定向到servlet

时间:2014-05-25 15:15:11

标签: java javascript jsp servlets jstl

我正在开发一个需要JSP页面的项目,该页面包含另一个使用Servlet处理登录表单的JSP页面。

我遇到的问题是,每当我尝试登录时,servlet都会工作,表单中可能出现的错误会显示,但是链接会重定向到Servlet,而不会停留在同一个JSP页面上。

模板的外观示例: -JSP Page在点击登录之前

link:JSPpage.jsp

**text outside of included login form**
<included JSP page with the login form>
Email: something
Password: ******
点击登录后

-JSP页面

link:MyServlet

<login form>
Email: something
Error: invalid email
Password:

基本上,包含表单之外的突出显示文本会消失。那是因为链接已更改为Servlet。

我想从JSP页面内部处理登录,以便登录表单周围的任何模板都保持不变,不会被删除(页面不会重定向)。

我已经搜遍了这个问题的解决方案。 我意识到我的解释真的很弱我为此道歉。

请好好帮助我。我不希望使用AJAX或JavaScript或框架来执行此操作,除非它是必须的,并且无法直接使用JSP / Servlet完成。

谢谢你, 马捷。

修改 Servlet:Prijava.java

package servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import baza.Podatki;



public class Prijava extends HttpServlet{



  public void doPost(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
        HttpSession session = request.getSession();
        String email=request.getParameter("email");
        String geslo=request.getParameter("geslo");

        int st=0;
        if (email!=null){
            try {               
                if(!Podatki.shranjenEmail(email))
                    request.setAttribute("napakaPrijava", "Email ne obstaja!");
                else if (!Podatki.preveriPrijavoUporabnik(email, geslo)&&!Podatki.preveriPrijavoZaposlen(email, geslo))
                    request.setAttribute("napakaPrijava", "Nepravilno geslo!");
                else{
                    request.setAttribute("prijava",true);
                    session.setAttribute("email", email);
                }
                request.setAttribute("email", email);               
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        else if (request.getParameter("odjava")!=null)
            session.removeAttribute("email");
        System.out.println(session.getAttribute("email"));
        System.out.println("Prijava:"+request.getParameter("prijava"));

        RequestDispatcher view = getServletContext().getRequestDispatcher("/Prijava.jsp");
        view.forward(request, response);

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


}

Prijava.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     <%@ page isELIgnored="false" %>

<!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=UTF-8">
        <title>Renta Ferari</title>
        <link rel="stylesheet" type="text/css" href="obrazci.css">
    </head>
    <body >
    <div style="width:250px;height:110px; border:solid 1px; bordor-radius:15px; border-color:red">
        <c:choose>
            <c:when test="${!prijava}">
                <form method="post">
                    <table align="center">
                        <tr><td>E-mail:</td> <td><input type="text" name="email" class="vnos" value="${email}"></td></tr>
                        <tr><td>Geslo: </td><td><input type="password" name="geslo" class="vnos"><br></td></tr>
                        <tr><td colspan="4"><c:out value="${napakaPrijava}"></c:out></td></tr>
                        <tr><td colspan="2"><input type="submit" name="prijava" value="Prijava"></td></tr>
                    </table>

                </form>

            </c:when>


            <c:otherwise>
                <div align="center">
                    Prijavljeni ste kot: <c:out value="${email}"></c:out>
                    <form method="post" action="login">
                        <input type="submit" name="odjava" value="Odjava">                  
                    </form>
                </div>
            </c:otherwise>
        </c:choose>

        </div>




    </body>
</html>

所以基本上我想在新JSP中包含上面的代码以及我的模板的标题,内容和放大器。页脚。

我尝试了很多选项和“解决方案”,比如jsp:include,&lt;%@ include file ..等没有按照我的要求工作。每当我点击登录的提交按钮时,它都会将我重定向到servlet的URL,从而覆盖包含的标题,内容和内容。页脚。

我不是要求你对它进行编码,我只是想知道如何做到这一点,因为很多网站都是这样做的。

1 个答案:

答案 0 :(得分:0)

从您的代码和您说的内容来看,您的应用程序的每个页面都包含一个登录表单。当用户使用表单时,您希望在提交登录表单之前将表单重定向回他们正在查看的任何页面。 您可以做的是包括原始servlet的servlet路径或jsp作为表单中的隐藏字段:

<input type="hidden" name="forwardTo" value="${pageContext.request.servletPath}" /> 

然后你可以在你的Servlet中转发:

String forwardTo= request.getParameter("forwardTo");
RequestDispatcher view = getServletContext().getRequestDispatcher(forwardTo);
    view.forward(request, response);