关于jsp连接Oracle进行用户登录的方法文档总结:

来源:互联网 发布:国产windows平板电脑 编辑:程序博客网 时间:2024/06/03 08:13

关于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

第二步

前台登录界面:

<form action="MyServlet" method="post">

< !-使用post提交表单,并且进入名字为Myservlet的action -->

<table border="0">

<tr>

<td colspan="2" class="arinfo3" align="center">登录</td>

</tr>

<tr>

<td>用户名:</td>

<td><input name="u_no" size="15" class="f2_input"/></td>

</tr>

<tr>

<td>密码:</td>

<td><input type="password" name="u_pwd" size="15" class="f2_input"/></td>

</tr>

<tr>

<td><input class="btn" type="submit" value="登录"/></td> 

<td><a href="register.jsp" target="content">注册</a></td>

</tr>

</table>

<input type="hidden" name="action" value="login" />

</form>

通过from表单向服务器中已写好的MyServlet传递用户名以及密码的信息

Myservlet的方式为GETPOST方式,

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<String> result = DBUtil.checkLogin(u_no, u_pwd); //查询数据库

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,response);

}

else if(action.equals("logout")){//action为注销登陆

HttpSession session = request.getSession();

session.setAttribute("user"null);

request.getRequestDispatcher("login.jsp").forward(request,response);

}

else if(action.equals("gotoregister")){//action为注册

System.out.println("hahahahhh");

request.getRequestDispatcher("register.jsp").forward(request, response);

}

}

}

但是光有Servlet还是不行的,Web容器必须知道浏览器如何访问这个Servlet.,这个配置在Web.xml中。

代码:

  <servlet>

    <description></description>

    <display-name>MyServlet</display-name>

    <servlet-name>MyServlet</servlet-name>

    <servlet-class>wpf.MyServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>MyServlet</servlet-name>

    <url-pattern>/MyServlet</url-pattern>

  </servlet-mapping>

其中,<servlet-name>和<servlet-class>是必须的,<servlet-name>必须在web.xml中是必须的。

配置好servlet名称与类名后还需要配置Servlet的访问形式。<servlet-mapping>中的<url-pattern>就是配置该servlet的访问方式,<url-pattern>值前面加上的是web应用程序的路径

<url-pattern>中允许通配符“*”与“?”。

其中把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<String> checkLogin(String u_no,String u_pwd){//List 接口的大小可变数组的实现

ArrayList<String> result = new ArrayList<String>();

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;

}

原创粉丝点击