<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
<nextCatalog catalog="../.netbeans/6.9/var/cache/mavencachedirs/586500746/retriever/catalog.xml"/>
+ <nextCatalog catalog="../../.netbeans/6.9/var/cache/mavencachedirs/207239483/retriever/catalog.xml"/>
</catalog>
\ No newline at end of file
<version>2.0-SNAPSHOT</version>
</parent>
- <artifactId>${pom.parent.artifactId}-jsp</artifactId>
+ <artifactId>juplo-examples-jsp</artifactId>
<packaging>war</packaging>
<name>Juplo - Examples: JSP-Pages</name>
<constructor-arg value="3600"/>
</bean>
- <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="defaultHandler" value="urlFilenameViewController"/>
- </bean>
-
- <bean id="urlFilenameViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>
-
- <!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
- <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/views/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
-
</beans>
<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+Workaround for a bug in ServletUnit:
+The TLD in jstl.jar is not found when the webapp is running in this
+environment. Because of that, the TLD must be copied here and this
+copy must be referenced explicitly in all JSP's
+-->
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
+++ /dev/null
-<%@page contentType="text/html" pageEncoding="UTF-8" session="false" buffer="1kb" %>
-<!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=UTF-8">
- <title>Simple Page</title>
- <link rel="stylesheet" type="text/css" media="all" href="/default.css">
- </head>
- <body>
- <h1>Hello World!</h1>
- <p>This is a really simple page...</p>
- <p>This version of a really simple page was delivered via SPRING!</p>
- </body>
-</html>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
- <filter-mapping>
- <filter-name>accelerator</filter-name>
- <url-pattern>*.html</url-pattern>
- </filter-mapping>
<filter-mapping>
<filter-name>accelerator</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
- <filter-mapping>
- <filter-name>accelerator</filter-name>
- <url-pattern>*.css</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>accelerator</filter-name>
- <url-pattern>/test-servlet</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>accelerator</filter-name>
- <url-pattern>/spring/*</url-pattern>
- </filter-mapping>
-
-
- <!-- Servlet-Definitions -->
-
- <servlet>
- <servlet-name>test-servlet</servlet-name>
- <servlet-class>de.halbekunst.juplo.test.TestServlet</servlet-class>
- </servlet>
-
- <servlet>
- <servlet-name>dispatcher-servlet</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- </param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
-
- <!-- Servlet-Mappings -->
-
- <servlet-mapping>
- <servlet-name>test-servlet</servlet-name>
- <url-pattern>/test-servlet</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>dispatcher-servlet</servlet-name>
- <url-pattern>/spring/*</url-pattern>
- </servlet-mapping>
</web-app>
+++ /dev/null
-body {
- background-color: #ccc;
- color: #444;
-}
-h1,h2,h3,h4 {
- color: #000;
-}
\ No newline at end of file
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Static Page</title>
- <link rel="stylesheet" type="text/css" media="all" href="/default.css">
+ <title>JSP Examples</title>
</head>
<body>
- <h1>Static Page</h1>
- <p>This page is a static HTML-page</p>
- <p>At the same time, it gives an overview over all tests...</p>
- <h2>JSP-Pages</h2>
+ <h1>JSP Examples</h1>
<ul>
<li><a href="/simple-page.jsp">A really simple JSP-page</a></li>
<li><a href="/page-with-include.jsp">A JSP-page with several includes</a></li>
<li><a href="/page-with-forward.jsp">A JSP-page with a forward to /simple-page.jsp</a></li>
</ul>
- <h2>Static Content</h2>
- <ul>
- <li><a href="/index.html">A plain static HTML-file (this page!)</a></li>
- <li><a href="/default.css">A plain static CSS-file</a></li>
- </ul>
- <h2>Dynamic Servlet-Answers</h2>
- <ul>
- <li><a href="/test-servlet">Empty Answer</a></li>
- <li><a href="/test-servlet?n=16">16-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=32">32-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=64">64-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=128">128-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=256">256-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=512">512-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=1024">1024-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=2048">2048-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=4096">4096-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=8192">8192-Bytes-Answer</a></li>
- <li><a href="/test-servlet?n=16384">16384-Bytes-Answer</a></li>
- </ul>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Page with include</title>
- <link rel="stylesheet" type="text/css" media="all" href="/default.css">
</head>
<body>
<h1>Hello World!</h1>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Simple Page</title>
- <link rel="stylesheet" type="text/css" media="all" href="/default.css">
</head>
<body>
- <h1>Hello World!</h1>
- <p>This is a really simple page...</p>
+ <h1>Simple Page</h1>
+ <p>This page is a simple jsp-page</p>
</body>
</html>
--- /dev/null
+package de.halbekunst.cachecontrol.examples;
+
+import de.halbekunst.juplo.test.HttpTestCase;
+import com.meterware.httpunit.WebResponse;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author kai
+ */
+public class JspTest extends HttpTestCase {
+
+ private static final Logger log = LoggerFactory.getLogger(JspTest.class);
+
+
+ public JspTest() {
+ super("src/main/webapp/WEB-INF/web.xml");
+ }
+
+
+ @Test
+ public void testSimplePage() throws Exception {
+ WebResponse response = executeRequest("http://localhost:8080/simple-page.jsp");
+ log.info("Title:\t\t{}", response.getTitle());
+ log.debug("Text:\t\t{}", response.getText());
+ }
+
+ @Test
+ public void testPageWithInclude() throws Exception {
+ WebResponse response = executeRequest("http://localhost:8080/page-with-include.jsp");
+ log.info("Title:\t\t{}", response.getTitle());
+ log.debug("Text:\t\t{}", response.getText());
+ }
+
+ @Test
+ public void testPageWithForward() throws Exception {
+ WebResponse response = executeRequest("http://localhost:8080/page-with-forward.jsp");
+ log.info("Title:\t\t{}", response.getTitle());
+ log.debug("Text:\t\t{}", response.getText());
+ }
+}
+++ /dev/null
-package de.halbekunst.cachecontrol.examples.jsp;
-
-import de.halbekunst.juplo.test.HttpTestCase;
-import com.meterware.httpunit.WebResponse;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- * @author kai
- */
-public class JspTest extends HttpTestCase {
-
- private static final Logger log = LoggerFactory.getLogger(JspTest.class);
-
-
- public JspTest() {
- super("src/main/webapp/WEB-INF/web.xml");
- }
-
-
- @Test
- public void testSimplePage() throws Exception {
- WebResponse response = executeRequest("http://localhost:8080/simple-page.jsp");
- log.info("Title:\t\t{}", response.getTitle());
- log.debug("Text:\t\t{}", response.getText());
- }
-
- @Test
- public void testPageWithInclude() throws Exception {
- WebResponse response = executeRequest("http://localhost:8080/page-with-include.jsp");
- log.info("Title:\t\t{}", response.getTitle());
- log.debug("Text:\t\t{}", response.getText());
- }
-
- @Test
- public void testPageWithForward() throws Exception {
- WebResponse response = executeRequest("http://localhost:8080/page-with-forward.jsp");
- log.info("Title:\t\t{}", response.getTitle());
- log.debug("Text:\t\t{}", response.getText());
- }
-
- @Test
- public void testStaticContent() throws Exception {
- WebResponse response = executeRequest("http://localhost:8080/default.css");
- log.info("Title:\t\t{}", response.getTitle());
- log.debug("Text:\t\t{}", response.getText());
- }
-}
<modules>
<module>jsp</module>
+ <module>static</module>
+ <module>servlet</module>
+ <module>spring</module>
</modules>
<dependencies>
<scope>runtime</scope>
</dependency>
-
<!-- Test -->
<dependency>
<groupId>${pom.parent.groupId}</groupId>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
- <version>8.0.1.v20110908</version>
+ <version>${jetty.version}</version>
<configuration>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.BlockingChannelConnector">
--- /dev/null
+#!/bin/bash
+#
+
+# OutOfMemoryException beim "mvn jetty:run" umgehen und
+# Parameter zum nachträglichen anhängen eines Debuggers
+# setzen
+export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"
+
+rm -v src/main/webapp/WEB-INF/lib/juplo*
+
+mvn jetty:run
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>de.halbekunst</groupId>
+ <artifactId>juplo-examples</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>juplo-examples-servlet</artifactId>
+ <packaging>war</packaging>
+ <name>Juplo - Examples: Servlet</name>
+
+</project>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+ <!-- Activates the AspectJ-Weaver -->
+ <context:component-scan base-package="de.halbekunst"/>
+ <context:spring-configured/>
+
+ <bean id="eTag" class="java.lang.String">
+ <constructor-arg value="Hallo Welt!"/>
+ </bean>
+
+ <bean id="weak" class="java.lang.Boolean">
+ <constructor-arg value="true"/>
+ </bean>
+
+ <bean id="lastModified" class="java.lang.Long">
+ <constructor-arg value="1338593731"/>
+ </bean>
+
+ <bean id="cacheSeconds" class="java.lang.Integer">
+ <constructor-arg value="3600"/>
+ </bean>
+
+ <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
+ <property name="defaultHandler" value="urlFilenameViewController"/>
+ </bean>
+
+ <bean id="urlFilenameViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>
+
+ <!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
+ <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
+ <property name="prefix" value="/WEB-INF/views/"/>
+ <property name="suffix" value=".jsp"/>
+ </bean>
+
+</beans>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%p - %C{1}.%M(%L) | %m%n"/>
+ </layout>
+ </appender>
+
+ <logger name="de.halbekunst">
+ <level value="trace"/>
+ </logger>
+
+ <root>
+ <level value="info"/>
+ <appender-ref ref="CONSOLE"/>
+ </root>
+
+</log4j:configuration>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+
+ <!-- Context Configuration locations for Spring XML files -->
+
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>classpath:/config.xml</param-value>
+ </context-param>
+
+
+ <!-- Listener-Definitions -->
+
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+
+
+ <!-- Filter-Definitions -->
+
+ <filter>
+ <filter-name>accelerator</filter-name>
+ <filter-class>de.halbekunst.juplo.cachecontrol.AcceleratorFilter</filter-class>
+ </filter>
+
+ <filter>
+ <filter-name>logger</filter-name>
+ <filter-class>de.halbekunst.juplo.test.LoggingHttpServletResponseFilter</filter-class>
+ </filter>
+
+
+ <!-- Filter-Mappings -->
+
+ <filter-mapping>
+ <filter-name>logger</filter-name>
+ <url-pattern>/test-servlet</url-pattern>
+ </filter-mapping>
+
+ <filter-mapping>
+ <filter-name>accelerator</filter-name>
+ <url-pattern>/test-servlet</url-pattern>
+ </filter-mapping>
+
+
+ <!-- Servlet-Definitions -->
+
+ <servlet>
+ <servlet-name>test-servlet</servlet-name>
+ <servlet-class>de.halbekunst.juplo.test.TestServlet</servlet-class>
+ </servlet>
+
+
+ <!-- Servlet-Mappings -->
+
+ <servlet-mapping>
+ <servlet-name>test-servlet</servlet-name>
+ <url-pattern>/test-servlet</url-pattern>
+ </servlet-mapping>
+
+</web-app>
--- /dev/null
+<!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=UTF-8">
+ <title>Servlet Examples</title>
+ </head>
+ <body>
+ <h1>Servlet Examples</h1>
+ <p>This page is a static HTML-page</p>
+ <ul>
+ <li><a href="/test-servlet">Empty Answer</a></li>
+ <li><a href="/test-servlet?n=16">16-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=32">32-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=64">64-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=128">128-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=256">256-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=512">512-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=1024">1024-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=2048">2048-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=4096">4096-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=8192">8192-Bytes-Answer</a></li>
+ <li><a href="/test-servlet?n=16384">16384-Bytes-Answer</a></li>
+ </ul>
+ </body>
+</html>
--- /dev/null
+package de.halbekunst.cachecontrol.examples;
+
+import de.halbekunst.juplo.test.HttpTestCase;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author kai
+ */
+public class ServletTest extends HttpTestCase {
+
+ private static final Logger log = LoggerFactory.getLogger(ServletTest.class);
+
+
+ public ServletTest() {
+ super("src/main/webapp/WEB-INF/web.xml");
+ }
+
+
+ @Test
+ public void test() throws Exception {
+// WebResponse response = executeRequest("http://localhost:8080/simple-page.jsp");
+// log.info("Title:\t\t{}", response.getTitle());
+// log.debug("Text:\t\t{}", response.getText());
+ }
+}
--- /dev/null
+#!/bin/bash
+#
+
+# OutOfMemoryException beim "mvn jetty:run" umgehen und
+# Parameter zum nachträglichen anhängen eines Debuggers
+# setzen
+export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"
+
+rm -v src/main/webapp/WEB-INF/lib/juplo*
+
+mvn tomcat:run-war
--- /dev/null
+#!/bin/bash
+#
+
+# OutOfMemoryException beim "mvn jetty:run" umgehen und
+# Parameter zum nachträglichen anhängen eines Debuggers
+# setzen
+export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"
+
+rm -v src/main/webapp/WEB-INF/lib/juplo*
+
+mvn jetty:run
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>de.halbekunst</groupId>
+ <artifactId>juplo-examples</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>juplo-examples-spring</artifactId>
+ <packaging>war</packaging>
+ <name>Juplo - Examples: Spring-MVC</name>
+
+</project>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+ <!-- Activates the AspectJ-Weaver -->
+ <context:component-scan base-package="de.halbekunst"/>
+ <context:spring-configured/>
+
+ <bean id="eTag" class="java.lang.String">
+ <constructor-arg value="Hallo Welt!"/>
+ </bean>
+
+ <bean id="weak" class="java.lang.Boolean">
+ <constructor-arg value="true"/>
+ </bean>
+
+ <bean id="lastModified" class="java.lang.Long">
+ <constructor-arg value="1338593731"/>
+ </bean>
+
+ <bean id="cacheSeconds" class="java.lang.Integer">
+ <constructor-arg value="3600"/>
+ </bean>
+
+ <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
+ <property name="defaultHandler" value="urlFilenameViewController"/>
+ </bean>
+
+ <bean id="urlFilenameViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>
+
+ <!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
+ <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
+ <property name="prefix" value="/WEB-INF/views/"/>
+ <property name="suffix" value=".jsp"/>
+ </bean>
+
+</beans>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%p - %C{1}.%M(%L) | %m%n"/>
+ </layout>
+ </appender>
+
+ <logger name="de.halbekunst">
+ <level value="trace"/>
+ </logger>
+
+ <logger name="org.springframework">
+ <level value="debug" />
+ </logger>
+
+ <root>
+ <level value="info"/>
+ <appender-ref ref="CONSOLE"/>
+ </root>
+
+</log4j:configuration>
--- /dev/null
+<%@page contentType="text/html" pageEncoding="UTF-8" session="false" buffer="1kb" %>
+<%@page import="java.util.Map" %>
+<%@page import="java.util.Date"%>
+<!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=UTF-8">
+ <title>Page, that is handled by a controller</title>
+ </head>
+ <body>
+ <% Map<Date,String> requests = (Map<Date,String>)request.getAttribute("requests");
+ if (requests == null) { %>
+ <h1 style="color: red">This page associated with a controller and should be viewed as such!</h1>
+ <p style="color: red">Go to: <a href="/spring-controller.html">/spring-controller.html</a></p>
+ <% } else { %>
+ <h1>Controlled Page</h1>
+ <form action="/spring-controller.html">
+ <label for="max-age">Max Age:</label>
+ <input type="text" name="max-age" value="<% if (request.getParameter("max-age") != null) { %><%= request.getParameter("max-age") %><% } %>" />
+ <br />
+ </form>
+ <p>(Uncached) requests so far:</p>
+ <ol>
+ <% for(Map.Entry<Date,String> entry : requests.entrySet()) { %>
+ <li>
+ <%= entry.getKey() %>:
+ <% if (entry.getValue().equals("")) { %>
+ <a href="/spring-controller.html">No parameters...</a>
+ <% } else { %>
+ <a href="/spring-controller.html?<%= entry.getValue() %>">
+ <% for (String parameter : entry.getValue().split("&")) { %>
+ <strong><%= parameter %></strong>
+ <% } %>
+ </a>
+ <% } %>
+ </li>
+ <% } %>
+ </ol>
+ <% } %>
+ <p>This page was delivered via SPRING!</p>
+ </body>
+</html>
--- /dev/null
+<!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=UTF-8">
+ <title>Simple Spring-MVC Examples</title>
+ </head>
+ <body>
+ <h1>Simple Spring-MVC Examples</h1>
+ <ul>
+ <li><a href="/spring-page.html">Simple Spring-View</a></li>
+ </ul>
+ <p>This page was delivered via SPRING!</p>
+ <h2>Note:</h2>
+ <p>
+ Since the <code>org.springframework.web.servlet.DispatcherServlet</code>
+ ist configured to handle all <code>*.html</code>-requests, the path
+ <code>/index.html</code> points to a view.
+ </p>
+ <p>
+ Therefore, this page must be stored under
+ <code>/WEB-INF/views/index.jsp</code> in order to be served as
+ <code>/index.html</code>
+ </p>
+ <p>
+ Additionatly, a file <code>/index.jsp</code> in the root-directory of
+ the webappliction is needed, to forward unqualified requests
+ (like <code>http://HOSTNAME/</code>) to the welcome-page served by
+ the Spring-Dispatcher-Servlet.
+ </p>
+ </body>
+</html>
--- /dev/null
+<%@page contentType="text/html" pageEncoding="UTF-8" session="false" buffer="1kb" %>
+<!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=UTF-8">
+ <title>Simple Page</title>
+ </head>
+ <body>
+ <h1>Hello World!</h1>
+ <p>This is a really simple page...</p>
+ <p>This page was delivered via SPRING!</p>
+ </body>
+</html>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+
+ <!-- Context Configuration locations for Spring XML files -->
+
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>classpath:/config.xml</param-value>
+ </context-param>
+
+
+ <!-- Listener-Definitions -->
+
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+
+
+ <!-- Filter-Definitions -->
+
+ <filter>
+ <filter-name>accelerator</filter-name>
+ <filter-class>de.halbekunst.juplo.cachecontrol.AcceleratorFilter</filter-class>
+ </filter>
+
+ <filter>
+ <filter-name>logger</filter-name>
+ <filter-class>de.halbekunst.juplo.test.LoggingHttpServletResponseFilter</filter-class>
+ </filter>
+
+
+ <!-- Filter-Mappings -->
+
+ <filter-mapping>
+ <filter-name>logger</filter-name>
+ <url-pattern>*.html</url-pattern>
+ </filter-mapping>
+
+ <filter-mapping>
+ <filter-name>accelerator</filter-name>
+ <url-pattern>*.html</url-pattern>
+ </filter-mapping>
+
+
+ <!-- Servlet-Definitions -->
+
+ <servlet>
+ <servlet-name>dispatcher-servlet</servlet-name>
+ <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+ <init-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>
+ </param-value>
+ </init-param>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+
+ <!-- Servlet-Mappings -->
+
+ <servlet-mapping>
+ <servlet-name>dispatcher-servlet</servlet-name>
+ <url-pattern>*.html</url-pattern>
+ </servlet-mapping>
+
+</web-app>
--- /dev/null
+<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" session="false" %>
+<jsp:forward page="/index.html"/>
+<%--
+
+Unfortionatly, the welcome-mechanism in web.xml does not work with a page
+served by a servlet...
+
+--%>
--- /dev/null
+package de.halbekunst.cachecontrol.examples;
+
+import de.halbekunst.juplo.test.HttpTestCase;
+import com.meterware.httpunit.WebResponse;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author kai
+ */
+public class SpringMVCTest extends HttpTestCase {
+
+ private static final Logger log = LoggerFactory.getLogger(SpringMVCTest.class);
+
+
+ public SpringMVCTest() {
+ super("src/main/webapp/WEB-INF/web.xml");
+ }
+
+
+ @Test
+ public void testSpringPage() throws Exception {
+ WebResponse response = executeRequest("http://localhost:8080/spring-page.html");
+ log.info("Title:\t\t{}", response.getTitle());
+ log.debug("Text:\t\t{}", response.getText());
+ }
+}
--- /dev/null
+#!/bin/bash
+#
+
+# OutOfMemoryException beim "mvn jetty:run" umgehen und
+# Parameter zum nachträglichen anhängen eines Debuggers
+# setzen
+export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"
+
+rm -v src/main/webapp/WEB-INF/lib/juplo*
+
+mvn tomcat:run-war
--- /dev/null
+#!/bin/bash
+#
+
+# OutOfMemoryException beim "mvn jetty:run" umgehen und
+# Parameter zum nachträglichen anhängen eines Debuggers
+# setzen
+export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n"
+
+rm -v src/main/webapp/WEB-INF/lib/juplo*
+
+mvn jetty:run
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>de.halbekunst</groupId>
+ <artifactId>juplo-examples</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>juplo-examples-static</artifactId>
+ <packaging>war</packaging>
+ <name>Juplo - Examples: Static Content</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>${commons-io.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+ <!-- Activates the AspectJ-Weaver -->
+ <context:component-scan base-package="de.halbekunst"/>
+ <context:spring-configured/>
+
+ <bean id="eTag" class="java.lang.String">
+ <constructor-arg value="Hallo Welt!"/>
+ </bean>
+
+ <bean id="weak" class="java.lang.Boolean">
+ <constructor-arg value="true"/>
+ </bean>
+
+ <bean id="lastModified" class="java.lang.Long">
+ <constructor-arg value="1338593731"/>
+ </bean>
+
+ <bean id="cacheSeconds" class="java.lang.Integer">
+ <constructor-arg value="3600"/>
+ </bean>
+
+</beans>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%p - %C{1}.%M(%L) | %m%n"/>
+ </layout>
+ </appender>
+
+ <logger name="de.halbekunst">
+ <level value="trace"/>
+ </logger>
+
+ <root>
+ <level value="info"/>
+ <appender-ref ref="CONSOLE"/>
+ </root>
+
+</log4j:configuration>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+
+ <!-- Context Configuration locations for Spring XML files -->
+
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>classpath:/config.xml</param-value>
+ </context-param>
+
+
+ <!-- Listener-Definitions -->
+
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+
+
+ <!-- Filter-Definitions -->
+
+ <filter>
+ <filter-name>accelerator</filter-name>
+ <filter-class>de.halbekunst.juplo.cachecontrol.AcceleratorFilter</filter-class>
+ </filter>
+
+ <filter>
+ <filter-name>logger</filter-name>
+ <filter-class>de.halbekunst.juplo.test.LoggingHttpServletResponseFilter</filter-class>
+ </filter>
+
+
+ <!-- Filter-Mappings -->
+
+ <filter-mapping>
+ <filter-name>logger</filter-name>
+ <url-pattern>/static/*</url-pattern>
+ </filter-mapping>
+
+ <filter-mapping>
+ <filter-name>accelerator</filter-name>
+ <url-pattern>/static/*</url-pattern>
+ </filter-mapping>
+
+
+ <!-- Servlet-Definitions -->
+
+ <servlet>
+ <servlet-name>default</servlet-name>
+ <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
+ </servlet>
+
+
+ <!-- Servlet-Mappings -->
+
+ <servlet-mapping>
+ <servlet-name>default</servlet-name>
+ <url-pattern>/</url-pattern>
+ </servlet-mapping>
+
+
+</web-app>
--- /dev/null
+<!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=UTF-8">
+ <title>Examples for Static Content</title>
+ </head>
+ <body>
+ <h1>Examples for Static Content</h1>
+ <ul>
+ <li><a href="/static/page.html">A plain static HTML-file</a></li>
+ <li><a href="/static/stylesheets.css">A plain static CSS-file</a></li>
+ </ul>
+ </body>
+</html>
--- /dev/null
+<!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=UTF-8">
+ <title>A Static Page</title>
+ <link rel="stylesheet" type="text/css" media="all" href="/static/stylesheets.css">
+ </head>
+ <body>
+ <h1>A Static Page</h1>
+ <p>This page is a static HTML-page</p>
+ </body>
+</html>
--- /dev/null
+body {
+ background-color: #ccc;
+ color: #444;
+}
+h1,h2,h3,h4 {
+ color: #000;
+}
\ No newline at end of file
--- /dev/null
+package de.halbekunst.cachecontrol.examples;
+
+import de.halbekunst.juplo.test.HttpTestCase;
+import com.meterware.httpunit.WebResponse;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author kai
+ */
+public class StaticTest extends HttpTestCase {
+
+ private static final Logger log = LoggerFactory.getLogger(StaticTest.class);
+
+
+ public StaticTest() {
+ super("src/main/webapp/WEB-INF/web.xml");
+ }
+
+ @Test
+ public void testStaticContent() throws Exception {
+ WebResponse response = executeRequest("http://localhost:8080/static/page.html");
+ log.info("Title:\t\t{}", response.getTitle());
+ log.debug("Text:\t\t{}", response.getText());
+ }
+}
--- /dev/null
+package org.eclipse.jetty.servlet;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.io.IOUtils;
+
+/**
+ * Möglichst simple Fake-Implementierung für die Ausführung des Testfalls
+ *
+ * @author kai
+ */
+public class DefaultServlet extends HttpServlet {
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ String path = getServletContext().getRealPath(request.getRequestURI());
+ if (path == null) {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+ response.setContentType("text/html");
+ IOUtils.copy(new FileInputStream(path), response.getOutputStream());
+ }
+}
<!-- Verwendete Versionen -->
<aspectj.version>1.6.11</aspectj.version>
+ <commons-io.version>1.3.2</commons-io.version>
<httpunit.version>1.7.1</httpunit.version>
<jasper.version>6.0.29</jasper.version>
+ <jetty.version>8.1.4.v20120524</jetty.version>
<jpa.version>1.0</jpa.version>
<jstl.version>1.2</jstl.version>
<junit.version>4.8.1</junit.version>
<version>${springframework.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
<!-- hidden dependencies -->
<dependency>
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
+import java.util.Collection;
import java.util.Date;
import java.util.Locale;
import javax.servlet.ServletOutputStream;
return locale;
}
+ @Override
+ public int getStatus() {
+ Integer status = response.getStatus();
+ log.trace("{} -- status: {}", no, status);
+ return status;
+ }
+
+ @Override
+ public String getHeader(String name) {
+ String value = response.getHeader(name);
+ log.trace("{} -- header \"{}\": {}", new Object[] { no, name, value });
+ return value;
+ }
+
+ @Override
+ public Collection<String> getHeaders(String name) {
+ Collection<String> values = response.getHeaders(name);
+ if (log.isTraceEnabled()) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(no);
+ builder.append(" -- headers \"");
+ builder.append(name);
+ builder.append("\":");
+ for (String value : values) {
+ builder.append(' ');
+ builder.append(value);
+ }
+ log.trace(builder.toString());
+ }
+ return values;
+ }
+
+ @Override
+ public Collection<String> getHeaderNames() {
+ Collection<String> values = response.getHeaderNames();
+ if (log.isTraceEnabled()) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(no);
+ builder.append(" -- header-names:");
+ for (String value : values) {
+ builder.append(' ');
+ builder.append(value);
+ }
+ log.trace(builder.toString());
+ }
+ return values;
+ }
+
class CountingServletOutputStream extends ServletOutputStream {