Monday, October 29, 2012

Tomcat JSP MySQL Linux -- A Starting Kit

This is just to get you started if you are interested in the above configuration. I spent a lot of time exploring many forums for the errors encountered meanwhile which I try to dump here.

First you need following packages:

1. tomcat, tomcat-webapps, tomcat-admin-webapps -- try to get through yum or apt-get repositories.
2. mysql -- again try to do the same to get it

Start all the services:
service mysqld start
service httpd start
service tomcat start

To check if these things are working properly:

1. mysql:

mysql -hlocalhost -uuser -ppassword -e "show databases;"


Note: there is no space between "-u" and "user".

This should show the present databases created by the specified user.

Alternatively you can access the mysql from the browser through:

http://localhost/phpMyAdmin/

For this will need the package "phpmyadmin" installed. Make sure, each time you do some administrative changes, restart services.

2. tomcat:

You should be able to view the examples provided by the tomcat in the browser. To start with a new project, the place of interest will be "webapps" directory where you have to put your project root directory. Create a directory say "test" in "webapps" and in which create a small static html page say "test.html". Try to access the page from your browser with URL

http://localhost:8080/test/test.html

With that you are ready with your basic set up and should move forward with the mysql integration.
Now the basic page which accesses some table of a mysql database is shown below:
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.sql.*" %>

<form>
<head>
<title>Testing the structure of jsp, mysql and tomcat!</title>
<style>
* { font-size: 12px; font-family: Verdana }
</style>
</head>
<div>

<%

Statement stmt = null;
Connection con = null;
ResultSet resultSet = null;
String url = "jdbc:mysql://localhost/dbname?characterEncoding=UTF-8";
%>lang1
<h2>Display of data from Database</h2>
<table>
 <tr>
  <th>col1</th>
  <th>col2</th>
  <th>col3</th>
  <th>col4</th>
 </tr>
 <%
 try {
  String input = request.getParameter("lang1");
  Class.forName("com.mysql.jdbc.Driver");
  con = DriverManager.getConnection(url, "username", "passwd"); 

  stmt = con.createStatement();
  resultSet = stmt.executeQuery("select * from table where col1 = \""+input+"\"");
  while (resultSet.next()) {%>
   <tr>
    <td><%=resultSet.getString(1)%></td>
    <td><%=resultSet.getString(2)%></td>
    <td><%=resultSet.getFloat(3)%></td>
    <td><%=resultSet.getInt(4)%></td>

   </tr>
  <%}
 } catch (SQLException e) {
  e.printStackTrace(System.out);
 } 
 finally {
  try {stmt.close();} catch (Exception e) {
  }
  try {resultSet.close();} catch (Exception e) {
  }
  try {
   if (null != con) {con.close();}
  } catch (SQLException ex) {
   ex.printStackTrace(System.out);
  }
 }
 %>

</table>

</form>
</body>
</html>
In summary, the above code gets a string from the previous page some input in terms of form data. Tries to access the database and gets all the records where col1 value is equal to input and prints it. If you get some java-like errors saying that MySQL is unknown class then you should perform following operations.
The files of interest is:
/usr/share/tomcat/conf/catalina.policy

First you should grant the permission to access the mysql.
grant codeBase "file:${catalina.base}/webapps/test/-" {

     permission java.net.SocketPermission "localhost:8080", "connect";

};

And then make mysql known to tomcat by adding jar in classpath and for that, put mysql-connector-xyz.jar in tomcat_home/lib directory. Add its reference to the classpath by adding following line in tomcat_home/bin/catalina-tasks.xml between

<fileset file="${catalina.home}/lib/mysql-connector-xyz.jar"></fileset>

and restart tomcat service!

No comments:

Post a Comment