瀏覽代碼

Add PostgreSQL Fortune Servlet and it configuration (#2326)

Radoslav Petrov 8 年之前
父節點
當前提交
c378d0adfc

+ 0 - 13
frameworks/Java/servlet/.classpath

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry including="**/*.java" kind="src" path="src/main/java"/>
-	<classpathentry kind="var" path="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar"/>
-	<classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="var" path="M2_REPO/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar"/>
-	<classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.1.2/jackson-databind-2.1.2.jar"/>
-	<classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar"/>
-	<classpathentry kind="var" path="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar"/>
-	<classpathentry kind="output" path="src/main/webapp/WEB-INF/classes"/>
-</classpath>

+ 0 - 14
frameworks/Java/servlet/.project

@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-  <name>world</name>
-  <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
-  <projects/>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
-</projectDescription>

+ 0 - 5
frameworks/Java/servlet/.settings/org.eclipse.jdt.core.prefs

@@ -1,5 +0,0 @@
-#Thu Apr 11 13:42:30 PDT 2013
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.source=1.7
-org.eclipse.jdt.core.compiler.compliance=1.7

+ 2 - 1
frameworks/Java/servlet/benchmark_config.json

@@ -24,7 +24,7 @@
       "setup_file": "setup",
       "db_url": "/servlet/db",
       "query_url": "/servlet/db?queries=",
-      "fortune_url": "/servlet//fortunes",
+      "fortune_url": "/servlet/fortunes",
       "update_url": "/servlet/update?queries=",
       "port": 8080,
       "approach": "Realistic",
@@ -45,6 +45,7 @@
       "setup_file": "setup",
       "db_url": "/servlet/postgres",
       "query_url": "/servlet/postgres?queries=",
+      "fortune_url": "/servlet/postgre-fortunes",
       "update_url": "/servlet/postgres-update?queries=",
       "port": 8080,
       "approach": "Realistic",

+ 75 - 0
frameworks/Java/servlet/src/main/java/hello/PostgreFortunesServlet.java

@@ -0,0 +1,75 @@
+package hello;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Resource;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+
+/**
+ * Fortunes test, returns a list of fortune cookie messages fetched from
+ * a database table and then composed by server-side templates.
+ */
+@SuppressWarnings("serial")
+public class PostgreFortunesServlet extends HttpServlet
+{
+  
+  // Database details.
+  private static final String DB_QUERY = "SELECT * FROM Fortune";
+  private static final String UTF8 = "UTF-8";
+  private static final String CONTENT_TYPE_HTML_UTF8 = "text/html;charset=UTF-8";
+
+  // Database connection pool.
+  @Resource(name="jdbc/postgres_hello_world")
+  private DataSource postgresDataSource;
+  
+  @Override
+  protected void doGet(HttpServletRequest req, HttpServletResponse res)
+			throws ServletException, IOException
+  {
+    // Set content type to JSON
+    res.setCharacterEncoding(UTF8);
+    res.setContentType(CONTENT_TYPE_HTML_UTF8);
+
+    final List<Fortune> fortunes = new ArrayList<>();
+    
+    try (
+         Connection conn = postgresDataSource.getConnection();
+         PreparedStatement statement = conn.prepareStatement(DB_QUERY, 
+             ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
+         ResultSet results = statement.executeQuery()
+        )
+    {
+      while (results.next())
+      {
+        fortunes.add(new Fortune(results.getInt("id"), results.getString("message")));
+      }
+    }
+    catch (SQLException sqlex)
+    {
+      System.err.println("SQL Exception: " + sqlex);
+    }
+    
+    fortunes.add(new Fortune(0, "Additional fortune added at request time."));
+    Collections.sort(fortunes);
+    
+    // Set the list of Fortunes as an attribute of the request, making it
+    // available to the JSP.
+    req.setAttribute("fortunes", fortunes);
+    
+    // Dispatch to the JSP.
+    RequestDispatcher disp = req.getRequestDispatcher("/WEB-INF/jsp/fortunes.jsp");
+    disp.forward(req, res);
+  }
+}

+ 6 - 0
frameworks/Java/servlet/src/main/webapp/WEB-INF/web.xml

@@ -35,6 +35,12 @@
     <load-on-startup/>
   </servlet>
   <servlet-mapping url-regexp='^/postgres$' servlet-name='postgres'/>
+  <servlet>
+    <servlet-name>postgre-fortunes</servlet-name>
+    <servlet-class>hello.PostgreFortunesServlet</servlet-class>
+    <load-on-startup/>
+  </servlet>
+  <servlet-mapping url-regexp='^/postgre-fortunes$' servlet-name='postgre-fortunes'/>
   <servlet>
     <servlet-name>postgres-update</servlet-name>
     <servlet-class>hello.PostgresUpdateServlet</servlet-class>