Servlets and JDBC Servlets A form The HTML
Servlets and JDBC
Servlets
A form
The HTML source <html> <head> <title>Chapter 1</title> </head> <body><font size="4"> <center>Please enter your name and password then press start <form method="GET" action="http: //localhost: 8080/servlet/Get. Demo" > Name: <input name="uname" value="" type="text" size="20"> Password: <input name="userpw" value="" type="password" size=10> <input value="Start" type="submit" > </form> </center> <hr> </body> </html>
import java. io. *; import java. net. *; A servlet import javax. servlet. *; import javax. servlet. http. *; public class Get. Demo extends Http. Servlet { protected void process. Request(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { response. set. Content. Type("text/html"); Print. Writer out = response. get. Writer(); String username = request. get. Parameter("uname"); String password = request. get. Parameter("userpw");
out. println("<HTML>"); out. println("<HEAD><TITLE>Get. Demo Output</TITLE></HEAD>"); out. println("<BODY>"); out. println("Hello " + username + " "); out. println("Your password was: " + password + " "); out. println("</BODY>"); out. println("</HTML>"); out. close(); } protected void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { process. Request(request, response); } protected void do. Post(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { process. Request(request, response); } public String get. Servlet. Info() { return "Short description"; } }
Servlet Container You need a servlet container for this. E. g. Apache Tomcat. Download the preconfigured Apache Tomcat from the course website. Unzip n Will create two directories, "apache-tomcat-6. 0. 18" and "development" Starting/Stopping Tomcat n n If you are working on Windows, open file apache-tomcat-6. 0. 18binstartup. bat and modify line: set JAVA_HOME=C: Program FilesJavajdk 1. 5. 0_09 to reflect your local path of java jdk. (Do the same for the shutdown. bat) If you are working on the lab machines (Linux) execute first chmod +x apache-tomcat-6. 0. 18/bin/*. sh
Servlet Container n n Then start Apache Tomcat by double clicking on apache-tomcat-6. 0. 18binstartup. bat (In Windows) or execute apache-tomcat-6. 0. 18/bin/startup. sh (in Linux) To stop Tomcat execute the shutdown. bat in Windows, shutdown. sh in Linux.
Servlet Container Your HTML files should go under: apache-tomcat-6. 0. 18/webapps/ROOT (In Linux) apache-tomcat-6. 0. 18webappsROOT (In Windows) Then to open an HTML file in the browser, specify e. g. http: //localhost: 8080/Get. Example. html Your Java classes should go under: apache-tomcat-6. 0. 18/webapps/ROOT/WEB-INF/classes (In Linux) apache-tomcat-6. 0. 18webappsROOTWEB-INFclasses (In Windows) Any jar file (such as classes 12. jar of Oracle JDBC) should go under: apache-tomcat-6. 0. 18/webapps/ROOT/WEB-INF/lib (In Linux) apache-tomcat-6. 0. 18webappsROOTWEB-INF (In Windows)
Servlet Container Copy/sftp the /opt/oracle/jar/classes 12. jar to your development directory. To compile, cd to the 'development' directory and execute the following: javac -d. . /apache-tomcat-6. 0. 18/webapps/ROOT/WEB-INF/classes classpath. . /apache-tomcat-6. 0. 18/lib/servlet-api. jar: classes 12. jar *. java (In Linux) javac -d. . apache-tomcat-6. 0. 18webappsROOTWEB-INFclasses classpath. . apache-tomcat-6. 0. 18libservlet-api. jar; classes 12. jar *. java (In Windows) These commands will copy your. class files to the. . apache-tomcat 6. 0. 18webappsROOTWEB-INFclasses directory.
import java. sql. *; import java. util. *; public class Connection. Manager { private static Connection. Manager instance = null; private Stack connections; Connection manager private Connection. Manager () { connections = new Stack(); try { Driver. Manager. register. Driver (new oracle. jdbc. driver. Oracle. Driver()); } catch (Exception ex) { System. out. println(ex); } } public static Connection. Manager get. Instance() { if (instance == null) instance = new Connection. Manager(); return instance; }
public Connection get. Connection() { Connection conn = null; Connection manager if (!connections. empty()) conn = (Connection) connections. pop(); else { //No one left in the stack, create a new one try { conn = Driver. Manager. get. Connection ("jdbc: oracle: thin: @localhost: 1521: TEACH", "user", "passw"); } catch (SQLException ex) { System. out. println("SQLException: " + ex); } This is assuming the ssh tunel is used. } Otherwise, if running on the lab machines, replace by return conn; ("jdbc: oracle: thin: @oracle. csc. uvic. ca: 1521: TEACH", } "user", "passw") public void return. Connection(Connection conn) { if (conn != null) connections. push(conn); } }
SSH Tunnel In order to be able to connect to ORACLE remotely from your machine at home execute (in your machine): ssh 2 -L 1521: oracle. csc. uvic. ca: 1521 <yourusername>@uknoppix. csc. uvic. ca Might be called just ssh in your machine. Use some other lab machine.
import java. io. *; import java. net. *; import javax. servlet. http. *; import java. sql. *; Insert Servlet public class Insert extends Http. Servlet { protected void process. Request(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { response. set. Content. Type("text/html; charset=UTF-8"); Print. Writer out = response. get. Writer(); String title = request. get. Parameter("title"); String year = request. get. Parameter("year"); String length = request. get. Parameter("length"); String studio. Name = request. get. Parameter("studio"); String statement. String = "INSERT INTO Movie(title, year, length, studio. Name) " + "VALUES( '" + title + "', " + year + ", " + length + ", '" + studio. Name + "')";
Connection conn = Connection. Manager. get. Instance(). get. Connection(); try { Statement stmt = conn. create. Statement(); stmt. execute. Update(statement. String); stmt. close(); } catch(SQLException e) { out. println(e); } Connection. Manager. get. Instance(). return. Connection(conn); } protected void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { process. Request(request, response); } protected void do. Post(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { process. Request(request, response); } public String get. Servlet. Info() { return "Short description"; } }
The HTML source <html> <head> <title>Insert</title> </head> <body><font size="4"> <center>Please enter your name and password then press start <form method="GET" action="http: //localhost: 8080/servlet/Insert" > Title: <input type="text" name="title" value="" /> Year: <input type="text" name="year" value="" /> Length: <input type="text" name="length" value="" /> Studio: <input type="text" name="studio" value="" /> <input type="submit" value="Start" > </form> </center> <hr> </body> </html>
Movie. Servlet 1 import import java. io. *; java. net. *; javax. servlet. http. *; java. sql. *; public class Movie. Servlet 1 extends Http. Servlet { protected void process. Request(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { response. set. Content. Type("text/html; charset=UTF-8"); Print. Writer out = response. get. Writer(); Connection conn = Connection. Manager. get. Instance(). get. Connection(); try { Statement stmt = conn. create. Statement(); Result. Set rset = stmt. execute. Query( "SELECT title, year " + "FROM Movie");
out. println("<table>"); while (rset. next()) { out. println("<tr>"); out. print ( "<td>"+rset. get. String("title")+"</td>" + "<td><A href="http: //localhost: 8080/servlet/Movie. Servlet 2? year="+ rset. get. String("year")+"">"+rset. get. String("year")+"</A></td>"); out. println("</tr>"); } out. println("</table>"); stmt. close(); } catch(SQLException e) { out. println(e); } Connection. Manager. get. Instance(). return. Connection(conn); } protected void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { process. Request(request, response); } protected void do. Post(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { process. Request(request, response); } public String get. Servlet. Info() { return "Short description"; } }
Movie. Servlet 2 import import java. io. *; java. net. *; javax. servlet. http. *; java. sql. *; public class Movie. Servlet 2 extends Http. Servlet { protected void process. Request(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { response. set. Content. Type("text/html; charset=UTF-8"); Print. Writer out = response. get. Writer(); String year = request. get. Parameter("year"); Connection conn = Connection. Manager. get. Instance(). get. Connection(); try { Statement stmt = conn. create. Statement(); Result. Set rset = stmt. execute. Query( "SELECT title, year " + "FROM Movie " + "WHERE year = " + year);
out. println("<table>"); while (rset. next()) { out. println("<tr>"); out. print ( "<td>"+rset. get. String("title")+"</td>" + "<td>"+rset. get. String("year")+"</td>"); out. println("</tr>"); } out. println("</table>"); stmt. close(); } catch(SQLException e) { out. println(e); } Connection. Manager. get. Instance(). return. Connection(conn); } protected void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { process. Request(request, response); } protected void do. Post(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { process. Request(request, response); } public String get. Servlet. Info() { return "Short description"; } }
- Slides: 22