关于jsp 连接Oracle 进行用户登录的方法文档总结:
注:前面的部分为我在自己学习过程中分步记录的,在文档最后会再给出完成源码
一、数据库
数据库表的创建
表非常简单,SQL 语句:
create table user (
u_no number (10) not null , u_pwd varchar2(16) not null , u_name varchar2(8), u_email varchar2(18), u_state varchar2(18), h_id number (10) , primary key (u_no ) );
因为只有用户登录功能,只建一个表就好了。
二、JSP 端的开发:
第一步:新建一个Web project 。 第二步:
前台登录界面:
通过from表单向服务器中已写好的MyServlet传递用户名以及密码的信息
Myservlet的方式为GET与POST方式,
GET方式提交的网址不能超过256个字符,如果要提交大量的文本,需要使用POST方式,POST 提交数据时,数据不在浏览器地址中显示。
其中应用到了Servlet中的HttpServlet类,
即
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
和
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
用来处理Http请求和生成Http响应。
Myservlet的代码如下:
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MyServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyServlet()
{
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding(CHAR_ENCODING); //将客户端
请求的编码设置为CHAR_ENCODING(GBK)编码
//**************
// PrintWriter pw;
// HttpSession hs;
// int time = 10;
//*************
String action = (String)request.getParameter("action"); //获取action
System.out.println("MyServlet===== action:"+action);
if(action.equals("login")){ //action为登录信息
String u_no = (String)request.getParameter("u_no");
//使用HttpServletRequest接口的getParameter()读取用户名参数
String u_pwd = (String)request.getParameter("u_pwd");
//使用HttpServletRequest接口的getParameter()读取密码参数
ArrayList
//查询数据库
if(result.size()>1) //如果列表长度大于1,表示登录成功
{
HttpSession session = request.getSession();
String no = result.get(0); //获得用户的号码
String name = new
String(result.get(1).getBytes("ISO-8859-1"),CHAR_ENCODING); //获得用户的昵称
String email = result.get(2); //获取用户电子邮件
String state = new
String(result.get(3).getBytes("ISO-8859-1"),CHAR_ENCODING); //获取用户状态
String hid = result.get(4); //获取用户头像
User user = new User(no, name, email, state, hid);
session.setAttribute("user", user); //将用户id加入Session
}
else
{
request.setAttribute("loginResult", result.get(0));
}
request.getRequestDispatcher("login.jsp").forward(request, response);
}
else if(action.equals("register"))
{
//action为注册信息
String u_no = (String)request.getParameter("u_no");
String u_name = (String)request.getParameter("u_name");
String u_pwd = (String)request.getParameter("u_pwd");
String u_email = (String)request.getParameter("u_email");
String u_state = (String)request.getParameter("u_state");
String result = DBUtil.registerUser(u_no,u_name, u_pwd,
u_email, u_state,"0");
if(!result.equals(REGISTER_FAIL)){ //注册成功
User user = new User(result, u_name, u_email, u_state, "0");
HttpSession session = request.getSession();
session.setAttribute("user", user);
}
request.setAttribute("result", result);
request.getRequestDispatcher("register.jsp").forward(request,resp onse);
}
else if(action.equals("logout")){ //action为注销登陆
HttpSession session = request.getSession();
session.setAttribute("user", null);
request.getRequestDispatcher("login.jsp").forward(request,respons e);
}
else if(action.equals("gotoregister")){ //action为注册System.out.println("hahahahhh");
request.getRequestDispatcher("register.jsp").forward(request, response);
}
}
}
但是光有Servlet还是不行的,Web容器必须知道浏览器如何访问这个Servlet.,这个配置在Web.xml中。
代码:
其中,
配置好servlet名称与类名后还需要配置Servlet的访问形式。
其中把checkLogin的方法与写数据库连接的方法写在了一起,这里使用的是JDBC进行Oracle连接,方法名为DButil
方法如下:
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public static Connection getConnection(){
Connection con = null;
//使用JDBC直接访问数据库
try{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//为指定的数据库进行连接
con =
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl"," scott","tiger");
}
catch(Exception e){
try{
con.close();
}catch(Exception ea){
ea.printStackTrace();
}
e.printStackTrace();
}
return con;
}
//验证用户名密码的方法:
public static ArrayList
ArrayList
Connection con = null; //声明获取数据库连接
PreparedStatement ps = null;//声明Statement对象,将SQL语句存入ps变量中
ResultSet rs = null; //声明ResultSet对象
try{
con = getConnection(); //获取数据库连接
if(con == null){ //判断数据库连接对象是否
result.add(CONNECTION_OUT); //CONNECTION_OUT为另一方法中的String对象
return result;
}
ps = con.prepareStatement("select
u_no,u_name,u_email,u_state,h_id from userlist where u_no=? and
u_pwd=?");
ps.setString(1, u_no); //设置预编译语句的参数
ps.setString(2, u_pwd); //设置预编译语句的参数
rs = ps.executeQuery();
if(rs.next()) //判断结果集rs是否有记录,并且将指针后移一位
{ //判断结果集是否为空
for(int i=1;i<=5;i++)
{
result.add(rs.getString(i)); //将结果集中数据存放到ArrayList中
}
}
else
{ //如果数据库查无此人
result.add(LOGIN_FAIL); //返回登录出错信息
}
}catch(Exception e){
e.printStackTrace();
}
finally{
try{
if(rs != null){
rs.close();
rs = null;
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(ps != null){
ps.close();
ps = null;
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(con != null){
con.close();
con = null;
}
}catch(Exception e){
e.printStackTrace();
}
}
return result;
}
JSP JavaBean Servlet实现用户登录和注册 1 数据库: create database student; use student; create table user( id int primary key auto_increment, user varchar(50) not null, pwd varchar(50) not null, name varchar(50) not null, *** varchar(50) not null, age int(50) not null ); 2 index.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() path "/"; %>