Showing posts with label database connectivity. Show all posts
Showing posts with label database connectivity. Show all posts

Monday, 28 November 2016

How to authenticate a user (form based login example) in Java and create a session.

Everyone is familiar now days from login. Login is required everywhere when you do some work on web related to you or your account. Many web applications register users and manage their accounts for the security purpose.
I don’t go in details about these. I only focus on how do we authenticate user and create a session for that user in Java. I assume that the reader has the basic knowledge of database and java database connectivity as well as starting a new project to develop.
So prerequisite of this example is:
  1. A working sever for handle java code(preferable Apache tomcat)
  2. A database with user table and has some user list with their passwords ( I have used MYSQL database).
  3. Knowledge of HTML to create login form.
Now first you have to create a login page using HTML, so that users can enter their username and password.
html.html
<form id="form1" method="post" action="login.jsp">
Username<input name="username" type="text" size="35" style="height:30px;" placeholder="Enter Your Username" required />
Password<input name="password" type="password" size="35" style="height:30px;" placeholder="Enter Your Password" required />
<input type="reset" name="Reset" value="Reset" />
<input type="submit" name="Submit2" value="Submit" />
</form>

To authenticate credentials entered by a user we require a java code (written in login.jsp file) to authenticate user from user list table of database.
login.jsp

//Get data from login page

String username=req.getParameter("username");
          String password=req.getParameter("password");
//Database connectivity
Connection conn = null;
          Statement stmt=null;
           String user="";
          String pass="";
          Class.forName("com.mysql.jdbc.Driver");
          conn =           DriverManager.getConnection("jdbc:mysql://localhost:3306/database_name","DB_username","DB_password");
          stmt = conn.createStatement();

//Execute SQL query to search in database to authenticate user
String sql="select username, password, type from users where        username='"+username+"' and password='"+password+"'"
ResultSet rs = stmt.executeQuery(sql);

//If user found in database store his details in variables
if(rs.next())
{
   user=rs.getString(1);
pass=rs.getString(2);
type=rs.getString(3);
}
//If user is valid than create a session and redirect him to his account page.
if(username.equals(user) && pass.equals(password) )
{
HttpSession session = reqest.getSession(true);
session.setAttribute("user", username);
response.sendRedirect("userhome.jsp");
}

//If user is not valid then redirect him to login page
 else
{
response.sendRedirect("login.jsp");
}
//Close database connection.
rs.close();
stmt.close();
conn.close();

The complete java code is
try
{
String username=req.getParameter("username");
String password=req.getParameter("password");
Connection conn = null;
 Statement stmt=null;
String user="";
String pass="";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/databasename","DB_user","DB_password");
stmt = conn.createStatement();
String sql="select username, password, type from users where username='"+username+"' and password='"+password+"'";
ResultSet rs = stmt.executeQuery(sql);
if(rs.next())
{
user=rs.getString(1);
pass=rs.getString(2);
 }
if(username.equals(user) && pass.equals(password) )
{
HttpSession session = request.getSession(true);
session.setAttribute("user", username);
response.sendRedirect("home.jsp");
}
else
{
response.sendRedirect("login.jsp");
}
rs.close();
stmt.close();
conn.close();
 }
catch(Exception e)
{
out.println(e);
 }

Sunday, 11 September 2016

MySQL database connectivity in JSP/Servlet

Database connectivity with Java require some steps to be followed. If you have not done database connectivity in Java previously then it will be difficult to connect to database only using coding.

To do database connectivity in Java with MySQL, we require connector- more specific JDBC driver.

You can download it from here. It a jar file name some like mysql-connector-java-5.1.39.jar.

To install/load this file for use refer to this documentation, or follow instruction given below.

To load this driver, you have to put it at proper location. If you are working on project, you should put it into lib directory of your project (If you are using any IDE like Netbeans or Eclipse, you can find lib directory in your project).

But if you are not working on any project or IDE. Then this file (mysql-connector-java-5.1.39.jar) should be pasted in folder your java location\Java\jdk1.8.0_77\jre\lib\ext directly.

Now we are ready to use MySQL database.

1. Now in JSP/Servlet program we have to import java.sql.* package to use database interfaces to connect with database.

We can import this in JSP using

                             <%@ page import="java.sql.*"%>

and in Servlet
                                   import java.sql.*;

2. Now we require to register the JDBC driver using code
       Class.forName("com.mysql.jdbc.Driver");

3. Open a connection using

Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/database","user","password");

4. Now we ready to execute query

stmt = con.createStatement();
String sql="select username, password, type from users where username='"+username+"' and password='"+password+"'";// where tname like '"+search+"'";
ResultSet rs = stmt.executeQuery(sql);

5. Extract data from result set

while(rs.next()){
                out.println(rs.getString(table column index or name)); //if data is string
                out.println(rs.getInt(table column index or name)); //if data is Integer
}

6. After-all close all connections

                        rs.close();
                        stmt.close();
                        con.close();

Complete servlet Example

// login servlet
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Login extends HttpServlet {
  
  public void doPost(HttpServletRequest req, HttpServletResponse res)
                               throws ServletException, IOException {
    res.setContentType("text/plain");
    PrintWriter out = res.getWriter();
Connection conn = null;
Statement stmt=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","user","password");
//db.dbConnect();
stmt = conn.createStatement();
String sql="select * from table_name";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
out.println(rs.getString(1));
        out.println(rs.getString(2));
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
out.println(e);
}
     }
}

 If you know JSP you can use same code in JSPs accordingly and vice-versa.

Change image source dynamically on hyperlink

 Changing image source dynamically using JQuery. Here in this example I have created there hyperlink and stored all images in the same folde...