Intro to Takes
This commit is contained in:
parent
acd7d764e2
commit
15ab6e7a57
|
@ -78,6 +78,28 @@
|
|||
<artifactId>takes</artifactId>
|
||||
<version>1.19</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.velocity</groupId>
|
||||
<artifactId>velocity-engine-core</artifactId>
|
||||
<version>2.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.zaxxer</groupId>
|
||||
<artifactId>HikariCP</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.h2database</groupId>
|
||||
<artifactId>h2</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.json</groupId>
|
||||
<artifactId>javax.json-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish</groupId>
|
||||
<artifactId>javax.json</artifactId>
|
||||
<version>1.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<repositories>
|
||||
|
@ -87,10 +109,29 @@
|
|||
</repository>
|
||||
</repositories>
|
||||
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/webapp</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>hit-refresh</id>
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
|
|
|
@ -1,26 +1,103 @@
|
|||
package com.baeldung.takes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.takes.Request;
|
||||
import org.takes.Response;
|
||||
import org.takes.facets.fallback.Fallback;
|
||||
import org.takes.facets.fallback.FbChain;
|
||||
import org.takes.facets.fallback.FbStatus;
|
||||
import org.takes.facets.fallback.RqFallback;
|
||||
import org.takes.facets.fallback.TkFallback;
|
||||
import org.takes.facets.fork.FkRegex;
|
||||
import org.takes.facets.fork.Fork;
|
||||
import org.takes.facets.fork.TkFork;
|
||||
import org.takes.http.Exit;
|
||||
import org.takes.http.FtBasic;
|
||||
import org.takes.http.FtCli;
|
||||
import org.takes.tk.TkClasspath;
|
||||
import org.takes.tk.TkWrap;
|
||||
import org.takes.Take;
|
||||
import org.takes.facets.fork.FkRegex;
|
||||
import org.takes.facets.fork.TkFork;
|
||||
import org.takes.misc.Opt;
|
||||
import org.takes.rq.RqHref;
|
||||
import org.takes.rs.RsText;
|
||||
import org.takes.rs.RsWithBody;
|
||||
import org.takes.rs.RsWithStatus;
|
||||
import org.takes.rs.RsWithType;
|
||||
import org.takes.tk.TkSlf4j;
|
||||
|
||||
import com.zaxxer.hikari.HikariConfig;
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
|
||||
public final class TakesApp {
|
||||
|
||||
// public static void main(final String... args) throws Exception {
|
||||
// new FtBasic(new TkFork(
|
||||
// new FkRegex("/", "Hello, World!"),
|
||||
// new FkRegex("/index", new TakesIndex()),
|
||||
// new FkRegex("/contact", new TakesContact())
|
||||
// ),6060).start(Exit.NEVER);
|
||||
// }
|
||||
|
||||
|
||||
// public static void main(final String... args) throws Exception {
|
||||
// new FtBasic(new TkFork(new FkRegex("/", "hello, world... this is coming from Takes!")), 6060).start(Exit.NEVER);
|
||||
// }
|
||||
|
||||
public static void main(final String... args) throws Exception {
|
||||
new FtBasic(new TakesIndex(), 6060).start(Exit.NEVER);
|
||||
public static void main(final String... args) throws IOException, SQLException {
|
||||
new FtBasic(
|
||||
new TkFallback(
|
||||
new TkSlf4j(
|
||||
new TkFork(
|
||||
new FkRegex("/", "Hello, World!"),
|
||||
new FkRegex("/index", new TakesIndex()),
|
||||
new FkRegex("/contact", new TakesContact()),
|
||||
new FkRegex("\\A/createUser", new TakesCreateUser(TakesApp.dbConnection())),
|
||||
new FkRegex("\\A/readUser", new TakesReadUser(TakesApp.dbConnection()))
|
||||
)
|
||||
),
|
||||
new FbChain(
|
||||
new FbStatus(404, new RsText("sorry, page is absent")),
|
||||
new FbStatus(405, new RsText("this method is not allowed here")),
|
||||
new Fallback() {
|
||||
@Override
|
||||
public Opt<Response> route(final RqFallback req) {
|
||||
return new Opt.Single<Response>(
|
||||
new RsText(req.throwable().getMessage())
|
||||
);
|
||||
}
|
||||
})
|
||||
),
|
||||
6060
|
||||
).start(Exit.NEVER);
|
||||
}
|
||||
|
||||
|
||||
// public static void main(final String... args) throws IOException {
|
||||
//
|
||||
// new FtBasic(
|
||||
// new TkFork(
|
||||
// new Fork() {
|
||||
// @Override
|
||||
// public Opt<Response> route(Request req) throws Exception {
|
||||
// if (new RqHref.Base(req).href().path().equals("/entry")) {
|
||||
// return new Opt.Single<Response>(new RsWithStatus(new RsWithType(new RsWithBody("hello this is for request"), "text/html"), 200));
|
||||
// } else {
|
||||
// return new Opt.Single<Response>(null);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// ),6060).start(Exit.NEVER);
|
||||
//
|
||||
//
|
||||
// }
|
||||
|
||||
private static Connection dbConnection() throws SQLException {
|
||||
HikariConfig config = new HikariConfig();
|
||||
|
||||
config.setJdbcUrl("jdbc:h2:mem:devDB;DB_CLOSE_DELAY=-1;INIT=runscript from 'classpath:/db.sql'");
|
||||
config.setUsername("sa");
|
||||
config.setPassword("");
|
||||
|
||||
@SuppressWarnings("resource")
|
||||
HikariDataSource ds = new HikariDataSource(config);
|
||||
|
||||
return ds.getConnection();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package com.baeldung.takes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.takes.Request;
|
||||
import org.takes.Response;
|
||||
import org.takes.Take;
|
||||
import org.takes.rs.RsWithBody;
|
||||
import org.takes.rs.RsWithStatus;
|
||||
import org.takes.rs.RsWithType;
|
||||
|
||||
public final class TakesContact implements Take {
|
||||
|
||||
@Override
|
||||
public Response act(Request req) throws IOException, SQLException {
|
||||
return new RsWithStatus(new RsWithType(new RsWithBody("<html>"
|
||||
+ "<head>"
|
||||
+ "<title>Takes Application - Contact</title></head>"
|
||||
+ "<body style='color:green'>"
|
||||
+ "Contact us at @baeldung.com"
|
||||
+ "</body></html>"), "text/html"), 200);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package com.baeldung.takes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.takes.Request;
|
||||
import org.takes.Response;
|
||||
import org.takes.Take;
|
||||
import org.takes.misc.Href;
|
||||
import org.takes.rq.RqForm;
|
||||
import org.takes.rq.RqHref;
|
||||
import org.takes.rq.form.RqFormSmart;
|
||||
import org.takes.rs.RsHtml;
|
||||
import org.takes.rs.RsVelocity;
|
||||
|
||||
public final class TakesCreateUser implements Take {
|
||||
|
||||
public static Connection con;
|
||||
|
||||
TakesCreateUser(Connection connection) {
|
||||
con = connection;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response act(final Request req) throws IOException, SQLException {
|
||||
|
||||
RqForm form = new RqFormSmart(req);
|
||||
Iterable<String> idParam = form.param("id");
|
||||
Iterable<String> userParam = form.param("user");
|
||||
|
||||
int id = Integer.parseInt(idParam.iterator().next());
|
||||
String user = userParam.iterator().next();
|
||||
|
||||
final String INSERT_SQL_QUERY = "insert into take_user values ("+id+", "+"'"+user+"')";
|
||||
|
||||
try (PreparedStatement pst = con.prepareStatement(INSERT_SQL_QUERY)) {
|
||||
System.out.println(pst.executeUpdate());
|
||||
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return new RsHtml(new RsVelocity(this.getClass().getResource("/templates/index.vm") ,new RsVelocity.Pair("userName", "Anshul")));
|
||||
}
|
||||
|
||||
}
|
|
@ -1,25 +1,20 @@
|
|||
package com.baeldung.takes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.takes.Request;
|
||||
import org.takes.Response;
|
||||
import org.takes.Take;
|
||||
import org.takes.rs.RsHtml;
|
||||
import org.takes.rs.RsVelocity;
|
||||
import org.takes.rs.RsWithBody;
|
||||
import org.takes.rs.RsWithStatus;
|
||||
import org.takes.rs.RsWithType;
|
||||
|
||||
public final class TakesIndex implements Take {
|
||||
|
||||
// @Override
|
||||
// public Response act(Request req) throws IOException {
|
||||
// return new RsWithStatus(new RsWithType(new RsWithBody("<html>Hello, world!</html>"), "text/html"), 200);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public Response act(Request req) {
|
||||
return new RsVelocity("Hello, ${name}", new RsVelocity.Pair("name", "Jeffrey"));
|
||||
public Response act(final Request req) throws IOException, SQLException {
|
||||
|
||||
return new RsHtml(new RsVelocity(this.getClass().getResource("/templates/index.vm") ,new RsVelocity.Pair("userName", "Anshul")));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
package com.baeldung.takes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import javax.json.Json;
|
||||
import javax.json.JsonStructure;
|
||||
|
||||
import org.takes.Request;
|
||||
import org.takes.Response;
|
||||
import org.takes.Take;
|
||||
import org.takes.misc.Href;
|
||||
import org.takes.misc.VerboseIterable;
|
||||
import org.takes.rq.RqHref;
|
||||
import org.takes.rs.RsJson;
|
||||
|
||||
|
||||
public final class TakesReadUser implements Take {
|
||||
|
||||
public static Connection con;
|
||||
|
||||
TakesReadUser(Connection connection) {
|
||||
con = connection;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response act(final Request req) throws IOException, SQLException {
|
||||
Href href = new RqHref.Base(req).href();
|
||||
Iterable<String> ids = href.param("id");
|
||||
int id = Integer.parseInt((String) ids.iterator().next());
|
||||
|
||||
final String SELECT_SQL_QUERY = "select id, user from take_user where id = " + id;
|
||||
JsonStructure json = null;
|
||||
try (PreparedStatement pst = con.prepareStatement(SELECT_SQL_QUERY); ResultSet rs = pst.executeQuery();) {
|
||||
while (rs.next()) {
|
||||
json = Json.createObjectBuilder()
|
||||
.add("id", rs.getInt("id"))
|
||||
.add("user", rs.getString("user"))
|
||||
.build();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return new RsJson(json);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
package com.baeldung.takes;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.takes.Request;
|
||||
import org.takes.Response;
|
||||
import org.takes.Take;
|
||||
import org.takes.rs.RsText;
|
||||
|
||||
public final class TakesServletApp implements Take {
|
||||
|
||||
private final ServletContext ctx;
|
||||
|
||||
public TakesServletApp(final ServletContext context) {
|
||||
this.ctx = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response act(final Request req) {
|
||||
return new RsText("Hello servlet!");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
drop table if exists take_user;
|
||||
|
||||
create table take_user(
|
||||
id numeric,
|
||||
user varchar(255),
|
||||
constraint pk_take_user primary key (id)
|
||||
);
|
|
@ -0,0 +1,9 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Index</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Takes Web Application</h1>
|
||||
<h2>Welcome, ${userName}</h2>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue