Sunday, October 2, 2011

Assignment Week - 10

- Complete Security Model of your web applications as per our defined guidelines,
- Integrate database in your applications

Database Used

MYSQL Database has been used (www.mysql.com)
MySQL J Connector for java (http://www.mysql.com/downloads/connector/j/)

Home Servlet Changes


package com.evs.objava33.class17;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.evs.objava33.class19.MySqlUserDao;
import com.evs.objava33.class19.User;
import com.evs.objava33.class19.UserDao;

/**
 * Servlet implementation class HomeServlet
 */
@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

private UserDao service = null;

/**
* @see HttpServlet#HttpServlet()
*/
public HomeServlet() {
super();
// TODO Auto-generated constructor stub
service = new MySqlUserDao();
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
User user = (User) request.getSession().getAttribute("user");
List<User> list = service.allUsers();
// if (user == null) {
// response.sendRedirect("LoginServlet?error=1");
// return;
// }
// Cookie[] cookie = request.getCookies() ;
response.addCookie(new Cookie("username", user.getUsername()));

PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">");
out.println("<title>My Application :: Home Page</title>");
out.println("</head>");
out.println("<body>");
out.println("Welcome user (" + user + ") <br />");
out.println("<table border=1 width=100%>");
out.println("<tr><td>Id</td><td>Name</td><td>Pass</td><td>&nbsp;</td></tr>");
for (User u : list) {
out.println("<tr><td>" + u.getUserid() + "</td><td>"
+ u.getUsername() + "</td><td>" + u.getUserpass()
+ "</td> <td> <a href=\"DeleteServlet?userid="
+ u.getUserid() + "\">Delete</a> "
+ "| <a href=\"AddUserServlet?userid=" + u.getUserid()
+ "\">Update</a> " + "</td>" + "</tr>");
}
out.println("</table>");
out.println("<a href=\"AddUserServlet\">Add User</a> | <a href=\"LogoutServlet\">Logout</a>");
out.println("</body>");
out.println("</html>");
response.setStatus(HttpServletResponse.SC_OK);
out.close();
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

Login Servlet Changes


package com.evs.objava33.class17;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.evs.objava33.class19.MySqlUserDao;
import com.evs.objava33.class19.User;
import com.evs.objava33.class19.UserDao;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

private String message = null;
private UserDao service = null;

/*
* (non-Javadoc)
*
* @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
*/
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
service = new MySqlUserDao();
}

/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (request.getParameter("error") != null) {
message = "Please login first ... ";
}
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">");
out.println("<title>My Application :: Login Page</title>");
out.println("</head>");
out.println("<body>");
if (message != null) {
out.println("<font color=RED>" + message + "</font>");
message = null;
}
out.println("<form action=\"LoginServlet\" method=\"POST\">");
Cookie[] cookie = request.getCookies() ;
String username = "" ;
for ( Cookie c : cookie ) {
if ( "username".equals(c.getName()) ) {
username = c.getValue() ;
break ;
}
}
out.println("Login: <input type=\"text\" name=\"txtLogin\" value=\""+username+"\" /> <br />");
out.println("Password: <input type=\"password\" name=\"txtPass\" /> <br />");
out.println("<input type=\"submit\" name=\"btnSubmit\" value=\"Login\" /> &nbsp;");
out.println("<input type=\"reset\" name=\"btnReset\" value=\"Cancel\" />");
out.println("</form>");
out.println("</body>");
out.println("</html>");
out.close();
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String loginName = request.getParameter("txtLogin");
String loginPass = request.getParameter("txtPass");

if (null != loginName && null != loginPass
&& loginName.trim().length() > 0
&& loginPass.trim().length() > 0) {
// if ("admin".equals(loginName) && "admin".equals(loginPass)) {
User user = service.validateUser(loginName, loginPass);
if (user != null) {
// Success; Validated user
request.getSession().setAttribute("user", user);
response.sendRedirect("HomeServlet");
return;
} else {
message = "Invalid combination";
}
} else {
message = "Please provide username & password ";
}

