如何从SQL中使用java检索会话中的数据
我试图创建简单的Web应用程序。但是我登录到用户界面后遇到问题。我的数据库包括ID,用户名,密码和电子邮件。如何从SQL中使用java检索会话中的数据
我已经创建了登录表单并且它正在工作。
而在html/jsp中,我使用这个<%=session.getAttribute("name")%>
来获得“欢迎回来USERNAME,您的电子邮件为NULL”。
我想获取用户邮件。
我的代码是在这里:
THERE IS FIRST FILE
------------------------------------------------------------------------------------
package com.promo4free.servlets;
import java.io.IOException;
import java.io.PrintWriter;
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 com.promo4free.dao.LoginDao;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String n = request.getParameter("username");
String p = request.getParameter("userpass");
HttpSession session = request.getSession(false);
if (session != null) session.setAttribute("name", n); // WORKING
if (LoginDao.validate(n, p)) {
RequestDispatcher rd = request.getRequestDispatcher("after_login_user_interface.jsp");
rd.forward(request, response);
} else {
out.print("<p style=\"color:red\">Sorry username or password error</p>");
RequestDispatcher rd = request.getRequestDispatcher("loginToPage.jsp");
rd.include(request, response);
}
out.close();
}
}
-----------------------------------------------------------------------------------------------------------
THERE IS SECOND FILE
-----------------------------------------------------------------------------------------------------------
package com.promo4free.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//working
public class LoginDao {
public static boolean validate(String name, String pass) {
boolean status = false;
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/";
String dbName = "ps";
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "root";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url + dbName, userName, password);
pst = conn.prepareStatement("SELECT * FROM members WHERE username=? AND password=?"); //working
System.out.println("SELECT * FROM members WHERE username=? AND password=?"); //working
pst.setString(1, name);
pst.setString(2, pass);
rs = pst.executeQuery();
status = rs.next();
} catch (Exception e) {
System.out.println(e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pst != null) {
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return status;
}
}
-----------------------------------------------------------------------------------------------------------
THERE IS SECOND FILE web.xml
-----------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.promo4free.servlets.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
我修改你的方法返回的电子邮件如果登录有效
package com.promo4free.dao;
import java.sql.*;
/**
* Created by Zexter on 09/02/2015.
*/
public class LoginDAO {
public static String validate(String name, String pass) {
boolean status = false;
String email="";
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/";
String dbName = "ps";
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "root";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url + dbName, userName, password);
pst = conn.prepareStatement("SELECT * FROM members WHERE username=? AND password=?"); //working
pst.setString(1, name);
pst.setString(2, pass);
rs = pst.executeQuery();
//status = rs.next();
if(rs.next()){
email=rs.getString("email");
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pst != null) {
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return email;
}
}
在Servelet的,你可以做以下
package com.promo4free.servlets;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Created by Zexter on 09/02/2015.
*/
@WebServlet(name = "Test",urlPatterns = "/path")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String n = request.getParameter("username");
String p = request.getParameter("userpass");
String email="";
email=LoginDAO.validate(n, p);
if (email.trim()!="" && email.length()>0) {
HttpSession session = request.getSession(true); // The session will be set only if there is a valid login
session.setAttribute("name", n);
session.setAttribute("email",email);
RequestDispatcher rd = request.getRequestDispatcher("after_login_user_interface.jsp");
rd.forward(request, response);
} else {
out.print("<p style=\"color:red\">Sorry username or password error</p>");
RequestDispatcher rd = request.getRequestDispatcher("loginToPage.jsp");
rd.include(request, response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
最后在JSp上,您可以尝试检查他是否已登录并检索信息。
<%
String email="",name="";
if(session.getAttribute("email")!=null && session.getAttribute("name")!=null){
email=session.getAttribute("email").toString();//Setting the session data to variable for reuse
name=session.getAttribute("name").toString();
}
%>
感谢您的帮助。这仍然不起作用。 String n = request.getParameter(“username”); \t \t String em = request.getParameter(“email”); \t \t \t \t HttpSession session = request.getSession(true); \t \t如果(会话!= NULL) \t \t { \t \t \t session.setAttribute( “名”,N); //工作 \t \t \t session.setAttribute(“email”,em); //不工作 \t \t} – 2015-02-09 08:57:16
修改过的方法有什么好运? – Zexter 2015-02-10 17:48:32
不,我从零删除和rewrited,现在工作:)顺便说一句..我寻找人开发像“addmefast.com”和“socialexchange.net” 我已经差不多完成了,但需要改进。 – 2015-02-10 19:14:46
创建一个类来表示你的系统的用户:
public class User{
String userName;
String emailAddress;
//...
}
更新你的DAO返回这个类的一个实例或NULL,如果用户不存在:
public static User validate(String name, String pass) {
//...
User user = null;
if(rs.next()){
user = new User();
user.setuserName(r.getString("userName");
//etc
}
//...
return user;
}
更新您的Servlet以在成功登录时在会话中添加用户:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ...
User user = LoginDao.validate(n, p);
if (user != null) {
RequestDispatcher rd = request.getRequestDispatcher("after_login_user_interface.jsp");
request.getSession().setAttribute("user", user);
rd.forward(request, response);
}
//...
}
输出的用户在你的JSP EL使用符号的属性:这里
Welcome back ${user.userName}, your email is ${user.emaiLAddress}.
我试图实现它,但没有任何消息。你可以执行代码吗?也许我做错了什么。 – 2015-02-09 09:16:07
邮政相关的代码,不要插入链接。 – 2015-02-08 11:31:36
感谢您的警告。现在正确 – 2015-02-08 11:48:24