如何用jsp与oracle数据库实现用户登录功能
用jsp与oracle数据库实现用户登录功能,在jsp界面用户输入用户名和密码,提交到servlet中与数据库中的用户名和密码进行比较成功就提示登录成功否则提示登录失败请重新登录。
[解决办法]
<form action="dologin" method="post" name="frm">
用户名: <input type="text" name="username" id="username">
<br/>
密码:<input type="password" name="userpwd" id="userpwd">
<br/>
<input type="submit" name="subbtn"value="登录">
<input type="reset" name="rebtn"value="取消">
</form>
servlet:
// 设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 获取参数
String username = request.getParameter("username");
String userpwd = request.getParameter("userpwd");
// 输出流
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(true);
//
UserDao userdao = new UserDao();
User user = null;
try {
user = userdao.getUser(username);
} catch (Exception e1) {
e1.printStackTrace();
}
// 登录判断
if(!(user== null) &&(user.getPassword().equals(userpwd))){
// 存放到session中
session.setAttribute("user", user);
// 重定向
response.sendRedirect("index.jsp");
}
else{
// 登录失败提示
out.print("<script>alert('登录失败,请重新登录!!');window.location.href='login.jsp';</script>");
}
}
[解决办法]
jsp页面主要代码:
[code=Java]
<form action= "login.action " method= "post ">
用户名: <input type= "text " name= "username "/> </br>
密码: <input type= "password " name= "password "/> </br>
<input type= "submit " value= "提交 "/>
</form>
[/code]
Servlet页面源代码:
[code=Java]
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType( "text/html;charset=utf-8 ");
request.setCharacterEncoding( "utf-8 "); //解决jsp页面传值到servlet的中文乱码问题
String uri = request.getRequestURI();
String action = uri.substring(uri.lastIndexOf( "/ "),uri.lastIndexOf( ". "));
if(action.equals( "/login ")){
String username = request.getParameter( "username ");
String password = request.getParameter( "password ");
if(username.equals( "XXX ") && password.equals( "YYY ")){
response.sendRedirect( "success.jsp ");
}else{
response.sendRedirect( "fail.jsp ");
}
}
}
}
[/code]
楼主,只需要运用简单的sql语句查询数据库得到用户名XXX和对应的密码YYY,就可以了
succes.jsp和fail.jsp自己完善,一句话的事。
[解决办法]
连接数据库的工具类
package com.lan.tools;
import java.sql.*;
import java.util.Properties;
import org.omg.CORBA.portable.InputStream;
public class DButil {
private static Connection ct = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
private static String driverName = "";
private static String username = "";
private static String password = "";
private static String url = null;
//加载驱动,只执行一次
static{
try {
java.util.Properties properties = new Properties();
java.io.InputStream inputStream = DButil.class.getClassLoader()
.getResourceAsStream("com/lan/file/dbinfo.properties");
properties.load(inputStream);
driverName = properties.getProperty("driver");
username = properties.getProperty("username");
password = properties.getProperty("password");
url = properties.getProperty("url");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(-1);
}
}
public static Connection getCon()
{
try {
Class.forName(driverName);
ct = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ct;
}
public static void Close(ResultSet rs,PreparedStatement ps,Connection ct)
{
if(rs!=null)
{
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs = null;
}
if(ps!=null)
{
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ps = null;
}
if(ct!=null)
{
try {
ct.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ct = null;
}
}
}
public class sqlHelper {
private Connection ct = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
public ArrayList executeQuery(String sql, String paras[])
{
ArrayList al = new ArrayList();
try {
ct = DButil.getCon();
ps = ct.prepareStatement(sql);
for(int i = 0; i < paras.length; i++)
{
ps.setString(i+1, paras[i]);
}
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnNum = rsmd.getColumnCount();
while(rs.next())
{
Object objects[] = new Object[columnNum];
for(int i = 0; i< objects.length; i ++)
{
objects[i] = rs.getObject(i+1);
}
al.add(objects);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
DButil.Close(rs, ps, ct);
}
return al;
}
}
用户的UserService
public class UserService {
public User getUser(String userId)
{
User user = new User();
String sql = "select * from user2 where userId="+userId;
String paras[] = {};
sqlHelper sqlhelper = new sqlHelper();
ArrayList al = new ArrayList();
al = sqlhelper.executeQuery(sql, paras);
if(al.size()==1)
{
Object object[] = (Object[])al.get(0);
user.setUserId(userId);
user.setUserName(object[1].toString());
user.setUserPassword(object[2].toString());
user.setUserMail(object[3].toString());
user.setGrade(object[4].toString());
}
return user;
}
public boolean checkLogin(String userId, String userPassword)
{
String sql="select * from user2 where userId = ? and userPassword=?";
String paras[] = {userId,userPassword};
sqlHelper sqlhelper = new sqlHelper();
ArrayList al= new ArrayList();
al = sqlhelper.executeQuery(sql, paras);
//如果得到的结果不止是一个,则要么系统有问题,要么用户有问题
if(al.size()==1)
{
return true;
}else
{
return false;
}
}
}
loginService
public class loginControlServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
if (request.getSession().getAttribute("user") != null)
{
request.getRequestDispatcher("/WEB-INF/mainView.jsp").forward(
request, response);
} else {
// 得到上个页面穿过来的数据
String userId = request.getParameter("userId");
String userPassword = request.getParameter("userPassword");
String isKeep = request.getParameter("Iskeep");
System.out.println(userId + " " + userPassword);
// 用户Id是一直都保存的
Cookie cookie1 = new Cookie("userId", userId);
cookie1.setMaxAge(7 * 24 * 3600);
response.addCookie(cookie1);
// 判断用户密码是否要保存
if (isKeep != null && isKeep.equals("keep")) {
Cookie cookie2 = new Cookie("userPassword", userPassword);
cookie2.setMaxAge(7 * 24 * 3600);
response.addCookie(cookie2);
}
User user = new User();
// 把用户的用户名显示
UserService userService = new UserService();
// 判断用户名和密码是否正确
if (userService.checkLogin(userId, userPassword)) {
//封装得到的用户名和密码
user = userService.getUser(userId);
request.getSession().setAttribute("user", user);
// 如果验证成功,则登录到主页面,
request.getRequestDispatcher("/WEB-INF/mainView.jsp").forward(
request, response);
} else {
// 非法用户,则跳回到登录页面
request.setAttribute("error", "用户名或者密码错误!!!");
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(
request, response);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}