added source code for VRaptor
This commit is contained in:
@@ -263,6 +263,7 @@
|
||||
<module>deeplearning4j</module>
|
||||
<module>spring-boot-admin</module>
|
||||
<module>lucene</module>
|
||||
<module>vraptor</module>
|
||||
</modules>
|
||||
|
||||
<dependencies>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
/target/
|
||||
/.idea/
|
||||
/src/main/webapp/WEB-INF/classes/
|
||||
@@ -0,0 +1,13 @@
|
||||
# VRaptor blank project
|
||||
|
||||
This is a blank project to help you to use VRaptor. You can easily import in you IDE as Maven project.
|
||||
|
||||
Este é um projeto em branco para ajudar você a usar o VRaptor. Você pode facilmente importá-lo na sua IDE favorita como um projeto Maven.
|
||||
|
||||
Após criar seu projeto você pode rodá-lo com um tomcat7 ou +:
|
||||
|
||||
```
|
||||
mvn tomcat7:run
|
||||
```
|
||||
|
||||
Cuidado para *jamais* executar `mvn tomcat:run` pois ele usará um tomcat6 (incompatível).
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
<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>com.baeldung</groupId>
|
||||
<artifactId>vraptor</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<description>A demo project to start using VRaptor 4</description>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<weld.version>2.1.2.Final</weld.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>br.com.caelum</groupId>
|
||||
<artifactId>vraptor</artifactId>
|
||||
<version>4.2.0-RC3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jboss.weld.servlet</groupId>
|
||||
<artifactId>weld-servlet-core</artifactId>
|
||||
<version>2.1.2.Final</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.jboss.spec.javax.el</groupId>
|
||||
<artifactId>jboss-el-api_3.0_spec</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jboss.weld</groupId>
|
||||
<artifactId>weld-core-impl</artifactId>
|
||||
<version>2.1.2.Final</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.jboss.spec.javax.el</groupId>
|
||||
<artifactId>jboss-el-api_3.0_spec</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.el</groupId>
|
||||
<artifactId>el-api</artifactId>
|
||||
<version>2.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-validator-cdi</artifactId>
|
||||
<version>5.1.1.Final</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>jstl</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
<version>1.7.5</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>br.com.caelum.vraptor</groupId>
|
||||
<artifactId>vraptor-freemarker</artifactId>
|
||||
<version>4.1.0-RC3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>br.com.caelum.vraptor</groupId>
|
||||
<artifactId>vraptor-hibernate</artifactId>
|
||||
<version>4.0.4</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>8.0.8-dmr</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mindrot</groupId>
|
||||
<artifactId>jbcrypt</artifactId>
|
||||
<version>0.4</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.freemarker</groupId>
|
||||
<artifactId>freemarker</artifactId>
|
||||
<version>2.3.27-incubating</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>vraptor</finalName>
|
||||
<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.tomcat.maven</groupId>
|
||||
<artifactId>tomcat7-maven-plugin</artifactId>
|
||||
<version>2.1</version>
|
||||
<configuration>
|
||||
<path>/</path>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.baeldung.config;
|
||||
|
||||
import com.baeldung.models.User;
|
||||
|
||||
import javax.enterprise.context.SessionScoped;
|
||||
import java.io.Serializable;
|
||||
|
||||
@SessionScoped
|
||||
public class UserInfo implements Serializable {
|
||||
|
||||
private User user;
|
||||
|
||||
|
||||
public UserInfo() {}
|
||||
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setUser(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package com.baeldung.controllers;
|
||||
|
||||
import br.com.caelum.vraptor.Controller;
|
||||
import br.com.caelum.vraptor.Path;
|
||||
import br.com.caelum.vraptor.Result;
|
||||
import br.com.caelum.vraptor.freemarker.FreemarkerView;
|
||||
import br.com.caelum.vraptor.validator.Validator;
|
||||
import com.baeldung.config.UserInfo;
|
||||
import com.baeldung.daos.UserDao;
|
||||
import com.baeldung.models.User;
|
||||
import org.mindrot.jbcrypt.BCrypt;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@Controller
|
||||
public class AuthController {
|
||||
|
||||
private Validator validator;
|
||||
private UserDao userDao;
|
||||
private Result result;
|
||||
private UserInfo userInfo;
|
||||
private Logger logger = Logger.getLogger(getClass().getName());
|
||||
|
||||
public AuthController() {
|
||||
this(null, null, null, null);
|
||||
}
|
||||
|
||||
@Inject
|
||||
public AuthController(Validator validator, UserDao userDao, Result result, UserInfo userInfo) {
|
||||
this.validator = validator;
|
||||
this.userDao = userDao;
|
||||
this.result = result;
|
||||
this.userInfo = userInfo;
|
||||
}
|
||||
|
||||
@Path("/register")
|
||||
public void register(User user, HttpServletRequest request) {
|
||||
|
||||
if(request.getMethod().equals("GET")) {
|
||||
result.use(FreemarkerView.class).withTemplate("auth/register");
|
||||
}
|
||||
else if(request.getMethod().equals("POST")) {
|
||||
validator.validate(user);
|
||||
validator.onErrorRedirectTo(this).register(user, request);
|
||||
if(!user.getPassword().equals(request.getParameter("password_confirmation"))) {
|
||||
result.include("error", "Passwords Do Not Match");
|
||||
result.redirectTo(this).register(null, request);
|
||||
}
|
||||
user.setPassword(BCrypt.hashpw(user.getPassword(), BCrypt.gensalt()));
|
||||
Object resp = userDao.add(user);
|
||||
if(resp != null) {
|
||||
result.include("status", "Registration Successful! Now Login");
|
||||
result.redirectTo(this).login(request);
|
||||
} else {
|
||||
result.include("error", "There was an error during registration");
|
||||
result.redirectTo(this).register(user, request);
|
||||
}
|
||||
|
||||
} else {
|
||||
result.notFound();
|
||||
}
|
||||
}
|
||||
|
||||
@Path("/login")
|
||||
public void login(HttpServletRequest request) {
|
||||
|
||||
if(request.getMethod().equals("GET")) {
|
||||
result.use(FreemarkerView.class).withTemplate("auth/login");
|
||||
}
|
||||
else if(request.getMethod().equals("POST")) {
|
||||
|
||||
if (request.getParameter("user.email").isEmpty() || request.getParameter("user.password").isEmpty()) {
|
||||
result.include("error", "Email/Password is Required!");
|
||||
result.redirectTo(AuthController.class).login(request);
|
||||
}
|
||||
|
||||
User user = userDao.findByEmail(request.getParameter("user.email"));
|
||||
if (Objects.nonNull(user) && BCrypt.checkpw(request.getParameter("user.password"), user.getPassword())) {
|
||||
userInfo.setUser(user);
|
||||
result.include("status", "Login Successful!");
|
||||
result.redirectTo(IndexController.class).index();
|
||||
} else {
|
||||
result.include("error", "Email/Password Does Not Match!");
|
||||
result.redirectTo(AuthController.class).login(request);
|
||||
}
|
||||
}
|
||||
else {
|
||||
result.include("error", "Invalid Request");
|
||||
result.notFound();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.baeldung.controllers;
|
||||
|
||||
import br.com.caelum.vraptor.Controller;
|
||||
import br.com.caelum.vraptor.Path;
|
||||
import br.com.caelum.vraptor.Result;
|
||||
import br.com.caelum.vraptor.freemarker.FreemarkerView;
|
||||
import com.baeldung.daos.PostDao;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@Controller
|
||||
public class IndexController {
|
||||
|
||||
private PostDao postDao;
|
||||
private final Result result;
|
||||
private static final Logger logger = LoggerFactory.getLogger(IndexController.class);
|
||||
|
||||
public IndexController() {
|
||||
this(null, null);
|
||||
}
|
||||
|
||||
@Inject
|
||||
public IndexController(Result result, PostDao postDao) {
|
||||
this.result = result;
|
||||
this.postDao = postDao;
|
||||
}
|
||||
|
||||
@Path("/")
|
||||
public void index() {
|
||||
result.include("posts", postDao.all());
|
||||
result.use(FreemarkerView.class).withTemplate("index");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.baeldung.controllers;
|
||||
|
||||
import br.com.caelum.vraptor.Controller;
|
||||
import br.com.caelum.vraptor.Get;
|
||||
import br.com.caelum.vraptor.Path;
|
||||
import br.com.caelum.vraptor.Result;
|
||||
import br.com.caelum.vraptor.freemarker.FreemarkerView;
|
||||
import br.com.caelum.vraptor.validator.Validator;
|
||||
import com.baeldung.config.UserInfo;
|
||||
import com.baeldung.daos.PostDao;
|
||||
import com.baeldung.models.Post;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@Controller
|
||||
public class PostController {
|
||||
|
||||
private Result result;
|
||||
private Logger logger = Logger.getLogger(PostController.class.getName());
|
||||
private PostDao postDao;
|
||||
private UserInfo userInfo;
|
||||
private Validator validator;
|
||||
|
||||
public PostController() {}
|
||||
|
||||
@Inject
|
||||
public PostController(Result result, PostDao postDao, UserInfo userInfo, Validator validator) {
|
||||
this.result = result;
|
||||
this.postDao = postDao;
|
||||
this.userInfo = userInfo;
|
||||
this.validator = validator;
|
||||
}
|
||||
|
||||
|
||||
@Path(value = "/post/add")
|
||||
public void add(Post post, HttpServletRequest request) {
|
||||
|
||||
if(request.getMethod().equals("GET")) {
|
||||
|
||||
if(Objects.isNull(userInfo.getUser())) {
|
||||
result.include("error", "Please Login to Proceed");
|
||||
result.redirectTo(AuthController.class).login(request);
|
||||
return;
|
||||
}
|
||||
|
||||
result.use(FreemarkerView.class).withTemplate("posts/add");
|
||||
}
|
||||
else if(request.getMethod().equals("POST")) {
|
||||
|
||||
post.setAuthor(userInfo.getUser());
|
||||
|
||||
validator.validate(post);
|
||||
if(validator.hasErrors())
|
||||
result.include("error", "Post's Title (min of 5 chars) and Body (min of 10 chars) is Required");
|
||||
validator.onErrorRedirectTo(this).add(post, request);
|
||||
|
||||
Object id = postDao.add(post);
|
||||
|
||||
if(Objects.nonNull(id)) {
|
||||
result.include("status", "Post Added Successfully");
|
||||
result.redirectTo(IndexController.class).index();
|
||||
} else {
|
||||
result.include("error", "There was an error creating the post. Try Again");
|
||||
result.redirectTo(this).add(post, request);
|
||||
}
|
||||
}
|
||||
else {
|
||||
result.include("error", "Invalid Request Type");
|
||||
result.redirectTo(IndexController.class).index();
|
||||
}
|
||||
}
|
||||
|
||||
@Get("/posts/{id}")
|
||||
public void view(int id) {
|
||||
result.include("post", postDao.findById(id));
|
||||
result.use(FreemarkerView.class).withTemplate("view");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.baeldung.daos;
|
||||
|
||||
import com.baeldung.controllers.PostController;
|
||||
import com.baeldung.models.Post;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@RequestScoped
|
||||
public class PostDao {
|
||||
|
||||
private Logger logger = Logger.getLogger(PostController.class.getName());
|
||||
private SessionFactory sessionFactory;
|
||||
|
||||
public PostDao() {}
|
||||
|
||||
@Inject
|
||||
public PostDao(SessionFactory sessionFactory) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
}
|
||||
|
||||
public Object add(Post post) {
|
||||
Session session = sessionFactory.openSession();
|
||||
session.beginTransaction();
|
||||
Object id = session.save(post);
|
||||
session.getTransaction().commit();
|
||||
session.close();
|
||||
return id;
|
||||
}
|
||||
|
||||
public Post findById(int id) {
|
||||
Session session = sessionFactory.openSession();
|
||||
session.beginTransaction();
|
||||
Post post = (Post) session.get(Post.class, id);
|
||||
session.getTransaction().commit();
|
||||
session.close();
|
||||
return post;
|
||||
}
|
||||
|
||||
|
||||
public List<Post> all() {
|
||||
Session session = sessionFactory.openSession();
|
||||
session.beginTransaction();
|
||||
List<Post> posts = (List<Post>) session.createQuery("FROM Post p").list();
|
||||
session.getTransaction().commit();
|
||||
session.close();
|
||||
return posts;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.baeldung.daos;
|
||||
|
||||
import com.baeldung.models.User;
|
||||
import org.hibernate.Criteria;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.criterion.Criterion;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
import org.omg.PortableInterceptor.LOCATION_FORWARD;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@RequestScoped
|
||||
public class UserDao {
|
||||
|
||||
SessionFactory sessionFactory;
|
||||
Logger logger = Logger.getLogger(getClass().getName());
|
||||
|
||||
public UserDao() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
@Inject
|
||||
public UserDao(SessionFactory sessionFactory) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
}
|
||||
|
||||
|
||||
public Object add(User user) {
|
||||
Session session = sessionFactory.openSession();
|
||||
session.beginTransaction();
|
||||
Object Id = session.save(user);
|
||||
session.getTransaction().commit();
|
||||
return Id;
|
||||
}
|
||||
|
||||
public User findByEmail(String email) {
|
||||
Session session = sessionFactory.openSession();
|
||||
session.beginTransaction();
|
||||
Criteria criteria = session.createCriteria(User.class);
|
||||
criteria.add(Restrictions.eq("email", email));
|
||||
criteria.setMaxResults(1);
|
||||
User u = (User) criteria.uniqueResult();
|
||||
session.getTransaction().commit();
|
||||
session.close();
|
||||
return u;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package com.baeldung.models;
|
||||
|
||||
|
||||
import javax.persistence.*;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@Entity
|
||||
@Table(name = "posts")
|
||||
public class Post {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private int id;
|
||||
|
||||
@NotNull @Size(min = 10)
|
||||
@Column(columnDefinition = "longtext")
|
||||
private String post;
|
||||
|
||||
@NotNull @Size(min = 5, max = 100)
|
||||
@Column(unique = true)
|
||||
private String title;
|
||||
|
||||
@NotNull
|
||||
@ManyToOne(targetEntity = User.class, optional = false)
|
||||
private User author;
|
||||
|
||||
@Column(name = "created_at")
|
||||
private Date createdAt;
|
||||
|
||||
@Column(name = "updated_at")
|
||||
private Date updatedAt;
|
||||
|
||||
@Transient
|
||||
private Logger logger = Logger.getLogger(getClass().getName());
|
||||
|
||||
public Post() {
|
||||
createdAt = new Date();
|
||||
updatedAt = new Date();
|
||||
}
|
||||
|
||||
public Post(String title, String post, User author) {
|
||||
this.title = title;
|
||||
this.post = post;
|
||||
this.author = author;
|
||||
createdAt = new Date();
|
||||
updatedAt = new Date();
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getPost() {
|
||||
return post;
|
||||
}
|
||||
|
||||
public void setPost(String post) {
|
||||
this.post = post;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public User getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(User author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setCreatedAt(Date createdAt) {
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public Date getUpdatedAt() {
|
||||
return updatedAt;
|
||||
}
|
||||
|
||||
public void setUpdatedAt(Date updatedAt) {
|
||||
this.updatedAt = updatedAt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "title: " + this.title
|
||||
+ "\npost: " + this.post
|
||||
+ "\nauthor: " + this.author
|
||||
+"\ncreatetdAt: " + this.createdAt
|
||||
+ "\nupdatedAt: " + this.updatedAt;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.baeldung.models;
|
||||
|
||||
import javax.persistence.*;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
@Entity
|
||||
@Table(name = "users")
|
||||
public class User {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private int id;
|
||||
|
||||
@NotNull
|
||||
@Size(min=3, max=255)
|
||||
private String name;
|
||||
|
||||
@Column(unique = true)
|
||||
@NotNull @Pattern(regexp = "" +
|
||||
"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+" +
|
||||
"(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"" +
|
||||
"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\" +
|
||||
"[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@" +
|
||||
"(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]" +
|
||||
"(?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}" +
|
||||
"(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]" +
|
||||
":(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\" +
|
||||
"[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])",
|
||||
message = "Invalid Email Address")
|
||||
private String email;
|
||||
|
||||
@NotNull
|
||||
@Size(min=6, max=255)
|
||||
private String password;
|
||||
|
||||
@Column(name = "created_at")
|
||||
private Date createdAt;
|
||||
|
||||
@Column(name = "updated_at")
|
||||
private Date updatedAt;
|
||||
|
||||
public User() {
|
||||
updatedAt = new Date();
|
||||
createdAt = new Date();
|
||||
}
|
||||
|
||||
public User(String name, String email, String password) {
|
||||
this.name = name;
|
||||
this.email = email;
|
||||
this.password = password;
|
||||
createdAt = new Date();
|
||||
updatedAt = new Date();
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setCreatedAt(Date createdAt) {
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public Date getUpdatedAt() {
|
||||
return updatedAt;
|
||||
}
|
||||
|
||||
public void setUpdatedAt(Date updatedAt) {
|
||||
this.updatedAt = updatedAt;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Name: " + this.name
|
||||
+ "\nEmail: " + this.email;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
|
||||
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
|
||||
version="1.1" bean-discovery-mode="all">
|
||||
|
||||
</beans>
|
||||
@@ -0,0 +1,55 @@
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!50503 SET NAMES utf8mb4 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS `larablog` /*!40100 DEFAULT CHARACTER SET latin1 */;
|
||||
USE `larablog`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `posts` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`post` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`author_id` int(11) DEFAULT NULL,
|
||||
`published` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`views` int(11) NOT NULL DEFAULT 0,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
DELETE FROM `posts`;
|
||||
/*!40000 ALTER TABLE `posts` DISABLE KEYS */;
|
||||
INSERT INTO `posts` (`id`, `title`, `post`, `author_id`, `published`, `views`, `created_at`, `updated_at`) VALUES
|
||||
(2, 'Sample Post 2', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc lobortis, ante in pretium volutpat, risus metus molestie odio, non placerat magna diam sit amet augue. Donec ullamcorper ornare mauris, id bibendum lacus viverra vel. Curabitur in pellentesque metus. Quisque gravida molestie turpis, id tincidunt purus viverra vitae. In sollicitudin, arcu at interdum sagittis, massa mi cursus diam, eu sodales purus erat vitae dui. Curabitur tempus urna consequat odio pretium pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tincidunt eros orci, sit amet pharetra eros accumsan vitae. Quisque a massa id nisi sodales rhoncus sed ut ante. Duis sed augue non velit feugiat varius eget eu velit. Nam commodo posuere massa sed convallis. Phasellus dapibus commodo lectus, vitae gravida lorem. Donec molestie a nisi ac mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam tempor ante et rutrum consequat.', 11, 1, 100, '2017-12-12 18:48:19', NULL),
|
||||
(3, 'Sample Post 3', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc lobortis, ante in pretium volutpat, risus metus molestie odio, non placerat magna diam sit amet augue. Donec ullamcorper ornare mauris, id bibendum lacus viverra vel. Curabitur in pellentesque metus. Quisque gravida molestie turpis, id tincidunt purus viverra vitae. In sollicitudin, arcu at interdum sagittis, massa mi cursus diam, eu sodales purus erat vitae dui. Curabitur tempus urna consequat odio pretium pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tincidunt eros orci, sit amet pharetra eros accumsan vitae. Quisque a massa id nisi sodales rhoncus sed ut ante. Duis sed augue non velit feugiat varius eget eu velit. Nam commodo posuere massa sed convallis. Phasellus dapibus commodo lectus, vitae gravida lorem. Donec molestie a nisi ac mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam tempor ante et rutrum consequat.', 11, 1, 100, '2017-12-12 18:48:22', NULL),
|
||||
(4, 'Sample Post 2212', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc lobortis, ante in pretium volutpat, risus metus molestie odio, non placerat magna diam sit amet augue. Donec ullamcorper ornare mauris, id bibendum lacus viverra vel. Curabitur in pellentesque metus. Quisque gravida molestie turpis, id tincidunt purus viverra vitae. In sollicitudin, arcu at interdum sagittis, massa mi cursus diam, eu sodales purus erat vitae dui. Curabitur tempus urna consequat odio pretium pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tincidunt eros orci, sit amet pharetra eros accumsan vitae. Quisque a massa id nisi sodales rhoncus sed ut ante. Duis sed augue non velit feugiat varius eget eu velit. Nam commodo posuere massa sed convallis. Phasellus dapibus commodo lectus, vitae gravida lorem. Donec molestie a nisi ac mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam tempor ante et rutrum consequat.', 11, 1, 100, '2017-12-12 18:48:24', NULL),
|
||||
(9, 'This is a Test', 'HJh sahjnasj hjas hjashj ashj ashj ashjsa sahjass naskjasnmas', 11, 0, 0, NULL, NULL),
|
||||
(10, 'Test Title', 'hjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj', 11, 0, 0, NULL, NULL),
|
||||
(11, 'Test Title 2', 'This is a as as sa asmas as as as as as', 11, 0, 0, NULL, NULL),
|
||||
(12, 'This is another Test Article', 'There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don\'t look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn\'t anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.', 11, 0, 0, '2017-12-14 03:48:52', '2017-12-14 03:48:52');
|
||||
/*!40000 ALTER TABLE `posts` ENABLE KEYS */;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `users` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`is_admin` int(10) unsigned NULL DEFAULT 0,
|
||||
`remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `users_email_unique` (`email`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
DELETE FROM `users`;
|
||||
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
|
||||
INSERT INTO `users` (`id`, `name`, `email`, `password`, `is_admin`, `remember_token`, `created_at`, `updated_at`) VALUES
|
||||
(11, 'Test User', '[email protected]', '$2a$10$i/TgIqC3xRMnqCEbDryfxuZqhfM/qekfsaQUjBVPUKiiB3Nofr/wO', 0, NULL, '2017-12-14 03:40:57', '2017-12-14 03:40:57');
|
||||
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
|
||||
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
@@ -0,0 +1,31 @@
|
||||
<?xml version = "1.0" encoding = "utf-8"?>
|
||||
<!DOCTYPE hibernate-configuration SYSTEM
|
||||
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
|
||||
<hibernate-configuration>
|
||||
<session-factory>
|
||||
<property name = "hibernate.dialect">
|
||||
org.hibernate.dialect.MySQLDialect
|
||||
</property>
|
||||
<property name = "hibernate.connection.driver_class">
|
||||
com.mysql.cj.jdbc.Driver
|
||||
</property>
|
||||
<property name = "hibernate.connection.url">
|
||||
jdbc:mysql://127.0.0.1:3306/larablog?serverTimezone=UTC
|
||||
</property>
|
||||
<property name="hibernate.connection.username">
|
||||
root
|
||||
</property>
|
||||
<property name = "hibernate.connection.password">
|
||||
root
|
||||
</property>
|
||||
<property name = "hibernate.show_sql">
|
||||
true
|
||||
</property>
|
||||
<property name = "hibernate.format_sql">
|
||||
true
|
||||
</property>
|
||||
|
||||
<mapping class="com.baeldung.models.User" />
|
||||
<mapping class="com.baeldung.models.Post" />
|
||||
</session-factory>
|
||||
</hibernate-configuration>
|
||||
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
|
||||
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
|
||||
|
||||
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
|
||||
<layout class="org.apache.log4j.PatternLayout">
|
||||
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<category name="br.com.caelum">
|
||||
<priority value="INFO" />
|
||||
<appender-ref ref="stdout" />
|
||||
</category>
|
||||
|
||||
<category name="org.hibernate">
|
||||
<priority value="INFO" />
|
||||
<appender-ref ref="stdout" />
|
||||
</category>
|
||||
|
||||
<category name="org.jboss">
|
||||
<priority value="INFO" />
|
||||
<appender-ref ref="stdout" />
|
||||
</category>
|
||||
|
||||
<category name="freemarker.cache">
|
||||
<priority value="INFO" />
|
||||
<appender-ref ref="stdout" />
|
||||
</category>
|
||||
|
||||
<category name="freemarker.*">
|
||||
<priority value="INFO" />
|
||||
<appender-ref ref="stdout" />
|
||||
</category>
|
||||
|
||||
</log4j:configuration>
|
||||
@@ -0,0 +1,172 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Clean Blog - Contact</title>
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Theme CSS -->
|
||||
<link href="/css/clean-blog.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom Fonts -->
|
||||
<link href="/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
|
||||
<link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-default navbar-custom navbar-fixed-top">
|
||||
<div class="container-fluid">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header page-scroll">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
Menu <i class="fa fa-bars"></i>
|
||||
</button>
|
||||
<a class="navbar-brand" href="/">Start Bootstrap</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/login">Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/register">Register</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.navbar-collapse -->
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</nav>
|
||||
|
||||
<header class="intro-header" style="background-image: url('img/home-bg.jpg')">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<div class="site-heading">
|
||||
<h1>Clean Blog</h1>
|
||||
<hr class="small">
|
||||
<span class="subheading">A Clean Blog Theme by Start Bootstrap</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<p>Login</p>
|
||||
<h5 style="color:darkred;">${error!""} ${status!""}</h5>
|
||||
<form name="sentM" id="contactFo" action="/login" method="POST">
|
||||
<div class="row control-group">
|
||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
||||
<label>Email</label>
|
||||
<input type="email" class="form-control" placeholder="Email" id="user.email" name="user.email" required />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row control-group">
|
||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
||||
<label>Password</label>
|
||||
<input type="password" class="form-control" placeholder="Password" id="user.password" name="user.password" required />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div id="success"></div>
|
||||
<div class="row">
|
||||
<div class="form-group col-xs-12">
|
||||
<button type="submit" class="btn btn-default">Login</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<ul class="list-inline text-center">
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-facebook fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-github fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="copyright text-muted">Copyright © Your Website 2016</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="/vendor/jquery/jquery.min.js"></script>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="/vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- Contact Form JavaScript -->
|
||||
<script src="/js/jqBootstrapValidation.js"></script>
|
||||
<script src="/js/contact_me.js"></script>
|
||||
|
||||
<!-- Theme JavaScript -->
|
||||
<script src="/js/clean-blog.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,187 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Clean Blog - Contact</title>
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Theme CSS -->
|
||||
<link href="/css/clean-blog.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom Fonts -->
|
||||
<link href="/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
|
||||
<link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-default navbar-custom navbar-fixed-top">
|
||||
<div class="container-fluid">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header page-scroll">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
Menu <i class="fa fa-bars"></i>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">Start Bootstrap</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/login">Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/register">Register</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.navbar-collapse -->
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</nav>
|
||||
|
||||
<header class="intro-header" style="background-image: url('img/home-bg.jpg')">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<div class="site-heading">
|
||||
<h1>Clean Blog</h1>
|
||||
<hr class="small">
|
||||
<span class="subheading">A Clean Blog Theme by Start Bootstrap</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<p>Register</p>
|
||||
<h5 style="color:darkred;">${error!""} ${status!""}</h5>
|
||||
<form name="sentM" id="contactFo" action="/register" method="POST">
|
||||
<div class="row control-group">
|
||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
||||
<label>Name</label>
|
||||
<input type="text" class="form-control" placeholder="Name" id="user.name" name="user.name" required />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row control-group">
|
||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
||||
<label>Email</label>
|
||||
<input type="email" class="form-control" placeholder="Email" id="user.email" name="user.email" required />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row control-group">
|
||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
||||
<label>Email</label>
|
||||
<input type="password" class="form-control" placeholder="Password" id="user.password" name="user.password" required />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row control-group">
|
||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
||||
<label>Confirm</label>
|
||||
<input type="password" class="form-control" placeholder="Confirm Password" id="password_confirmation" name="password_confirmation" required />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div id="success"></div>
|
||||
<div class="row">
|
||||
<div class="form-group col-xs-12">
|
||||
<button type="submit" class="btn btn-default">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<ul class="list-inline text-center">
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-facebook fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-github fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="copyright text-muted">Copyright © Your Website 2016</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="/vendor/jquery/jquery.min.js"></script>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="/vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- Contact Form JavaScript -->
|
||||
<script src="/js/jqBootstrapValidation.js"></script>
|
||||
<script src="/js/contact_me.js"></script>
|
||||
|
||||
<!-- Theme JavaScript -->
|
||||
<script src="/js/clean-blog.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,173 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Clean Blog</title>
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Theme CSS -->
|
||||
<link href="/css/clean-blog.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom Fonts -->
|
||||
<link href="/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
|
||||
<link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-default navbar-custom navbar-fixed-top">
|
||||
<div class="container-fluid">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header page-scroll">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
Menu <i class="fa fa-bars"></i>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">Start Bootstrap</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/login">Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/register">Register</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.navbar-collapse -->
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</nav>
|
||||
|
||||
<!-- Page Header -->
|
||||
<!-- Set your background image for this header on the line below. -->
|
||||
<header class="intro-header" style="background-image: url('img/home-bg.jpg')">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<div class="site-heading">
|
||||
<h1>Clean Blog</h1>
|
||||
<hr class="small">
|
||||
<span class="subheading">A Clean Blog Theme by Start Bootstrap</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<h5 style="color:darkred;">${error!""} ${status!""}</h5>
|
||||
<#list posts as post>
|
||||
<div class="post-preview">
|
||||
<a href="/posts/${post.id}">
|
||||
<h2 class="post-title">
|
||||
${post.title}
|
||||
</h2>
|
||||
<h3 class="post-subtitle">
|
||||
<#if (post.post?length > 50) >${post.post?substring(0,50)} <#else> ${post.post} </#if>
|
||||
</h3>
|
||||
</a>
|
||||
<p class="post-meta">Posted by <a href="#">Start Bootstrap</a> on ${post.createdAt!''}</p>
|
||||
</div>
|
||||
<hr>
|
||||
<#else>
|
||||
<h2 class="post-title">
|
||||
NO POSTS YET!
|
||||
</h2>
|
||||
</#list>
|
||||
<!-- Pager -->
|
||||
<ul class="pager">
|
||||
<li class="next">
|
||||
<a href="/post/add">Add New Post</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<ul class="list-inline text-center">
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-facebook fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-github fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="copyright text-muted">Copyright © Your Website 2016</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="/vendor/jquery/jquery.min.js"></script>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="/vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- Contact Form JavaScript -->
|
||||
<script src="/js/jqBootstrapValidation.js"></script>
|
||||
<script src="/js/contact_me.js"></script>
|
||||
|
||||
<!-- Theme JavaScript -->
|
||||
<script src="/js/clean-blog.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,157 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Clean Blog - Contact</title>
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Theme CSS -->
|
||||
<link href="/css/clean-blog.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom Fonts -->
|
||||
<link href="/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
|
||||
<link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-default navbar-custom navbar-fixed-top">
|
||||
<div class="container-fluid">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header page-scroll">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
Menu <i class="fa fa-bars"></i>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">Start Bootstrap</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/login">Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/register">Register</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.navbar-collapse -->
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</nav>
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<p>Compose the Next Viral Message!</p>
|
||||
<h5 style="color:darkred;">${error!""} ${status!""}</h5>
|
||||
<form action="/post/add" method="POST">
|
||||
<div class="row control-group">
|
||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
||||
<label>Title</label>
|
||||
<input type="text" class="form-control" placeholder="Title" id="title" name="post.title" required />
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row control-group">
|
||||
<div class="form-group col-xs-12 floating-label-form-group controls">
|
||||
<label>Post</label>
|
||||
<textarea rows="10" class="form-control" placeholder="Post" id="post" name="post.post" required></textarea>
|
||||
<p class="help-block text-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div id="success"></div>
|
||||
<div class="row">
|
||||
<div class="form-group col-xs-12">
|
||||
<button type="submit" class="btn btn-default">Send</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<ul class="list-inline text-center">
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-facebook fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-github fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="copyright text-muted">Copyright © Your Website 2016</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="/vendor/jquery/jquery.min.js"></script>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="/vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- Contact Form JavaScript -->
|
||||
<script src="/js/jqBootstrapValidation.js"></script>
|
||||
<script src="/js/contact_me.js"></script>
|
||||
|
||||
<!-- Theme JavaScript -->
|
||||
<script src="/js/clean-blog.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,152 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Clean Blog - Sample Post</title>
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Theme CSS -->
|
||||
<link href="/css/clean-blog.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom Fonts -->
|
||||
<link href="/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
|
||||
<link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-default navbar-custom navbar-fixed-top">
|
||||
<div class="container-fluid">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header page-scroll">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
Menu <i class="fa fa-bars"></i>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">Start Bootstrap</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/login">Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/register">Register</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.navbar-collapse -->
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</nav>
|
||||
|
||||
<!-- Page Header -->
|
||||
<!-- Set your background image for this header on the line below. -->
|
||||
<header class="intro-header" style="background-image: url('/img/post-bg.jpg')">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<div class="post-heading">
|
||||
<h1>${post.title}</h1>
|
||||
<span class="meta">Posted by <a href="#">Start Bootstrap</a> on ${post.createdAt!''}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Post Content -->
|
||||
<article>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<p>
|
||||
${post.post}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||
<ul class="list-inline text-center">
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-facebook fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-github fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="copyright text-muted">Copyright © Your Website 2016</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="/vendor/jquery/jquery.min.js"></script>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="/vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- Contact Form JavaScript -->
|
||||
<script src="/js/jqBootstrapValidation.js"></script>
|
||||
<script src="/js/contact_me.js"></script>
|
||||
|
||||
<!-- Theme JavaScript -->
|
||||
<script src="/js/clean-blog.min.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Class-Path:
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>VRaptor Blank Project</title>
|
||||
</head>
|
||||
<body>
|
||||
It works!! JSP ${variable} ${linkTo[IndexController].index}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:web="http://java.sun.com/xml/ns/javaee"
|
||||
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" version="3.0">
|
||||
|
||||
<display-name>vraptor-blank-project</display-name>
|
||||
|
||||
<context-param>
|
||||
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
|
||||
<param-value>messages</param-value>
|
||||
</context-param>
|
||||
|
||||
<listener>
|
||||
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
|
||||
</listener>
|
||||
|
||||
</web-app>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 283 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 169 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user