// Failure
doGet(request, response);
}
}

Delete Servlet


package com.evs.objava33.class20;

import java.io.IOException;
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 com.evs.objava33.class19.MySqlUserDao;
import com.evs.objava33.class19.UserDao;

/**
 * Servlet implementation class DeleteServlet
 */
@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private UserDao service = null;

/**
* @see HttpServlet#HttpServlet()
*/
public DeleteServlet() {
super();
service = new MySqlUserDao();
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String userid = request.getParameter("userid");
service.deleteUser(userid);
response.sendRedirect("HomeServlet");
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

Add User Servlet


package com.evs.objava33.class20;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.evs.objava33.class19.MySqlUserDao;
import com.evs.objava33.class19.User;
import com.evs.objava33.class19.UserDao;

/**
 * Servlet implementation class AddUserServlet
 */
@WebServlet("/AddUserServlet")
public class AddUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

private UserDao service = null;

/**
* @see HttpServlet#HttpServlet()
*/
public AddUserServlet() {
super();
// TODO Auto-generated constructor stub
service = new MySqlUserDao();
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">");
out.println("<title>My Application :: Login Page</title>");
out.println("</head>");
out.println("<body>");
out.println("<form action=\"AddUserServlet\" method=\"POST\">");
String userid = request.getParameter("userid");
User user = null;
if (userid != null) {
out.println("UserId : " + userid + "<br />");
user = service.getUser(userid);
}
out.println("<input type=\"hidden\" name=\"userid\" value=\""
+ (userid != null ? userid : "") + "\" >");
out.println("Username: <input type=\"text\" name=\"txtUser\" value=\""
+ (user != null ? user.getUsername() : "") + "\" /> <br />");
out.println("Password: <input type=\"text\" name=\"txtPass\" value=\""
+ (user != null ? user.getUserpass() : "") + "\" /> <br />");
out.println("<input type=\"submit\" name=\"btnSubmit\" value=\""
+ (user != null ? "Update" : "Add") + "\" /> &nbsp;");
out.println("<input type=\"reset\" name=\"btnReset\" value=\"Cancel\" />");
out.println("</form>");
out.println("<a href=\"HomeServlet\">Home</a>");
out.println("</body>");
out.println("</html>");
out.close();
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String userid = request.getParameter("userid");
String username = request.getParameter("txtUser");
String userpass = request.getParameter("txtPass");
boolean success = false;
if (userid != null && userid.trim().length() > 0) {
// edit
success = service.updateUser(userid, username, userpass);
request.getSession().setAttribute("message",
"User updated successfully");
} else {
success = service.addUser(username, userpass);
request.getSession().setAttribute("message",
"User updated successfully");
}

if (success) {
response.sendRedirect("HomeServlet");
}
request.getSession().setAttribute("message", "User operation failed ");
doGet(request, response);
}

}

MySQL User DAO


package com.evs.objava33.class19;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MySqlUserDao extends Database implements UserDao {

public User validateUser(String name, String pass) {
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
con = getConnection();
stmt = con.prepareStatement(VALIDATE_USER);
stmt.setString(1, name);
stmt.setString(2, pass);
rs = stmt.executeQuery();
if (rs.next()) {
return new User(rs.getLong(1), rs.getString(2), rs.getString(3));
}
} catch (SQLException q) {
q.printStackTrace();
} finally {
returnResources(rs, stmt, con);
}
return null;
}

public User getUser(String userid) {
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
con = getConnection();
stmt = con.prepareStatement(ALL_USER + " WHERE userid=?");
stmt.setString(1, userid);
rs = stmt.executeQuery();
if (rs.next()) {
return new User(rs.getLong(1), rs.getString(2), rs.getString(3));
}
} catch (SQLException q) {
q.printStackTrace();
} finally {
returnResources(rs, stmt, con);
}
return null;
}

