├── .classpath ├── .gitattributes ├── .gitignore ├── .project ├── .settings ├── org.eclipse.jdt.core.prefs └── org.eclipse.m2e.core.prefs ├── README.md ├── pom.xml ├── src └── main │ ├── java │ ├── com │ │ └── spark │ │ │ ├── controller │ │ │ ├── Controller.java │ │ │ ├── GreetController.java │ │ │ ├── IndexController.java │ │ │ └── UserController.java │ │ │ ├── model │ │ │ └── User.java │ │ │ └── services │ │ │ └── UserService.java │ └── spark │ │ └── Main.java │ └── resources │ └── templates │ ├── greet │ └── greet.html │ ├── index │ └── index.html │ └── layout.html └── target └── classes ├── com └── spark │ ├── controller │ ├── Controller.class │ ├── GreetController.class │ ├── IndexController.class │ └── UserController.class │ ├── model │ └── User.class │ └── services │ └── UserService.class ├── spark └── Main.class └── templates ├── greet └── greet.html ├── index └── index.html └── layout.html /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear on external disk 35 | .Spotlight-V100 36 | .Trashes 37 | 38 | # Directories potentially created on remote AFP share 39 | .AppleDB 40 | .AppleDesktop 41 | Network Trash Folder 42 | Temporary Items 43 | .apdisk 44 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | spark 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 12 | org.eclipse.jdt.core.compiler.source=1.8 13 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # sparkjava 2 | Setting up basic project in sparkjava showing how to organize code as MVC in sparkjava. 3 | 4 | Dependencies sparkjava a micro web framework 5 | 6 | 7 | com.sparkjava 8 | spark-core 9 | 2.3 10 | 11 | 12 | In Main.java we have all the routes 13 | 14 | All the controllers are in controller folder which extends the base Controller class 15 | corresponding to every Controller class there a folder in templates folder 16 | which contains all the templates related to Controller 17 | 18 | We are using a hashMap as database which act as a in cache database and in public/asset folder we will be having 19 | all our static assets. 20 | 21 | For templating we are using Apache velocity templating library. 22 | 23 | 24 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | com.spark 5 | spark 6 | 0.0.1-SNAPSHOT 7 | 8 | 9 | com.sparkjava 10 | spark-core 11 | 2.3 12 | 13 | 14 | com.sparkjava 15 | spark-template-velocity 16 | 2.3 17 | 18 | 19 | com.google.code.gson 20 | gson 21 | 2.4 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/main/java/com/spark/controller/Controller.java: -------------------------------------------------------------------------------- 1 | package com.spark.controller; 2 | 3 | import com.google.gson.Gson; 4 | 5 | 6 | public class Controller { 7 | public static final String LAYOUT_FILE = "templates/layout.html"; 8 | public static Gson gson = new Gson(); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/spark/controller/GreetController.java: -------------------------------------------------------------------------------- 1 | package com.spark.controller; 2 | 3 | import java.util.HashMap; 4 | 5 | import spark.ModelAndView; 6 | import spark.Request; 7 | import spark.Response; 8 | 9 | public class GreetController extends Controller { 10 | public GreetController() { 11 | } 12 | 13 | public static ModelAndView greet(Request req, Response res) { 14 | HashMap model = new HashMap(); 15 | model.put("template", "templates/greet/greet.html"); 16 | model.put("name", req.params("name")); 17 | return new ModelAndView(model, LAYOUT_FILE); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/spark/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package com.spark.controller; 2 | 3 | import java.util.HashMap; 4 | 5 | import spark.ModelAndView; 6 | import spark.Request; 7 | import spark.Response; 8 | 9 | public class IndexController extends Controller { 10 | public IndexController(){ 11 | 12 | } 13 | public static ModelAndView index(Request req, Response res) { 14 | HashMap model = new HashMap(); 15 | model.put("template", "templates/index/index.html"); 16 | model.put("name", "Rohit Verma"); 17 | return new ModelAndView(model, LAYOUT_FILE); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/spark/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.spark.controller; 2 | 3 | import org.eclipse.jetty.http.HttpStatus; 4 | 5 | import spark.QueryParamsMap; 6 | import spark.Request; 7 | import spark.Response; 8 | 9 | import com.spark.services.UserService; 10 | 11 | public class UserController extends Controller { 12 | public static String getAllUsers(Request req, Response res) { 13 | UserService userService = new UserService(); 14 | return gson.toJson(userService.getAllUser()); 15 | } 16 | 17 | public static int createUser(Request req, Response res) { 18 | UserService userService = new UserService(); 19 | QueryParamsMap queryParam = req.queryMap(); 20 | userService.creatUser(queryParam.get("name").value(), 21 | Integer.parseInt(queryParam.get("age").value())); 22 | return HttpStatus.CREATED_201; 23 | } 24 | 25 | public static String getUser(Request req, Response res) { 26 | UserService userService = new UserService(); 27 | return gson.toJson(userService.getUser(Integer.parseInt(req 28 | .params("id")))); 29 | } 30 | 31 | public static int deleteUser(Request req, Response res) { 32 | UserService userService = new UserService(); 33 | userService.deleteUser(Integer.parseInt(req.params("id"))); 34 | return HttpStatus.OK_200; 35 | } 36 | 37 | public static int updateUser(Request req, Response res) { 38 | UserService userService = new UserService(); 39 | QueryParamsMap queryParam = req.queryMap(); 40 | userService.updateUser(Integer.parseInt(req.params("id")), queryParam 41 | .get("name").value(), Integer.parseInt(queryParam.get("age") 42 | .value())); 43 | return HttpStatus.OK_200; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/spark/model/User.java: -------------------------------------------------------------------------------- 1 | package com.spark.model; 2 | 3 | public class User { 4 | private String name; 5 | private int id; 6 | private int age; 7 | 8 | public String getName() { 9 | return name; 10 | } 11 | 12 | public void setName(String name) { 13 | this.name = name; 14 | } 15 | 16 | public int getId() { 17 | return id; 18 | } 19 | 20 | public void setId(int id) { 21 | this.id = id; 22 | } 23 | 24 | public int getAge() { 25 | return age; 26 | } 27 | 28 | public void setAge(int age) { 29 | this.age = age; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/spark/services/UserService.java: -------------------------------------------------------------------------------- 1 | package com.spark.services; 2 | 3 | import java.util.Collection; 4 | import java.util.HashMap; 5 | 6 | import com.spark.model.User; 7 | 8 | public class UserService { 9 | 10 | // using in memory cache as database this needs to be replaced by database 11 | public static HashMap users = new HashMap(); 12 | 13 | public void creatUser(String name, int age) { 14 | User user = new User(); 15 | user.setAge(age); 16 | user.setName(name); 17 | user.setId(users.size()); 18 | users.put(user.getId(), user); 19 | } 20 | 21 | public User getUser(int id) { 22 | return users.get(id); 23 | } 24 | 25 | public Collection getAllUser() { 26 | return users.values(); 27 | } 28 | 29 | public void deleteUser(int id) { 30 | users.remove(id); 31 | } 32 | 33 | public void updateUser(int id, String name, int age) { 34 | User user = users.get(id); 35 | user.setAge(age); 36 | user.setName(name); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/spark/Main.java: -------------------------------------------------------------------------------- 1 | package spark; 2 | 3 | import static spark.Spark.get; 4 | import static spark.Spark.post; 5 | import static spark.Spark.put; 6 | import static spark.Spark.delete; 7 | import spark.template.velocity.VelocityTemplateEngine; 8 | 9 | import com.spark.controller.GreetController; 10 | import com.spark.controller.IndexController; 11 | import com.spark.controller.UserController; 12 | 13 | public class Main { 14 | public static final VelocityTemplateEngine VELOCITY_ENGINE = new VelocityTemplateEngine(); 15 | 16 | public static void main(String[] args) { 17 | setUpRoutes(); 18 | } 19 | 20 | private static void setUpRoutes() { 21 | get("/", IndexController::index, VELOCITY_ENGINE); 22 | get("/greet/:name", GreetController::greet, VELOCITY_ENGINE); 23 | get("/users", UserController::getAllUsers); 24 | get("/users/:id", UserController::getUser); 25 | 26 | post("/user", UserController::createUser); 27 | put("/user/update/:id",UserController::updateUser); 28 | delete("user/delete/:id", UserController::deleteUser); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/resources/templates/greet/greet.html: -------------------------------------------------------------------------------- 1 |
2 |

