Git Product home page Git Product logo

jetty4a's Introduction

Jetty Web Server For Android

icon

##Features

##Install Jetty4A

##Deploy Web App

  • convert .war file to .j4a by war2j4a tools
  • copy the .j4a file to /jetty4a/webapp

##Use Code

  • clone the code:

     cd <target directory>
     git clone https://github.com/Centny/Centny
     git clone https://github.com/Centny/Jetty4A
    
  • open the Jetty4A project by ADT

##Install war2j4a tools

  • make sure your DX_HOME(where contain dx tools direcotyr) environment value had configured.

  • run blew script in console:

     cd */Jetty4A/script
     chmod +x war2j4a
     sudo cp war2j4a /usr/local/bin
    

##Develop Normal Web App if the web app is normal .war app,you can convert it to .j4a file by war2j4a.

##Develop Custom Web App if yout want to develop web app by using Jetty API,like adding handler by code/Using Basic Authorization:

  • Prepare jetty-all-server-8.*.jar,jsch-*.jar,servlet-api-3.*.jar,commons-io-*.jar,you can download by yourself or you can copy from */Jetty4A/libs
  • open eclipse User Libraries panel and add library by name Jetty4A,then add all jars in step one to Jetty4A library.
  • New dynamic web project in eclipse
  • Add Jetty4A library to project build path.
  • if yout want to add ant build for yout project,donwload sample build.xml to project and modify it.
  • see detail:

**Note:**see example project Jetty4A/J4AWebDev

##Start Web Server by JUnit

  • add jetty4a.properties file in src/:

     #configure jetty4a.
     J4A_LOG_CLASSES=
     J4A_LOG_LEVEL=DEBUG
     J4A_LISTEN_PORT=8080
     org.eclipse.jetty.util.log.class=org.centny.jetty4a.server.log.Jetty4ALog
     org.eclipse.LEVEL=INFO
     j4a.dnsdynamic.class=org.centny.jetty4a.server.api.DnsDynamicOrgImpl
     j4a.connector.builder.class=org.centny.jetty4a.server.api.DefaultConnectorBuilder
     org.centny.LEVEL=DEBUG
    
  • add JUnit test class:

     public class WebDevTest {
     private static int listenPort__ = 8080;
     @Test
     public void testMgw() throws Exception {
     	JettyDevServer.initWebDev();
     	try {
     		String sport = System.getProperty("J4A_LISTEN_PORT");
     		listenPort__ = Integer.parseInt(sport);
     	} catch (Exception e) {
     		listenPort__ = 8080;
     	}
     	JettyServer jds = JettyServer.createServer(JettyDevServer.class,
     			listenPort__);
     	jds.start();
     	jds.join();
     }
     }
    

##Using Custom Base Authroization

  • create a normal web app

  • add Jetty4A library to project(see Develop Custom Web App)

  • add base authorization configure to web.xml:

    <security-constraint>
     <web-resource-collection>
       <web-resource-name>WDevRealm</web-resource-name>
       <url-pattern>/*</url-pattern>
     </web-resource-collection>
     <auth-constraint>
       <role-name>log</role-name>
     </auth-constraint>
    </security-constraint>
    <login-config>
     <auth-method>BASIC</auth-method>
     <realm-name>WDevRealm</realm-name>
    </login-config>
    
  • create Realm.properties file in WEB-INF,add content like below:

     #the admin for J4AWebLog
     #default password:j4a
     admin: CRYPT:adj7rHs7GA9YQ,log,wdir,dev
     #default password:log
     log: CRYPT:lo9V8yD.yQMps,log
     #default password:wdir
     wdir: CRYPT:wdHLqn0AYYU4w,wdir
    

    **Note:**about how to create Hash Realm file,see Jetty document.

  • add a class org.centny.wdev.WebDev extends ServerListener


add code to **init** method to initial **HashLoginService**:
```
File wrealm = new File(this.croot, "Realm.properties");
if (wrealm.exists()) {
	this.log.info("initial WDev Realm...");
	hls = new HashLoginService("WDevRealm");
	hls.setConfig(wrealm.getAbsolutePath());
	hls.setRefreshInterval(60);
	try {
		hls.start();
	} catch (Exception e) {
		this.log.warn("initial WDev Realm error", e);
		this.hls = null;
	}
} else {
	this.log.info("WDev Realm file not found...");
	this.hls = null;
}
```

add code to initWebApp method to make affectived:

```
if (this.hls != null) {
	wapp.getSecurityHandler().setLoginService(hls);
}
```
  • add web.properties file to setting ServerListener or WebContext configure:

     #------------------------------------------------------------------------------
     #  Properties external.
     #  it can use all android default env and system properties field.
     #  like 
     #   EXTERNAL_STORAGE the external storage path.
     #  external env name:
     #   J4A_EDIR   the jetty4a external path.
     #   J4A_DDIR   the jetty4a deploy path.
     #   J4A_LDIR   the jetty4a log path.
     #   J4A_CDIR   the jetty4a configure path.
     #------------------------------------------------------------------------------
     #the Web configure.
     WebName=J4AWebDev
     ServerListener=org.centny.wdev.WebDev
     #configure for the WebAppContext,it will be used when web.xml exist.
     WebResourceBase=$(J4A_LDIR)
     WebContextPath=/log
    

##Configure HttpServlet by code

  • add normal HttpServlet as standard Web App:

public class ShowServlet extends HttpServlet { private static final long serialVersionUID = 2342757834042191580L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { StringBuffer sb = new StringBuffer(); sb.append(""); // Environment. sb.append("

Environment:
"); for (String key : System.getenv().keySet()) { sb.append(""); } sb.append("
" + key + "" + System.getenv(key) + "
"); sb.append("

"); // Properties. sb.append("
Properties:
"); for (Object key : System.getProperties().keySet()) { sb.append(""); } sb.append("
" + key + "" + System.getProperty(key + "") + "
"); sb.append(""); resp.getOutputStream().write(sb.toString().getBytes()); } } ```

  • add a class org.centny.wdev.WebDev extends ServerListener

add configure code:
```
@Override
public Handler create(ClassLoader loader, Properties webp) {
	ContextHandlerCollection chc = new ContextHandlerCollection();
	// add dev path for develop command.
	WebAppContext wapp;
	wapp = new WebAppContext();
	wapp.setParentLoaderPriority(true);
	String wpath = webp.getProperty(J4A_WDIR);
	wapp.setResourceBase(wpath);
	wapp.setContextPath("/dev");
	if (this.hls != null) {
		wapp.getSecurityHandler().setLoginService(hls);
	}
	File web = new File(this.croot, "DevWeb.xml");
	if (web.exists()) {
		wapp.setDescriptor(web.getAbsolutePath());
	}
	wapp.addServlet(new ServletHolder(new ShowServlet()), "/show.cmd");
	chc.addHandler(wapp);
	return chc;
}
```

**Note:**Jetty have other configure way,see Jetty document.

##Add Custom environment value to System.getProperties

  • add env.peroerties file to (sdcard path)/jetty4a/config
  • add key value by key=value

##Configure dynamic DNS

  • add DnsDynamic.properties file to (sdcard path)/jetty4a/config

  • add blew code:

     #configure DnsDynamic
     USER=** #the username
     PASS=** #the password
     HOST=** #the dnsdynamic server host.
     ####################
     #the period time for timer
     #if not set,timer will now started.
     PERIOD=10000
    

**Note:**the Jy4a default implemetation is http://dnsdynamic.org

##Custom dynamic DNS implementation see example: J4AExtSample project in Jetty4A

  • add class org.centny.j4aext.CustomDnsDynamicImpl implements DnsDynamic.Listener:

     public class CustomDnsDynamicImpl implements DnsDynamic.Listener {
     	Logger log = Log.getLogger(CustomDnsDynamicImpl.class);
     	@Override
     	public void update(DnsDynamic dns) {
     		this.log.debug("upate.........");
     	}
     }
    
  • update jetty4a.properties to:

     j4a.dnsdynamic.class=org.centny.j4aext.CustomDnsDynamicImpl
    

##Custom Jetty ConnectorBuilder see example: J4AExtSample project in Jetty4A

  • add class extends org.centny.j4aext.CustomConnectorBuilder implements ConnectorBuilder

     public class CustomConnectorBuilder implements ConnectorBuilder {
     	Logger log = Log.getLogger(CustomConnectorBuilder.class);
     	@Override
     	public Connector create(int port) {
     		QueuedThreadPool threadPool = new QueuedThreadPool();
     		threadPool.setMaxThreads(10);
     		SelectChannelConnector connector = new SelectChannelConnector();
     		connector.setThreadPool(threadPool);
     		connector.setPort(9000);
     		this.log.debug("building.........");
     		return connector;
     	}
     }
    
  • update jetty4a.properties to:

     j4a.connector.builder.class=org.centny.j4aext.CustomConnectorBuilder
    

##Other Web App in Jy4a

jetty4a's People

Contributors

centny avatar

Stargazers

 avatar Septiyan Andika avatar suiyuchen avatar Louie de la Rosa avatar

Watchers

suiyuchen avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.