public List<User> allUsers() {
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
List<User> list = null;
try {
con = getConnection();
stmt = con.prepareStatement(ALL_USER);
rs = stmt.executeQuery();
list = new ArrayList<User>();
while (rs.next()) {
list.add(new User(rs.getLong(1), rs.getString(2), rs
.getString(3)));
}
} catch (SQLException q) {
q.printStackTrace();
} finally {
returnResources(rs, stmt, con);
}
return list;
}

@Override
public boolean addUser(String username, String userpass) {
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
con = getConnection();
stmt = con.prepareStatement(ADD_USER);
stmt.setString(1, username);
stmt.setString(2, userpass);
int ret = stmt.executeUpdate();
return ret > 0;
} catch (SQLException q) {
q.printStackTrace();
} finally {
returnResources(rs, stmt, con);
}
return false;
}

/*
* (non-Javadoc)
*
* @see com.evs.objava33.class19.UserDao#deleteUser(java.lang.String)
*/
@Override
public void deleteUser(String userid) {
executeQuery("DELETE FROM user where userid=" + userid);
}

public boolean updateUser(String userid, String username, String userpass) {
return executeQuery("UPDATE user SET username='" + username
+ "', userpass='" + userpass + "' WHERE userid='" + userid
+ "'") > 0;
}
}

User


package com.evs.objava33.class19;

public class User {

private Long userid;
private String username;
private String userpass;

public User() {

}

public User(Long userid, String username, String userpass) {
this.userid = userid;
this.username = username;
this.userpass = userpass;
}

/**
* @return the userid
*/
public Long getUserid() {
return userid;
}

/**
* @param userid
*            the userid to set
*/
public void setUserid(Long userid) {
this.userid = userid;
}

/**
* @return the username
*/
public String getUsername() {
return username;
}

/**
* @param username
*            the username to set
*/
public void setUsername(String username) {
this.username = username;
}

/**
* @return the userpass
*/
public String getUserpass() {
return userpass;
}

/**
* @param userpass
*            the userpass to set
*/
public void setUserpass(String userpass) {
this.userpass = userpass;
}

/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "User [userid=" + userid + ", username=" + username
+ ", userpass=" + userpass + "]";
}
}

User Dao


package com.evs.objava33.class19;

import java.util.List;

public interface UserDao {

public String ALL_USER = "SELECT userid, username, userpass FROM user";
public String VALIDATE_USER = ALL_USER + " WHERE username=? and userpass=?";
public String ADD_USER = "INSERT INTO user (username, userpass) values (?,?)";

public User validateUser(String name, String pass);

public List<User> allUsers();

public boolean addUser(String username, String userpass);

public void deleteUser(String userid);

public boolean updateUser(String userid, String username, String userpass);

public User getUser(String userid);
}

Database


package com.evs.objava33.class19;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Database {

public Connection getConnection() {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/objava33", "root", "password");
} catch (Exception e) {
e.printStackTrace();
}
return con;
}

public void returnResources(ResultSet rs, Statement stmt, Connection con) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public int executeQuery(String query) {
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
con = getConnection();
stmt = con.createStatement();
return stmt.executeUpdate(query);
} catch (SQLException q) {
q.printStackTrace();
} finally {
returnResources(rs, stmt, con);
}
return 0;
}

}

JDBC Driver



JDBC Driver Types


JDBC drivers are divided into four types or levels. The different types of jdbc drivers are:
Type 1: JDBC-ODBC Bridge driver (Bridge)
Type 2: Native-API/partly Java driver (Native)
Type 3: AllJava/Net-protocol driver (Middleware)
Type 4: All Java/Native-protocol driver (Pure)


4 types of jdbc drivers
 are elaborated in detail as shown below:


Type 1 JDBC Driver

JDBC-ODBC Bridge driver
The Type 1 driver translates all JDBC calls into ODBC calls and sends them to the ODBC driver. ODBC is a generic API. The JDBC-ODBC Bridge driver is recommended only for experimental use or when no other alternative is available.



