Skip to content

Instantly share code, notes, and snippets.

@woodie
Created October 19, 2009 18:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save woodie/213604 to your computer and use it in GitHub Desktop.
Save woodie/213604 to your computer and use it in GitHub Desktop.
Using Servlets
#!/bin/sh
export CLASSPATH=./build/lib/servlet.jar:./WEB-INF/lib/appengine-api-1.0-sdk-1.3.1.jar
javac com/example/Fancy.java
javac com/example/Plain.java
javac com/example/Nickname.java
mkdir -p WEB-INF/lib
jar -cvf WEB-INF/lib/examples.jar com/example/*.class
rm com/example/*.class
package com.example;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Fancy extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>\n<head>");
out.println("<title>Hello</title>");
out.println("</head>\n<body style='background-color: LightYellow;'>");
out.println("<h1> Hello Servlet </h1>");
out.println("<img src='/images/appengine-silver-120x30.gif'>");
out.println("</body>\n</html>");
}
}
package com.example;
import java.io.IOException;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
public class Nickname extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
resp.setContentType("text/plain");
String nickname = (user != null) ? user.getNickname() : "nobody";
resp.getWriter().println(nickname);
}
}
package com.example;
import java.io.IOException;
import javax.servlet.http.*;
import com.google.apphosting.api.ApiProxy;
import com.google.apphosting.api.ApiProxy.Environment;
public class Plain extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
Environment env = ApiProxy.getCurrentEnvironment();
String app_id = env.getAppId();
String raw_ver = env.getVersionId();
String version = raw_ver.substring(0,raw_ver.lastIndexOf("."));
String domain = env.getAuthDomain();
// print out some stuff
String message = "app_id: " + app_id + "\n" +
"version: " + version + "\n" +
"domain: " + domain;
resp.setContentType("text/plain");
resp.getWriter().println(message);
}
}
require 'appengine-rack'
require 'appengine-rack/java'
AppEngine::Rack.configure_app(
:application => "fiddle-sticks",
:precompilation_enabled => true,
:version => 1)
AppEngine::Rack.app.resource_files.exclude '/build**'
skip_rack_servlet
mime_mapping :xpi => 'application/x-xpinstall', :ru => 'text/plain'
map '/fancy' do
run JavaServlet.new('com.example.Fancy', :name => 'FancyServlet')
end
map '/nickname' do
use AppEngine::Rack::LoginRequired
run JavaServlet.new('com.example.Nickname', :name => 'NicknameServlet')
end
map '/plain' do
run JavaServlet.new('com.example.Plain', :name => 'PlainServlet')
end
map '/rack' do
use JavaServletFilter, 'org.jruby.rack.RackFilter',
{ :name => 'RackFilter', :wildcard => true }
run lambda { Rack::Response.new("Hello Rack!").finish }
end
<web-app xmlns='http://java.sun.com/xml/ns/javaee' version='2.5'>
<security-constraint>
<web-resource-collection>
<url-pattern>/nickname</url-pattern>
<url-pattern>/nickname/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
<servlet>
<servlet-name>NicknameServlet</servlet-name>
<servlet-class>com.example.Nickname</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NicknameServlet</servlet-name>
<url-pattern>/nickname</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>FancyServlet</servlet-name>
<servlet-class>com.example.Fancy</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FancyServlet</servlet-name>
<url-pattern>/fancy</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>PlainServlet</servlet-name>
<servlet-class>com.example.Plain</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PlainServlet</servlet-name>
<url-pattern>/plain</url-pattern>
</servlet-mapping>
<filter>
<filter-name>RackFilter</filter-name>
<filter-class>org.jruby.rack.RackFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RackFilter</filter-name>
<url-pattern>/rack</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>RackFilter</filter-name>
<url-pattern>/rack/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>rackup</param-name>
<param-value>
Dir.chdir(&apos;..&apos;) if Dir.pwd =~ /WEB-INF$/; begin; require &apos;bundler_gems/environment&apos;; rescue LoadError; end;eval IO.read(&apos;config.ru&apos;), nil, &apos;config.ru&apos;, 1
</param-value>
</context-param>
<listener>
<listener-class>com.google.appengine.jruby.LazyContextListener</listener-class>
</listener>
<mime-mapping>
<extension>xpi</extension>
<mime-type>application/x-xpinstall</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ru</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
</web-app>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment