diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/AbstractHttpFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/AbstractHttpFilter.java
index 092e12d..275a427 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/AbstractHttpFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/AbstractHttpFilter.java
@@ -33,7 +33,7 @@
   }
 
   @Override
-  @SuppressWarnings("unused") // Allow subclasses to throw ServletException.
+  // Allow subclasses to throw ServletException.
   public void init(FilterConfig config) throws ServletException {
     // Default implementation does nothing.
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
index 70dc14e..c92579d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -32,6 +32,7 @@
 
 /** Base servlet class for Gitiles servlets that serve Soy templates. */
 public abstract class BaseServlet extends HttpServlet {
+  private static final long serialVersionUID = 1L;
   private static final String DATA_ATTRIBUTE = BaseServlet.class.getName() + "/Data";
 
   static void setNotCacheable(HttpServletResponse res) {
@@ -43,6 +44,7 @@
 
   public static BaseServlet notFoundServlet() {
     return new BaseServlet(null) {
+      private static final long serialVersionUID = 1L;
       @Override
       public void service(HttpServletRequest req, HttpServletResponse res) {
         res.setStatus(SC_NOT_FOUND);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
index 5b6d822..f53e26b 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
@@ -68,20 +68,6 @@
 
     @Override
     public GitilesAccess forRequest(HttpServletRequest req) {
-      String path = req.getPathInfo();
-      String repositoryPath;
-      if (path == null || path == "/") {
-        repositoryPath = null;
-      } else {
-        int slashPlus = path.indexOf("/+/");
-        if (slashPlus >= 0) {
-          repositoryPath = path.substring(0, slashPlus);
-        } else if (path.endsWith("/+")) {
-          repositoryPath = path.substring(0, path.length() - 2);
-        } else {
-          repositoryPath = path;
-        }
-      }
       return newAccess(basePath, canonicalBasePath, baseGitUrl, resolver, req);
     }
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
index 2408cd7..ba661e8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -42,6 +42,7 @@
 
 /** Serves an HTML page with all the diffs for a commit. */
 public class DiffServlet extends BaseServlet {
+  private static final long serialVersionUID = 1L;
   private static final String PLACEHOLDER = "id=\"DIFF_OUTPUT_BLOCK\"";
 
   private final Linkifier linkifier;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
index b2cf9ec..dd8905e 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -195,9 +195,6 @@
     Filter repositoryFilter = new RepositoryFilter(resolver);
     Filter viewFilter = new ViewFilter(accessFactory, urls, visibilityCache);
     Filter dispatchFilter = new DispatchFilter(filters, servlets);
-    String browserCssName;
-    String prettifyCssName;
-    String prettifyJsName;
 
     serveRegex(ROOT_REGEX)
         .through(viewFilter)
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
index 2cdbc02..c1647ba 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
@@ -37,6 +37,8 @@
  * configuration.
  */
 public class GitilesServlet extends MetaServlet {
+  private static final long serialVersionUID = 1L;
+
   /** The prefix from which static resources are served. */
   public static final String STATIC_PREFIX = "/+static/";
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
index ad685c4..05c31a7 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -88,6 +88,9 @@
           // Fallthrough.
         case REPOSITORY_INDEX:
           repositoryName = other.repositoryName;
+          // Fallthrough.
+        default:
+          break;
       }
       // Don't copy params.
       return this;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
index bf9ffd1..598527c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
@@ -51,6 +51,7 @@
 
 /** Serves the top level index page for a Gitiles host. */
 public class HostIndexServlet extends BaseServlet {
+  private static final long serialVersionUID = 1L;
   private static final Logger log = LoggerFactory.getLogger(HostIndexServlet.class);
 
   protected final GitilesUrls urls;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
index 07977f7..031b667 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -56,6 +56,7 @@
 
 /** Serves an HTML page with a shortlog for commits and paths. */
 public class LogServlet extends BaseServlet {
+  private static final long serialVersionUID = 1L;
   private static final Logger log = LoggerFactory.getLogger(LogServlet.class);
 
   private static final String START_PARAM = "s";
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
index d228202..c929a05 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -52,6 +52,7 @@
 /** Serves an HTML page with detailed information about a path within a tree. */
 // TODO(dborowitz): Handle non-UTF-8 names.
 public class PathServlet extends BaseServlet {
+  private static final long serialVersionUID = 1L;
   private static final Logger log = LoggerFactory.getLogger(PathServlet.class);
 
   /**
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
index 325068a..e4d0300 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -37,6 +37,7 @@
 
 /** Serves the index page for a repository, if accessed directly by a browser. */
 public class RepositoryIndexServlet extends BaseServlet {
+  private static final long serialVersionUID = 1L;
   private final GitilesAccess.Factory accessFactory;
 
   public RepositoryIndexServlet(Renderer renderer, GitilesAccess.Factory accessFactory) {
@@ -62,7 +63,6 @@
   private List<Map<String, String>> getRefs(HttpServletRequest req, String prefix)
       throws IOException {
     RefDatabase refdb = ServletUtils.getRepository(req).getRefDatabase();
-    String repoName = ViewFilter.getView(req).getRepositoryName();
     Collection<Ref> refs = RefComparator.sort(refdb.getRefs(prefix).values());
     List<Map<String, String>> result = Lists.newArrayListWithCapacity(refs.size());
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
index 66a7086..ac5cd8f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -47,6 +47,7 @@
 
 /** Serves an HTML page with detailed information about a ref. */
 public class RevisionServlet extends BaseServlet {
+  private static final long serialVersionUID = 1L;
   private static final Logger log = LoggerFactory.getLogger(RevisionServlet.class);
 
   private final Linkifier linkifier;
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
index 23033e0..097ef0c 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
@@ -115,7 +115,6 @@
 
   public void testParseNonVisibleCommitSha() throws Exception {
     RevCommit other = repo.commit().create();
-    RevCommit master = repo.branch("master").commit().create();
     assertEquals(null, parser.parse(other.name()));
 
     repo.branch("other").update(other);
@@ -197,7 +196,6 @@
             42),
         parser.parse(parent.name() + "^!"));
 
-    RevTag tag = repo.update("refs/tags/tag", repo.tag("tag", commit));
     assertEquals(
         new Result(
             Revision.peeled("tag", commit),
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
index 1427b9e..8224036 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
@@ -64,7 +64,6 @@
     RevCommit master = repo.branch("refs/heads/master").commit().parent(parent).create();
     String hex = master.name();
     String hexBranch = hex.substring(0, 10);
-    RevCommit hexCommit = repo.branch(hexBranch).commit().create();
 
     assertEquals(Type.LOG, getView("/repo/+/master").getType());
     assertEquals(Type.LOG, getView("/repo/+/" + hexBranch).getType());
@@ -188,9 +187,6 @@
   }
 
   public void testMultipleSlashes() throws Exception {
-    RevCommit master = repo.branch("refs/heads/master").commit().create();
-    GitilesView view;
-
     assertEquals(Type.HOST_INDEX, getView("//").getType());
     assertEquals(Type.REPOSITORY_INDEX, getView("//repo").getType());
     assertEquals(Type.REPOSITORY_INDEX, getView("//repo//").getType());
@@ -313,6 +309,7 @@
   private GitilesView getView(String pathAndQuery) throws ServletException, IOException {
     final AtomicReference<GitilesView> view = Atomics.newReference();
     HttpServlet testServlet = new HttpServlet() {
+      private static final long serialVersionUID = 1L;
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse res) {
         view.set(ViewFilter.getView(req));