Type 1: JDBC-ODBC Bridge
Advantage
The JDBC-ODBC Bridge allows access to almost any database, since the database's ODBC drivers are already available.
Disadvantages
1. Since the Bridge driver is not written fully in Java, Type 1 drivers are not portable.
2. A performance issue is seen as a JDBC call goes through the bridge to the ODBC driver, then to the database, and this applies even in the reverse process. They are the slowest of all driver types.
3. The client system requires the ODBC Installation to use the driver.
4. Not good for the Web.


Type 2 JDBC Driver

Native-API/partly Java driver
The distinctive characteristic of type 2 jdbc drivers are that Type 2 drivers convert JDBC calls into database-specific calls i.e. this driver is specific to a particular database. Some distinctive characteristic of type 2 jdbc drivers are shown below. Example: Oracle will have oracle native api.



Type 2: Native api/ Partly Java Driver
Advantage
The distinctive characteristic of type 2 jdbc drivers are that they are typically offer better performance than the JDBC-ODBC Bridge as the layers of communication (tiers) are less than that of Type
1 and also it uses Native api which is Database specific.
Disadvantage
1. Native API must be installed in the Client System and hence type 2 drivers cannot be used for the Internet.
2. Like Type 1 drivers, it’s not written in Java Language which forms a portability issue.
3. If we change the Database we have to change the native api as it is specific to a database
4. Mostly obsolete now
5. Usually not thread safe.

Type 3 JDBC Driver

All Java/Net-protocol driver
Type 3 database requests are passed through the network to the middle-tier server. The middle-tier then translates the request to the database. If the middle-tier server can in turn use Type1, Type 2 or Type 4 drivers.



Type 3: All Java/ Net-Protocol Driver
Advantage
1. This driver is server-based, so there is no need for any vendor database library to be present on client machines.
2. This driver is fully written in Java and hence Portable. It is suitable for the web.
3. There are many opportunities to optimize portability, performance, and scalability.
4. The net protocol can be designed to make the client JDBC driver very small and fast to load.
5. The type 3 driver typically provides support for features such as caching (connections, query results, and so on), load balancing, and advanced
system administration such as logging and auditing.
6. This driver is very flexible allows access to multiple databases using one driver.
7. They are the most efficient amongst all driver types.

Disadvantage
It requires another server application to install and maintain. Traversing the recordset may take longer, since the data comes through the backend server.

Type 4 JDBC Driver

Native-protocol/all-Java driver
The Type 4 uses java networking libraries to communicate directly with the database server.


Type 4: Native-protocol/all-Java driver
Advantage
1. The major benefit of using a type 4 jdbc drivers are that they are completely written in Java to achieve platform independence and eliminate deployment administration issues. It is most suitable for the web.
2. Number of translation layers is very less i.e. type 4 JDBC drivers don't have to translate database requests to ODBC or a native connectivity interface or to pass the request on to another server, performance is typically quite good.
3. You don’t need to install special software on the client or server. Further, these drivers can be downloaded dynamically.
Disadvantage

With type 4 drivers, the user needs a different driver for each database.

Tuesday, September 20, 2011

Assignment - Week 9

Start working on J2EE (Web) project with initial screens till login and home page. Design elements & user interface should be visible by Sunday 25-Sep-2011.

Security Filter


package com.evs.objava33.class18;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet Filter implementation class SecurityFilter
 */
@WebFilter(filterName = "SecurityFilter", urlPatterns = "/*")
public class SecurityFilter implements Filter {

/**
* Default constructor.
*/
public SecurityFilter() {
// TODO Auto-generated constructor stub
}

/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}

/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;
String url = req.getRequestURI();
if (url.indexOf("LoginServlet") == -1) {
String user = (String) req.getSession().getAttribute("user");
if (user == null) {
HttpServletResponse resp = (HttpServletResponse) response;
resp.sendRedirect("LoginServlet?error=1");
return;
}
}

// pass the request along the filter chain
chain.doFilter(request, response);
}

/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}

}

Logout Servlet


package com.evs.objava33.class17;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LogoutServlet
 */
@WebServlet("/LogoutServlet")
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public LogoutServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.getSession().removeAttribute("user");
response.sendRedirect("LoginServlet");
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

Home Servlet


package com.evs.objava33.class17;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HomeServlet
 */
@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public HomeServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String user = (String) request.getSession().getAttribute("user");
// if (user == null) {
// response.sendRedirect("LoginServlet?error=1");
// return;
// }
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">");
out.println("<title>My Application :: Home Page</title>");
out.println("</head>");
out.println("<body>");
out.println("Welcome user (" + user + ") <br />");
out.println("<a href=\"LogoutServlet\">Logout</a>");
out.println("</body>");
out.println("</html>");
out.close();
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

Login Servlet


package com.evs.objava33.class17;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

private String message = null;

/*
* (non-Javadoc)
*
* @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
*/
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);

String paramValue = getInitParameter("init-param-name");
String contextParam = getServletContext().getInitParameter(
"context-param");
}

/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (request.getParameter("error") != null) {
message = "Please login first ... ";
}
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">");
out.println("<title>My Application :: Login Page</title>");
out.println("</head>");
out.println("<body>");
if (message != null) {
out.println("<font color=RED>" + message + "</font>");
message = null;
}
out.println("<form action=\"LoginServlet\" method=\"POST\">");
out.println("Login: <input type=\"text\" name=\"txtLogin\" /> <br />");
out.println("Password: <input type=\"password\" name=\"txtPass\" /> <br />");
out.println("<input type=\"submit\" name=\"btnSubmit\" value=\"Login\" /> &nbsp;");
out.println("<input type=\"reset\" name=\"btnReset\" value=\"Cancel\" />");
out.println("</form>");
out.println("</body>");
out.println("</html>");
out.close();
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String loginName = request.getParameter("txtLogin");
String loginPass = request.getParameter("txtPass");

if (null != loginName && null != loginPass
&& loginName.trim().length() > 0
&& loginPass.trim().length() > 0) {
if ("admin".equals(loginName) && "admin".equals(loginPass)) {
// Success; Validated user
request.getSession().setAttribute("user", loginName);
response.sendRedirect("HomeServlet");
return;
} else {
message = "Invalid combination";
}
} else {
message = "Please provide username & password ";
}

// Failure
doGet(request, response);
}

}

Sunday, August 28, 2011

Assignment - Week 8

Develop a simple web application with simple layout of web application & some HTML skills. Your final project's layout will be similar.

Some links for HTML Learners

http://www.w3schools.com/html/default.asp
http://www.htmlcodetutorial.com/
http://www.tizag.com/htmlT/
http://htmldog.com/guides/htmlbeginner/
http://www.htmltutorials.ca/
http://www.quackit.com/html/tutorial/
http://www.w3.org/MarkUp/Guide/ [Quick Guide]

First Servlet - Using Tomcat 7


