Задачка была сделать так, чтобы по урлу http://127.0.0.1:8080/context вытаскивалось содержимое папки context корня проекта (html/css/js). Причем если я соберу war И задеплою на сервак, то корнем проекта будет считаться корневая папка вебконтейнера. Если запрашиваемого файла нет, создаю новый.
Велосипед короче очередной. Но надо было быстро.
Вот архив.
Вот основной сервлет
Вот web.xml
И pom.xml
Проект собирается
mvn clean
mvn package
mvn war:war
Стартовать его можно
mvn jetty:run
Может пригодится кому
Велосипед короче очередной. Но надо было быстро.
Вот архив.
Вот основной сервлет
package com.apofig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; public class SampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { try { String context = req.getContextPath(); if (context.startsWith("/")) context = context.substring(1); String path = req.getServletPath(); if (path.equals("/") || path.equals("")) path = "/index.html"; String fileName = context + path; File file = new File(fileName); if (!file.exists()) { file.createNewFile(); } String mimeType = getServletContext().getMimeType(file.getPath()); resp.setContentType(mimeType); resp.setContentLength((int) file.length()); if (mimeType == null) { resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } write(resp, file); } catch (Exception e) { e.printStackTrace(); } } // thanks to http://stackoverflow.com/questions/8623709/output-an-image-file-from-a-servlet private void write(HttpServletResponse resp, File file) { try { OutputStream out = null; FileInputStream in = null; try { in = new FileInputStream(file); out = resp.getOutputStream(); // Copy the contents of the file to the output stream byte[] buf = new byte[1024]; int count = 0; while ((count = in.read(buf)) >= 0) { out.write(buf, 0, count); } } finally { if (out != null) out.close(); if (in != null) in.close(); } } catch (Exception e) { e.printStackTrace(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } }
Вот web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>WebSocketServer</display-name> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>com.apofig.SampleServlet</servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
И pom.xml
<?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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>WebServer</groupId> <artifactId>WebServer</artifactId> <version>1.0-SNAPSHOT</version> <properties> <jetty.version>8.1.10.v20130312</jetty.version> </properties> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>${jetty.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-client</artifactId> <version>${jetty.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>${jetty.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-jsp</artifactId> <version>${jetty.version}</version> <scope>compile</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <filtering>true</filtering> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${jetty.version}</version> <configuration> <webApp> <contextPath>/context</contextPath> </webApp> <stopPort>9999</stopPort> <stopKey>foo</stopKey> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <encoding>utf8</encoding> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-jspc-maven-plugin</artifactId> <version>${jetty.version}</version> <executions> <execution> <id>jspc</id> <goals> <goal>jspc</goal> </goals> <configuration> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <webXml>${basedir}/target/web.xml</webXml> </configuration> </plugin> </plugins> </build> </project>
Проект собирается
mvn clean
mvn package
mvn war:war
Стартовать его можно
mvn jetty:run
Может пригодится кому
Комментариев нет:
Отправить комментарий