我有一个论坛,用户可以在其中注册详细信息,然后将其发送到Servlet,然后发送给Java Bean。我遇到的麻烦是,当请求Java bean时,无法将数据显示在另一个JSP页面上。因此CreateAccount.jsp允许用户输入论坛。
CreateAccount.jsp
该论坛被发布到Servlet(RegisterDetails.java)并将其发送到Java bean(Register.java)。然后error.jsp显示来自bean的数据。下面是我的代码。当前代码将每个值显示为null。
RegisterDetails.java
Register.java
error.jsp
null
Register.java:
package com.cassandra.MrBlabber.servlets; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Register") public class Register extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Register() { super(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RegisterDetails details = new RegisterDetails(); details.setName(request.getParameter("FullName")); details.setEmail(request.getParameter("EmailAddress")); details.setPassword(request.getParameter("Password")); details.setUsername(request.getParameter("Username")); request.setAttribute("details", details); getServletContext().getRequestDispatcher("/WEB-INF/Error.jsp").forward(request, response); } }
RegisterDetails.java:
package com.cassandra.MrBlabber.servlets; public class RegisterDetails { private String fullName; private String emailAddress; private String password; private String username; public RegisterDetails() {} public String getName() { return fullName; } public String getEmailAddress() { return emailAddress; } public String getPassword() { return password; } public String getUsername() { return username; } public void setName(String value) { this.fullName = value; } public void setEmail(String value) { this.emailAddress = value; } public void setPassword(String value) { this.password = value; } public void setUsername(String value) { this.username = value; } }
CreateAccount.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link rel="stylesheet" type="text/css" href="/MrBlabber/css/stylesheet.css"/> <title>MrBlabber/Create an Account</title> </head> <body> <!-- Section --> <section> <!-- Sign Up --> <article> <div id="articleWrapper"> <h3>No Account? Sign Up</h3> <form id="createAccount" onsubmit="return validateForm();" action="Register" name="createAccount" method="POST"> <input type="text" id="name" name="FullName" placeholder="Full Name"/> <input type="text" id="email" name="EmailAddress" placeholder="Email Address"/> <input type="password" id="password" name="Password" placeholder="Create a password"/> <input type="text" id="username" name="Username" placeholder="Choose your username"/> <input type="submit" value="Sign up for MrBlabber"/> </form> </div> </article> <article> <div id="errorMessage" class="errorMessage"> <script src="/MrBlabber/javascript/CreateAccountValidation.js" type="text/javascript"></script> </div> </article> </section> </body> </html>
Error.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="com.cassandra.MrBlabber.servlets.RegisterDetails" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!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>Insert title here</title> </head> <body> <h1>shit</h1> <jsp:useBean id="RegisterDetails" class="com.cassandra.MrBlabber.servlets.RegisterDetails" scope="session"/> <jsp:setProperty name="RegisterDetails" property="*"/> <h1> Name: <%=RegisterDetails.getName()%><br> Email: <%=RegisterDetails.getEmailAddress()%><br> Password: <%=RegisterDetails.getPassword()%><br> Username: <%=RegisterDetails.getUsername()%><br> </h1> </body> </html>
首先,您的类RegisterDetails不是bean,因为它没有实现java.io.Serializable接口。
RegisterDetails
java.io.Serializable
其次,您确实需要对来自请求的数据实施某种输入清理(以防止SQL / HTML /跨站点脚本注入),并且,如果您要使用Bean,我想您应该将其放在Bean中类。
第三,您也可以省去bean的概念(这意味着您不需要jsp:useBean),只需将RegisterDetails类的实例作为常规类对象保存到会话中,然后可以在任何会话中将其从会话中拉出。页面如下:
在Servlet中:
session.setAttribute("details", details); //saving your object to the session
在任何其他页面中:
RegisterDetails details = (RegisterDetails)session.getAttribute("details");