Java Servlets CSCI 201 Principles of Software Development






















- Slides: 22
Java Servlets CSCI 201 Principles of Software Development Jeffrey Miller, Ph. D. jeffrey. miller@usc. edu
Outline • Java Servlets • Program USC CSCI 201 L
Dynamic Web Content ▪ Dynamic web content allows different data to be shown on the same web page › For example, the Google search result page is the same page that loads different data based on the search terms USC CSCI 201 L 3/22
Front-End vs Back-End Request web page Browser Return HTML, CSS, Java. Script Web Server USC CSCI 201 L 4/22
Web Languages ▪ Most dynamic content is based on a server program running and generating the front-end code in real-time ▪ There are many back-end web languages › › › › Java – Servlets, JSPs, Java. Beans, Enterprise Java Beans (EJBs). NET – C#, VB PHP Ruby Python Server-side Java. Script – node. js CGI – C, Perl ▪ There are three front-end web languages › › HTML CSS Java. Script (Browser plug-ins could be used on the front-end as well) USC CSCI 201 L 5/22
Which Back-End Language to Choose? USC CSCI 201 L 6/22
Which Back-End Language to Choose? USC CSCI 201 L 7/22
Servlet 3 -Tier Architecture Client Server Web/Application Server Database USC CSCI 201 L 8/22
Java Servlets ▪ Servlets are Java classes that can serve dynamic web content ▪ Servlets get compiled and executed on the server and generate client-side code to send back out to the browser › Client-side code is HTML, CSS, and Java. Script ▪ To create a servlet, extend the Http. Servlet class › › void do. Get(Http. Servlet. Request req, Http. Servlet. Response resp) void do. Post(Http. Servlet. Request req, Http. Servlet. Response resp) void service(Http. Servlet. Request req, Http. Servlet. Response resp) • Dispatches to do. Get or do. Post if not overridden void init(Servet. Config config) USC CSCI 201 L 9/22
My First Servlet 1 package csci 201; 2 import java. io. IOException; 3 import javax. servlet. Servlet. Config; 4 import javax. servlet. Servlet. Exception; 5 import javax. servlet. annotation. Web. Servlet; 6 import javax. servlet. http. *; 7 8 @Web. Servlet("/First. Servlet") 9 public class Test. Servlet extends Http. Servlet { 10 private static final long serial. Version. UID = 1 L; 11 public Test. Servlet() { 12 super(); 13 System. out. println("in constructor"); 14 } 15 public void init(Servlet. Config config) throws Servlet. Exception { 16 System. out. println("in init"); 17 } 18 protected void service(Http. Servlet. Request request, Http. Servlet. Response response) 19 throws Servlet. Exception, IOException { 20 System. out. println("in service"); 21 } 22 } USC CSCI 201 L 10/22
Annotations ▪ ▪ Annotations allow us to specify ▪ Instead, we can write the following line configuration parameters that are used by immediately above the class declaration of the application server in our. java files our servlet Before annotations (or even now if you want), you would have to modify the web. xml file of the application server 1 @Web. Servlet(name="mytest", 1 <servlet> 2 <servlet-name>mytest</servlet-name> 3 <init-param> 4 <param-name>n 1</param-name> 5 <param-value>v 1</param-value> 6 </init-param> 7 <init-param> 8 <param-name>n 2</param-name> 9 <param-value>v 2</param-value> 10 </init-param> 11 </servlet> 12 <servlet-mapping> 13 <servlet-name>mytest</servlet-name> 14 <url-mapping>/myurl</url-mapping> 15 </servlet-mapping> 2 url. Patterns={"/myurl"}, 3 init. Params={ 4 @Init. Param(name="n 1", 5 value="v 1"), 6 @Init. Param(name="n 2", 7 value="v 2") 8 }) USC CSCI 201 L 11/22
My Second Servlet 1 package csci 201; 2 import java. io. IOException; 3 import java. io. Print. Writer; 4 import javax. servlet. Servlet. Exception; 5 import javax. servlet. annotation. Web. Servlet; 6 import javax. servlet. http. *; 7 8 @Web. Servlet("/Second. Servlet") 9 public class Test. Servlet extends Http. Servlet { 10 private static final long serial. Version. UID = 1 L; 11 protected void service(Http. Servlet. Request request, Http. Servlet. Response response) 12 throws Servlet. Exception, IOException { 13 response. set. Content. Type("text/html"); 14 Print. Writer out = response. get. Writer(); 15 out. println("<!DOCTYPE html>"); 16 out. println("<html>"); 17 out. println("<head>"); 18 out. println("<title>My Second Servlet</title>"); 19 out. println("</head>"); 20 out. println("<body>"); 21 out. println("<h 1>Hello CSCI 201</h 1>"); 22 out. println("</body>"); 23 out. println("</html>"); 24 } 25 } USC CSCI 201 L 12/22
Color Servlet 1 // omitted package and imports for space 31 out. println("<table>"); 2 @Web. Servlet("/Colors") 32 out. println("<tr><th>Red</th>”); 3 public class Test. Servlet extends Http. Servlet { 33 out. println(“<th>Green</th>”); 4 private static final long serial. Version. UID = 1 L; 34 out. println(“<th>Blue</th>”); 5 private String get. Color(int r, int g, int b) { 35 out. println(“<th>Color</th></tr>"); 6 String color = ""; 36 for (int red=0; red < 255; red+=50) { 7 color += make. Hex(r); 37 for (int green=0; green < 255; green+=50) { 8 color += make. Hex(g); 38 for (int blue=0; blue < 255; blue+=50) { 9 color += make. Hex(b); 39 out. println("<tr>"); 10 return color; 40 out. print("<td>" + red + "</td>"); 11 } 41 out. print("<td>" + green + "</td>"); 12 private String make. Hex(int color) { 42 out. print("<td>" + blue + "</td>"); 13 String hex. String = Integer. to. Hex. String(color); 43 String color = get. Color(red, green, blue); 14 if (hex. String. length() == 1) { 44 out. print("<td style="background-color: #" + color + "; ">”); 15 hex. String = "0" + hex. String; 45 out. print(“ </td>"); 16 } 46 out. println("</tr>"); 17 return hex. String; 47 } 18 } 48 } 19 protected void service(Http. Servlet. Request request, 49 } 20 Http. Servlet. Response response) 50 out. println("</table>"); 21 throws Servlet. Exception, IOException { 51 out. println("</body>"); 22 response. set. Content. Type("text/html"); 52 out. println("</html>"); 23 Print. Writer out = response. get. Writer(); 53 } 24 out. println("<!DOCTYPE html>"); 54 } 25 out. println("<html>"); 26 out. println("<head>"); 27 out. println("<title>My Second Servlet</title>"); 28 out. println("</head>"); 29 out. println("<body>"); 30 out. println("<h 1>Color Table</h 1>"); USC CSCI 201 L 13/22
Color Servlet Generated HTML 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>My Second Servlet</title> 5 </head> 6 <body> 7 <h 1>Color Table</h 1> 8 <table> 9 <tr><th>Red</th><th>Green</th><th>Blue</th><th>Color</th></tr> 10 <tr> 11 <td>0</td> 12 <td>0</td> 13 <td>0</td> 14 <td style="background-color: #000000; "> </td> 15 </tr> 16 <tr> 17 <td>0</td> 18 <td>0</td> 19 <td>50</td> 20 <td style="background-color: #000032; "> </td> 21 </tr> 22 <tr> 23 <td>0</td> 24 <td>0</td> 25 <td>100</td> 26 <td style="background-color: #000064; "> </td> 27 </tr>. . . 1306 </table> 1307 </body> 1308 </html> USC CSCI 201 L 14/22
Servlets and HTML Forms ▪ Servlets can be used to process the data submitted from an HTML form through the Http. Servlet. Request variable in the do. Get, do. Post, or service method ▪ Here a few of the more commonly used methods › › › Cookie[] get. Cookies() String get. Query. String() Http. Session get. Session() String get. Parameter(String) Enumeration<String> get. Parameter. Names() String[] get. Parameter. Values(String) • Returns all of the values associated with a specific parameter name USC CSCI 201 L 15/22
Servlet Form Example 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Sample Form</title> 5 </head> 6 <body> 7 <form name="myform" method="GET" action="Form. Servlet"> 8 First Name <input type="text" name="fname" /><br /> 9 Last Name <input type="text" name="lname" /><br /> 10 <input type="submit" name="submit" value="Submit" /> 11 </form> 12 </body> 13 </html> USC CSCI 201 L 16/22
Servlet Form Example 1 // package and imports omitted for space 2 @Web. Servlet("/Form. Servlet") 3 public class Form. Servlet extends Http. Servlet { 4 private static final long serial. Version. UID = 1 L; 5 protected void service(Http. Servlet. Request request, Http. Servlet. Response response) 6 throws Servlet. Exception, IOException { 7 Print. Writer out = response. get. Writer(); 8 String fname = request. get. Parameter("fname"); 9 String lname = request. get. Parameter("lname"); 10 System. out. println("fname = " + fname); 11 System. out. println("lname = " + lname); 12 13 response. set. Content. Type("text/html"); 14 out. println("<html>"); 15 out. println("<head><title>Form Submission</title></head>"); 16 out. println("<body>"); 17 out. println("<h 1>Submitted Data</h 1>"); 18 out. println("First Name: <strong> " + fname + "</strong><br />"); 19 out. println("Last Name: <strong> " + lname + "</strong>"); 20 out. println("</body>"); 21 out. println("</html>"); 22 } 23 } USC CSCI 201 L 17/22
Forwarding from a Servlet ▪ Because servlets have a lot of overhead when generating client-side code, forwarding to a different page is often used › The request and response objects can be forwarded to the page too › The servlet can do some processing of the data, possibly even modify or amend it, then forward to another page › This is separating the display and business logic (view and controller in MVC) 1 // omitted package and import statements for space 2 @Web. Servlet("/Form. Servlet") 3 public class Form. Servlet extends Http. Servlet { 4 private static final long serial. Version. UID = 1 L; 5 protected void service(Http. Servlet. Request request, Http. Servlet. Response response) 6 throws Servlet. Exception, IOException { 7 String username = request. get. Parameter("username"); 8 String next = "/invalid. Username. jsp"; 9 if (username != null && username. equals("csci 201")) { 10 next = "/valid. Username. jsp"; 11 } 12 Request. Dispatcher dispatch = get. Servlet. Context(). get. Request. Dispatcher(next); 13 dispatch. forward(request, response); 14 } 15 } USC CSCI 201 L 18/22
Java Servlet Frameworks ▪ There is a popular Java Servlet framework currently called Spring Boot (https: //projects. spring. io/spring-boot/) › Spring Boot tries to remove all configuration and allow a programmer to focus solely on writing Java code USC CSCI 201 L 19/22
More Servlets ▪ For more information on Servlets › Go to https: //docs. oracle. com/javaee/7/tutorial/servlets. htm › Go through one of the many servlet tutorials online 20/22
Outline • Java Servlets • Program USC CSCI 201 L
Program ▪ Create the following form and process the submitted data with a servlet to display the page on the right with a servlet. • Program USC CSCI 201 L 22/22