package com.evs.objava33.class16;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public FirstServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.getOutputStream();
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">");
out.println("<title>First HTML Page</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>This is first Servlet Page: " + new Date() + "</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

Web Application Deployment Descriptor


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>objava33web</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>First JSP Page</title>
</head>
<body>
<h1>
This is first JSP Page
<%=new java.util.Date()%></h1>
</body>
</html>

index.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>First HTML Page</title>
</head>
<body>
<h1>This is first HTML Page</h1>
</body>
</html>

Application Server Architecture

Java Enterprise Edition

The Java 2 Platform, Enterprise Edition (J2EE) defines the standard for developing multitier enterprise applications. The J2EE platform simplifies enterprise applications by basing them on standardized, modular components, by providing a complete set of services to those components, and by handling many details of application behavior automatically, without complex programming.

The J2EE platform takes advantage of many features of the Java 2 Platform, Standard Edition (J2SE), such as "Write Once, Run Anywhere" portability, JDBC API for database access, CORBA technology for interaction with existing enterprise resources, and a security model that protects data even in internet applications. Building on this base, the Java 2 Platform, Enterprise Edition adds full support for Enterprise JavaBeans components, Java Servlets API, JavaServer Pages and XML technology. The J2EE standard includes complete specifications and compliance tests to ensure portability of applications across the wide range of existing enterprise systems capable of supporting the J2EE platform. In addition, the J2EE specification now ensures Web services interoperability through support for the WS-I Basic Profile.

Monday, August 22, 2011

Assignment - Week 7

Continue Assignment of Week 6, and implement it as a client server address book. Additional attribute is to create a simple client; from which user can add/update/delete/view all address book entries. On server, there should be an audit of last added/update/delete/view entry, as who did what.

Note: Core Projects has been assigned in addition to this. Dead Line for Core Project is: 10-Sept-2011

Test Bank


package com.evs.objava33.class14;

import java.io.RandomAccessFile;
import java.util.Random;

public class TestBank {

private static double initialBalance = 10000;
private static int noOfTrans = 100;
private static double totalCredit = 0.0;
private static double totalDebit = 0.0;

public static void main(String[] args) {
Bank bank = new Bank();
Account account = new Account(1111, initialBalance);

Clerk c1 = new Clerk(bank);
Clerk c2 = new Clerk(bank);

Thread t1 = new Thread(c1);
Thread t2 = new Thread(c2);
t1.start();
t2.start();

Random rand = new Random();
Double amount = 0.0;
Transaction trans = null;

for (int i = 0; i < noOfTrans; i++) {
// Credit
amount = 50.0 + rand.nextInt(50);
trans = new Transaction(account, TransType.CREDIT, amount);
c1.doTransaction(trans);
totalCredit += amount;

// Debit
amount = 30.0 + rand.nextInt(30);
trans = new Transaction(account, TransType.DEBIT, amount);
c2.doTransaction(trans);
totalDebit += amount;
}

while (c1.isBusy() || c2.isBusy()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

System.out.println("Starting Balance: " + initialBalance);
System.out.println("Total Debits: " + totalDebit);
System.out.println("Total Credits: " + totalCredit);
System.out.println("Actual Balance: "
+ (initialBalance - totalDebit + totalCredit));
System.out.println("Account Balance: " + account.getBalance());

System.exit(0);
}
}

Clerk


package com.evs.objava33.class14;

public class Clerk implements Runnable {

private Bank bank;
private Transaction transaction;

public Clerk(Bank bank) {
this.bank = bank;
}

public void run() {
while (true) {
while (isBusy() == false) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
bank.doTransaction(transaction);
transaction = null;
}
}

public void doTransaction(Transaction transaction) {
while (isBusy()) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.transaction = transaction;
}

public boolean isBusy() {
return transaction != null;
}

}

Bank


package com.evs.objava33.class14;

public class Bank {

public synchronized void doTransaction(Transaction transaction) {
switch (transaction.getTransType()) {
case DEBIT:
// synchronized (transaction.getAccount()) {
double balance = transaction.getAccount().getBalance();
balance -= transaction.getAmount();
transaction.getAccount().setBalance(balance);
// }
break;
case CREDIT:
// synchronized (this) {
balance = transaction.getAccount().getBalance();
balance += transaction.getAmount();
transaction.getAccount().setBalance(balance);
// }
break;
default:
System.out.println("Unknown Transaction Type ... ");
break;
}

}
}

Transaction


package com.evs.objava33.class14;

public class Transaction {

private Account account;
private TransType transType;
private Double amount;

public Transaction(Account account, TransType transType, Double amount) {
this.account = account;
this.transType = transType;
this.amount = amount;
}

/**
* @return the account
*/
public Account getAccount() {
return account;
}

/**
* @param account
*            the account to set
*/
public void setAccount(Account account) {
this.account = account;
}

/**
* @return the transType
*/
public TransType getTransType() {
return transType;
}

/**
* @param transType
*            the transType to set
*/
public void setTransType(TransType transType) {
this.transType = transType;
}

/**
* @return the amount
*/
public Double getAmount() {
return amount;
}

/**
* @param amount
*            the amount to set
*/
public void setAmount(Double amount) {
this.amount = amount;
}

public String toString() {
return "Transaction [account=" + account + ", transType=" + transType
+ ", amount=" + amount + "]";
}
}