Welcome $name

3 |
-------------------------------------------------------------------------------- /src/main/resources/templates/index/index.html: -------------------------------------------------------------------------------- 1 |
2 |

Hello $name

3 |
-------------------------------------------------------------------------------- /src/main/resources/templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Hello Friend! 6 | 8 | 9 | 10 |
#parse( $template )
11 | 12 | -------------------------------------------------------------------------------- /target/classes/com/spark/controller/Controller.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slrohit/spark/7adb13cce9dfffc203d8dab0e9a644ca6670da1e/target/classes/com/spark/controller/Controller.class -------------------------------------------------------------------------------- /target/classes/com/spark/controller/GreetController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slrohit/spark/7adb13cce9dfffc203d8dab0e9a644ca6670da1e/target/classes/com/spark/controller/GreetController.class -------------------------------------------------------------------------------- /target/classes/com/spark/controller/IndexController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slrohit/spark/7adb13cce9dfffc203d8dab0e9a644ca6670da1e/target/classes/com/spark/controller/IndexController.class -------------------------------------------------------------------------------- /target/classes/com/spark/controller/UserController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slrohit/spark/7adb13cce9dfffc203d8dab0e9a644ca6670da1e/target/classes/com/spark/controller/UserController.class -------------------------------------------------------------------------------- /target/classes/com/spark/model/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slrohit/spark/7adb13cce9dfffc203d8dab0e9a644ca6670da1e/target/classes/com/spark/model/User.class -------------------------------------------------------------------------------- /target/classes/com/spark/services/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slrohit/spark/7adb13cce9dfffc203d8dab0e9a644ca6670da1e/target/classes/com/spark/services/UserService.class -------------------------------------------------------------------------------- /target/classes/spark/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slrohit/spark/7adb13cce9dfffc203d8dab0e9a644ca6670da1e/target/classes/spark/Main.class -------------------------------------------------------------------------------- /target/classes/templates/greet/greet.html: -------------------------------------------------------------------------------- 1 |
2 |

Welcome $name

3 |
-------------------------------------------------------------------------------- /target/classes/templates/index/index.html: -------------------------------------------------------------------------------- 1 |
2 |

Hello $name

3 |
-------------------------------------------------------------------------------- /target/classes/templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Hello Friend! 6 | 8 | 9 | 10 |
#parse( $template )
11 | 12 | --------------------------------------------------------------------------------