gpt4 book ai didi

java - 在jsp页面上使用servlet形式而不重定向到servlet

转载 作者:太空宇宙 更新时间:2023-11-04 14:50:30 25 4
gpt4 key购买 nike

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

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

模板的外观示例:-点击登录前的JSP页面

链接:JSPpage.jsp

**text outside of included login form**
<included JSP page with the login form>
Email: something
Password: ******

-点击登录后的JSP页面

链接: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、<%@ include file .. 等。没有一个按照我想要的方式工作。每当我单击登录的提交按钮时,它都会将我重定向到 servlet 的 URL,从而覆盖包含的页眉、内容和页脚。

我并不是要求您编写代码,我只是想了解如何做到这一点,因为许多网站都这样做。

最佳答案

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

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

然后您可以在 Servlet 中转发此内容:

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

关于java - 在jsp页面上使用servlet形式而不重定向到servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com