CRUD Operations using Servlet and FreeMarker Template Engine

DOWNLOAD CRUD(Create, Read, Update, Delete) operations are the four basic operations any data driven websites would perform often. In...




CRUD(Create, Read, Update, Delete) operations are the four basic operations any data driven websites would perform often. In Java Web Applications, this can be done using a simple Controller Servlet that would dispatch request to the corresponding underlying data access layer and forward the results to the front end view, which in most cases would be a JSP page. This is a very common topic and many tutorials are available on the same. I am going to repeat the same in this article, but with a small difference with FreeMarker Templates instead of JSP's as view in this application.


FreeMarker Template Engine - What and Why?

FreeMarker is a Java Template Engine, a generic tool to generate text output anything from text output to autogenerated source code. Although FreeMarker has some programming capabilities, it is not a full-blown programming language. Instead, Java programs prepare the data to be displayed (like issue SQL queries), and FreeMarker just generates textual pages that display the prepared data using templates.

So now let us look into some of the advantages of using FreeMarker templates instead of JSP as view for Java Web Applications that follows MVC Architecture.

1. FreeMarker is designed to be practical for the generation of HTML Web pages, particularly by servlet-based applications following the MVC (Model View Controller) pattern. The idea behind using the MVC pattern for dynamic Web pages is that you separate the designers (HTML authors) from the programmers. In larger projects, time constraints often dictate that the HTML and Java be developed in parallel.First, JSP relies too heavily on Java syntax. HTML coders seldom know Java syntax well enough to author JSP pages entirely by themselves. 

With FreeMarker, designers can change the appearance of a page without programmers having to change or recompile code, because the application logic (Java programs) and page design (FreeMarker templates) are separated. Templates do not become polluted with complex program fragments. This separation is useful even for projects where the programmer and the HTML page author is the same person, since it helps to keep the application clear and easily maintainable.

2. No servlet specific scopes and other highly technical things in templates. It was made for MVC from the beginning, it focuses only on the presentation.

3. Easier to read, more terse syntax. For example: <#if x>...</#if> instead of <c:if test="${x}">...</c:if>

You can read a list of advantages of using FreeMarker over JSP here in FreeMarker FAQ page.

CRUD with MySql, Servlets and FreeMarker Template Engine

1. Let us start by downloading required libraries,
2. First, let us create user table in MySql Server and have some dummy values added to it.

CREATE TABLE users (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(45) DEFAULT NULL,
  `lastname` varchar(45) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`userid`)
)

3. Open Eclipse. Go to File -> Add New -> Dynamic Web Project. Now add the required libraries to the newly created project's WebContent\WEB-INF\lib folder. The project structure should look like this after completing implementation,



3. Now let us create a model class('User.java') that contains getters and setters for the fields we have in mySql table.

package com.programmingfree.model;

 public class User {

  private int userid;
  private String firstName;
  private String lastName;
 
  private String email;
  public int getUserid() {
   return userid;
  }
  public void setUserid(int userid) {
   this.userid = userid;
  }
  public String getFirstName() {
   return firstName;
  }
  public void setFirstName(String firstName) {
   this.firstName = firstName;
  }
  public String getLastName() {
   return lastName;
  }
  public void setLastName(String lastName) {
   this.lastName = lastName;
  }
  
  
  public String getEmail() {
   return email;
  }
  public void setEmail(String email) {
   this.email = email;
  }
  @Override
  public String toString() {
   return "User [userid=" + userid + ", firstName=" + firstName
     + ", lastName=" + lastName + ", email="
     + email + "]";
  }
  
  
 }


3. Next let us create a utility class to handle connections to database. The connection string properties are kept in a configuration file called "db.properties" in the src folder.

package com.programmingfree.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;


public class DBUtility {
 private static Connection connection = null;

    public static Connection getConnection() {
        if (connection != null)
            return connection;
        else {
            try {
             Properties prop = new Properties();
                InputStream inputStream = DBUtility.class.getClassLoader().getResourceAsStream("/db.properties");
                prop.load(inputStream);
                String driver = prop.getProperty("driver");
                String url = prop.getProperty("url");
                String user = prop.getProperty("user");
                String password = prop.getProperty("password");
                Class.forName(driver);
                connection = DriverManager.getConnection(url, user, password);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return connection;
        }

    }

}

Properties configuration file should have contents such as this,

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/databasename
user=username
password=xxxxxx

4. Next step is to create a class that performs database operations such as select, create, delete and update.

package com.programmingfree.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

import com.programmingfree.model.User;
import com.programmingfree.util.DBUtility;
public class CrudDao {
 
 private Connection connection;

 public CrudDao() {
  connection = DBUtility.getConnection();
 }

 public void addUser(User user) {
  try {
   PreparedStatement preparedStatement = connection
     .prepareStatement("insert into users(firstname,lastname,email) values (?, ?, ? )");
   // Parameters start with 1
   preparedStatement.setString(1, user.getFirstName());
   preparedStatement.setString(2, user.getLastName());
   
   preparedStatement.setString(3, user.getEmail());
   preparedStatement.executeUpdate();

  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 
 public void deleteUser(int userId) {
  try {
   PreparedStatement preparedStatement = connection
     .prepareStatement("delete from users where userid=?");
   // Parameters start with 1
   preparedStatement.setInt(1, userId);
   preparedStatement.executeUpdate();

  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 
 public void updateUser(User user) throws ParseException {
  try {
   PreparedStatement preparedStatement = connection
     .prepareStatement("update users set firstname=?, lastname=?, email=?" +
       "where userid=?");
   // Parameters start with 1
   preparedStatement.setString(1, user.getFirstName());
   preparedStatement.setString(2, user.getLastName());
   
   preparedStatement.setString(3, user.getEmail());
   preparedStatement.setInt(4, user.getUserid());
   preparedStatement.executeUpdate();

  } catch (SQLException e) {
   e.printStackTrace();
  }
 }

 public List<User> getAllUsers() {
  List<User> users = new ArrayList<User>();
  try {
   Statement statement = connection.createStatement();
   ResultSet rs = statement.executeQuery("select * from users");
   while (rs.next()) {
    User user = new User();
    user.setUserid(rs.getInt("userid"));
    user.setFirstName(rs.getString("firstname"));
    user.setLastName(rs.getString("lastname"));
    
    user.setEmail(rs.getString("email"));
    users.add(user);
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }

  return users;
 }
 
 public User getUserById(int userId) {
  User user = new User();
  try {
   PreparedStatement preparedStatement = connection.
     prepareStatement("select * from users where userid=?");
   preparedStatement.setInt(1, userId);
   ResultSet rs = preparedStatement.executeQuery();
   
   if (rs.next()) {
    user.setUserid(rs.getInt("userid"));
    user.setFirstName(rs.getString("firstname"));
    user.setLastName(rs.getString("lastname"));
    
    user.setEmail(rs.getString("email"));
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }

  return user;
 }
}
5. Now create a controller servlet(CrudController.java) that will transfer control to data access class to perform database operations and forward the results to the view(.ftl files).

package com.programmingfree.controller;

import java.io.IOException;
import java.text.ParseException;


import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.programmingfree.dao.CrudDao;
import com.programmingfree.model.User;


public class CrudController extends HttpServlet {
 private static final long serialVersionUID = 1L;
    private static String INSERT_OR_EDIT = "/user.ftl";
    private static String LIST_USER = "/listUser.ftl";
    private static String ADD_USER = "/adduser.ftl";
    private CrudDao dao;


    public CrudController() {
      super();
         dao = new CrudDao();
    }

 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String forward="";
  if(request.getParameter("action")!=null){
        String action = request.getParameter("action");

        if (action.equalsIgnoreCase("delete")){
            int userId = Integer.parseInt(request.getParameter("userId"));
            dao.deleteUser(userId);
            forward = LIST_USER;
            request.setAttribute("users", dao.getAllUsers());    
        } else if (action.equalsIgnoreCase("edit")){
            forward = INSERT_OR_EDIT;
            int userId = Integer.parseInt(request.getParameter("userId"));
            User user = dao.getUserById(userId);
            request.setAttribute("user", user);
        } else if (action.equalsIgnoreCase("listUser")){
            forward = LIST_USER;
            request.setAttribute("users", dao.getAllUsers());
        } 
        else {
            forward = ADD_USER;
        }
  }
  else{
   forward = LIST_USER;
            request.setAttribute("users", dao.getAllUsers());
  }
  

        RequestDispatcher view = request.getRequestDispatcher(forward);
        view.forward(request, response);
 }

 
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  User user = new User();
        user.setFirstName(request.getParameter("firstName"));
        user.setLastName(request.getParameter("lastName"));        
        user.setEmail(request.getParameter("email"));
        String userid = request.getParameter("userid");
        if(userid == null || userid.isEmpty())
        {
            dao.addUser(user);
        }
        else
        {
            user.setUserid(Integer.parseInt(userid));
            try {
    dao.updateUser(user);
   } catch (ParseException e) {    
    e.printStackTrace();
   }
        }
        RequestDispatcher view = request.getRequestDispatcher(LIST_USER);
        request.setAttribute("users", dao.getAllUsers());
        view.forward(request, response);
 }
}

6. This is one of the important step in this project, to update web.xml file and make an entry for freemarker.ext.servlet.FreemarkerServlet servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name>FreeMarkerCRUDExample</display-name>
  <servlet>
  <servlet-name>freemarker</servlet-name>
  <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>

  <!-- FreemarkerServlet settings: -->
  <init-param>
   <param-name>TemplatePath</param-name>
   <param-value>/</param-value>
  </init-param>
  <init-param>
   <param-name>NoCache</param-name>
   <param-value>true</param-value>
  </init-param>
  <init-param>
   <param-name>ContentType</param-name>
   <param-value>text/html; charset=UTF-8</param-value> <!-- Forces UTF-8 output encoding! -->
  </init-param>

  <!-- FreeMarker settings: -->
  <init-param>
   <param-name>template_update_delay</param-name>
   <param-value>0</param-value> <!-- 0 is for development only! Use higher value otherwise. -->
  </init-param>
  <init-param>
   <param-name>default_encoding</param-name>
   <param-value>ISO-8859-1</param-value> <!-- The encoding of the template files. -->
  </init-param>
  <init-param>
   <param-name>number_format</param-name>
   <param-value>0.##########</param-value>
  </init-param>

  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>freemarker</servlet-name>
  <url-pattern>*.ftl</url-pattern>
 </servlet-mapping>



 <servlet>
  <servlet-name>CrudController</servlet-name>
  <servlet-class>com.programmingfree.controller.CrudController</servlet-class>
 </servlet>

 <servlet-mapping>
  <servlet-name>CrudController</servlet-name>
  <url-pattern>/CrudController</url-pattern>
 </servlet-mapping>

 <!--
  Prevent the visiting of MVC Views from outside the servlet container.
  RequestDispatcher.forward/include should and will still work. Removing
  this may open security holes!
 -->
 <security-constraint>
  <web-resource-collection>
   <web-resource-name>FreeMarker MVC Views</web-resource-name>
   <url-pattern>*.ftl</url-pattern>
  </web-resource-collection>
  <auth-constraint>
   <!-- Nobody is allowed to visit these -->
  </auth-constraint>
 </security-constraint>
</web-app>


Note how we mapped "freemarker.ext.servlet.FreemarkerServlet" servlet with url-pattern *.ftl. Thus all the request that ends with .ftl will get processed by FreemarkerServlet servlet. 

For the controller servlet, we have mapped it to the url pattern '/CrudController'.

6. Finally it is time to create FTL templates as views in WebContent folder just like how we create JSP's.

listUser.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Show All Users</title>
</head>
<body>
<div>
    <table border="1" align="center" style="width:50%">
        <thead>
            <tr>
                <th>User Id</th>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Email</th>
                <th colspan=2>Action</th>
            </tr>
        </thead>
        <tbody>
            <#list users as user>
                <tr>
                    <td>${user.userid}</td>
                    <td>${user.firstName}</td>
                    <td>${user.lastName}</td>
                    
                    <td>${user.email}</td>
                    <td><a href="CrudController?action=edit&userId=${user.userid}">Update</a></td>
                    <td><a href="CrudController?action=delete&userId=${user.userid}">Delete</a></td>
                </tr>
            </#list>
        </tbody>
    </table>
    <p><a href="CrudController?action=insert">Add User</a></p>
    </div>
</body>
</html>

user.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Update user</title>
</head>
<body>
<div>
<br/>
    <form method="POST" action='CrudController' name="frmAddUser">    
        User ID : <input type="text" readonly="readonly" name="userid"
            value="${user.userid}" /> <br /> 
        First Name : <input
            type="text" name="firstName"
            value="${user.firstName}" /> <br /> 
        Last Name : <input
            type="text" name="lastName"
            value="${user.lastName}" /> <br />  
        Email : <input type="text" name="email"
            value="${user.email}" /> <br /> <input
            type="submit" value="Submit" />
    </form>
</div>
</body>
</html>

addUser.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Add new user</title>
</head>
<body>   
<div class="centered">
<br/>
    <form method="POST" action='CrudController' name="frmAddUser">
     
        User ID : <input type="text" readonly="readonly" name="userid"/> <br /> 
        First Name : <input
            type="text" name="firstName"/> <br /> 
        Last Name : <input
            type="text" name="lastName"/> <br /> 
        Email : <input type="text" name="email" /> <br /> <input
            type="submit" value="Submit" />
    </form>
</div>
</body>
</html>

Now let us take a closer look at how these freemarket templates work internally. An important idea behind FreeMarker (actually, behind Web MVC) is that presentation logic and "business logic" should be separated. In the template you only deal with presentation issues, that is, visual design issues, formatting issues. The data that will be displayed (such as the user name and so on) is prepared outside FreeMarker, usually by routines written in Java language or other general purpose language. So the template author doesn't have to know how these values are calculated. In fact, the way these values are calculated can be completely changed while the templates can remain the same, and also, the look of the page can be completely changed without touching anything but the template. This separation can be especially useful when the template authors (designers) and the programmers are different individuals.

The template is stored on the Web server, usually just like the static HTML page would be. But whenever someone visits this page, FreeMarker will step in and transform the template on-the-fly to plain HTML by replacing the ${...}-s with up-to-date content from database (e.g., replacing ${user.userid} with Priya Darshini) and send the result to the visitor's Web browser. 

You can read about the syntaxes and various other features of Freemarker Template Engine here.

Now run the application on Tomcat server and hit the action url in browser, (http://localhost:8080/ApplicationName/CrudController),







Note : Make sure you have created user table in MySql Server with the create statement given above and inserted a few dummy row in it, before running the sample application.

Please leave your comments and queries about this post in the comment sections in order for me to improve my writing skills and to showcase more useful posts.Thanks for reading!! 




Subscribe to GET LATEST ARTICLES!


Related

Java 1693379416267344770

Post a comment

  1. Hi Priya,
    Thanks for sharing this useful article and let me know which is best to use in my site to increase my site performance “Freemarker” or “Velocity” or “String” Templates.

    ReplyDelete
    Replies
    1. Thank you for excellent article.You made an article that is interesting.
      Tavera car for rent in chennai|Indica car for rent in chennai|innova car for rent in chennai|mini bus for rent in chennai|tempo traveller for rent in chennai
      Keep on the good work and write more article like this...

      Great work !!!!Congratulations for this blog


      Delete
  2. This article is a life saver, thanks.

    ReplyDelete
  3. Hi Priya,
    Thanks for this useful article :)

    ReplyDelete
  4. The blog is really useful with lot of nice information. Keep posting more in the future. This will be very useful for many.
    IAS Academy in Chennai
    IAS Academy in Anna Nagar
    Top 10 IAS Coaching Centres in Chennai
    Top IAS Academy in Chennai
    Top IAS Coaching in Chennai

    ReplyDelete
  5. Crypto-currency as a modern form of the digital asset has received a worldwide acclaim for easy and faster financial transactions and its awareness among people have allowed them to take more interest in the field thus opening up new and advanced ways of making payments. Crypto.com Referral Code with the growing demand of this global phenomenon more,new traders and business owners are now willing to invest in this currency platform despite its fluctuating prices however it is quite difficult to choose the best one when the market is full. In the list of crypto-currencies bit-coins is one of the oldest and more popular Crypto.com Referral Code for the last few years. It is basically used for trading goods and services and has become the part of the so-called computerized block-chain system allowing anyone to use it thus increasing the craze among the public, Crypto.com Referral Code.

    Common people who are willing to purchase BTC can use an online wallet system for buying them safely in exchange of cash or credit cards and in a comfortable way from the thousands of BTC foundations around the world and keep them as assets for the future. Due to its popularity, many corporate investors are now accepting them as cross-border payments and the rise is unstoppable. With the advent of the internet and mobile devices,information gathering has become quite easy as a result the BTC financial transactions are accessible and its price is set in accordance with people’s choice and preferences thus leading to a profitable investment with Crypto.com Referral Code Code. Recent surveys have also proved that instability is good for BTC exchange as if there is instability and political unrest in the country due to which banks suffer then investing in BTC can surely be a better option. Again bit-coin transaction fees are pretty cheaper and a more convenient technology for making contracts thus attracting the crowd. The BTC can also be converted into different fiat currencies and is used for trading of securities, for land titles, document stamping, public rewards and vice versa.

    Another advanced block-chain project is Ethereumor the ETH which has served much more than just a digital form of crypto-currency Crypto.com Referral Code and its popularity in the last few decades have allowed billions of people to hold wallets for them. With the ease of the online world,the ETH have allowed the retailers and business organizations to accept them for trading purposes, therefore, can serve as the future of the financial system.

    ReplyDelete
  6. Our full Lace Front Wigs are all hand made with a lace cap. They are manufactured with thin lace sewn on top of the cap. Individual hairs are then sewn onto the thin lace. Each lace wig has lace all around the unit which will need to be cut prior to securing the wig to your head. You will need to cut along the hairline around your entire head. By doing so, you will be able to wear your hair anyway you like. You can even style ponytails, up-dos, etc. Once the Lace Wigs is successfully applied, it will appear that all the hair is growing directly from your head!

    Lace front wigs are hand-made with lace front cap & machine weft at back. Lace front wigs are manufactured with a thin lace that extends from ear to ear across the hairline. When you receive the wig, the lace will be quite long in the front. Cut and style according to your preference, as you will need to apply adhesive along the front of the wig. Once the wig is applied, you will still have Lace Wigs with a very natural appearance.
    TeamWigz Provide the Best Lace Front Wigs and Lace Wigs in Johannesburg and South Africa.

    ReplyDelete
  7. 우리카지노 에 오신 것을 환영합니다. 국내 최고의 카지노사이트 에 가입하여 바카라사이트 에서 다양한 게임을 즐기시면서 대박의 기회를 놓치지마세요! 우리 카지노는 한국의 바카라 산업을 지배하는 카지노 사이트입니다. 우리 카지노는 한국 바카라 시장 점유율의 50 % 이상을 차지하는 10 년 이상 온라인 바카라 시장을 지배 해 왔기 때문에 우리 카지노를 모르는 사람은 거의 없습니다.

    ARTICLE: 우리카지노는 대한민국의 바카라 업계를 장악하고 있는 카지노사이트 입니다. 우리카지노가 대한 민국에서 장악한 바카라 시장점유율이 50%가 넘고 10년 넘게 온라인 바카라 시장을 장악해왔기 때문에 대한민국에서는 우리카지노를 모르는 사람은 드뭅니다. 이런 바카라 업계의 독보적인 입지 때문에 늘 유명하거나 최고만을 찾는 사람들이 카지노사이트를 찾을때는 늘 우리카지노를 찾습니다.바카라를 처음 시작하시는 초보자분들에게도 우리카지노에서 카지노사이트를 시작하시기 좋은 환경입니다. 우리카지노사이트에서는 신규가입시 3만쿠폰을 지급 해주기 때문입니다. 사람들이 늘 1등만을 찾는 이유는 분명 있습니다. 다른 카지노사이트와는 달리 우리카지노를 이용하실시 에이전트를 끼고 게임을 하신다면 본사 이외에 활동쿠폰 및 오링쿠폰을 별도로 제공해주고 있기 때문입니다. 이러한 이유들 때문에 카지노사이트 업계에서 바카라를 즐기신다면 다들 우리카지노를 선호 하십니다. 카지노사이트에서 바카라를 이기기 물론 어렵습니다. 하지만 우리카지노의 에이전트를 끼고 바카라를 즐기신다면 승산이 있다고 봅니다. 우리카지노 에이전트의 연락처는 홈페이지로 연락하시면 언제든지 부담없이 소통가능 합니다. 카지노사이트를 선정할때는 바카라를 다른곳보다 유리하게 즐길 수 있는 카지노를 선택해야한다고 생각합니다. 그것이 바로 우리카지노 입니다. 이상으로 우리카지노와 바카라 카지노사이트 사이의 상관관계를 알아보았습니다바카라사이트.

    ReplyDelete
  8. PURCHASE EMAIL Set of 68 COUNTRIES, AVAILABLE over 100 MILLION B2B EMAIL LIST -- BUY EMAIL LIST BY COUNTRY

    We also enjoy providing b2b mailing lists to get other countries.The data is permitted by acquiring company information database not merely from the US but the rest of the nations like Canada, United Kingdom, Australia, Middle East, Singapore, New Zealand, Asia,Europe, Russia and Many more Countries. The checklist is strategically segmented in to the type of industry, the name of the provider, full name of contact person, job title, purchase email lists contact info, the amount of workers, and revenue of the enterprise to name a couple.
    Our segmented email list provides you an even more special, nonetheless most relevant info to use.Not all email providers have access to each country's business database. Using an worldwide email list, you can market your business internationally without the need to devote a lot of money moving in 1 country to another. With true b2b sales leads, you'll be able to construct your global relationships and might mean expansion of your business someday.

    ReplyDelete
  9. Internet Download Manager 6.38 Build 9 IDM Crack Patch with Serial Key download is a kind of shareware download manager owned by an American company called Tonec Inc. IDM Patch Free Download captures any type of download in an impressive time limit and then completes the download in a very short time and at a faster speed as compared to any other download manager at the moment.

    ReplyDelete
  10. Tongkat Ali ist eine Pflanze beheimatet in Südostasien. Sie gehört zur Gattung der Bittereschengewächse und Ihr botanischer Name lautet “Eurycoma longifolia”. Es gibt noch eine weitere Reihe länderspezifischer Namen
    wie z. B. “Pasak Bumi”, wie die Pflanze in Indonesien genannt wird oder “longjack”, die allgemeine Bezeichnung für Tongkat Ali Kaufen in den USA, Kanada und Australien.

    Das Ursprungsland von Tongkat Ali Kaufen ist Indonesien, daher findet man auch dort auch die größten Bestände. Weitere Vorkommen gibt es in Ländern wie Thailand, sägepalmenextrakt Malaysia, Vietnam und Laos.

    Die Einnahme von Tongkat Ali Kaufen empfiehlt sich insbesondere für Leistungssportler, die einen schnellen
    Muskelaufbau und Muskelzuwachs anstreben und nicht auf illegale und künstliche Substanzen zurückgreifen möchten um Ihren Testosteronspiegel zu erhöhen.

    Generell empfiehlt sich eine Einnahme von Tongkat Ali für alle Männer ab dem 30ten Lebensjahr, da in dieser Phase nachweislich die Produktion von körpereigenem Testosteron zurückgeht. Dies macht sich vor allem dadurch bemerkbar dass die körperliche Leistungsfähigkeit nachlässt, die Lust auf Sex spürbar abnimmt und dadurch allgemein das Selbstwertgefühl negativ beeinflusst wird.

    Mit der Einnahme von Tongkat Ali können Sie nachweislich Ihre Libido steigern, Ihr Testosteron erhöhen und Ihre gewohnte Lebensenergie aus den jungen Jahren Ihres Lebens wieder herbeiführen. Hier können Sie übrigens weitere Informationen bekommen zum Thema ‘Libido steigern‘ ganz natürlich. Sollten Sie daran interessiert sein lohnt es sich auch unseren Artikel über Butea Superba zu lesen.

    Tongkat Ali wächst als Strauch und kann Höhen von bis zu 12 Metern erreichen. Typischerweise dauert es 10-15 Jahre bis solche Ausmaße erreicht werden. Der Strauch trägt anfangs grüne Blüten die sich im Laufe der Zeit, bis zur Reife, rot färben.

    Allerdings sind die Blüten im Hinblick auf die Wirkung der Pflanze weniger interessant. Der wertvolle Teil verbirgt sich unter der Erde.
    Im Laufe der Jahre wachsen die Wurzeln teilweise senkrecht und bis zu mehrere Meter tief in den Boden, was die Ernte zu einer schweren und mühsamen Arbeit werden lässt. Je älter die Wurzeln sind, desto höher ist auch die Anzahl der Wirkstoffe Butea Superba.
    Von daher gilt es einige Dinge zu beachten sollten Sie Tongkat Ali kaufen wollen.

    ReplyDelete
  11. Private villa rentals in Dubai is a DTCM licensed holiday home Operator managing vacation rental villas and apartments for short and mid term stay in Dubai.

    ReplyDelete
  12. We are the most trusted online loan search and loan advice site in South Africa. friendlyfinance.co.za Find a lender in just a few minutes. Apply today!

    ReplyDelete
  13. "Archie 420 Dispensary welcome anyone 21+ to stop by and have a one of a kind Marijuana experience with us.
    No trip to the Evergreen state is complete without a visit to archie 420 Marijuana dispensary.
    Also, you can Check out Midweek specials: $2 off ANY pre-roll Tuesday and $2 off ANY 1 gram Wednesday! We accept variety forms of payments.
    The Archie's do strive to provide a broad range of quality Marijuana products to fit any budget!
    Archie's are conveniently located at our main office: Sour diesel weed 380 Quivas St, Denver CO, 80223, USA and 45 Lisbon st San Francisco California 94112 USA and.. Branch Unit in 2300 Windy Ridge Pkwy SE - Atlanta GA ,USA
    Archie 420 menu include all taxes, menu is subject to change and Items do sell very quickly.
    Finally, no Medical card is required. As a result, come to Archie's online shop and experience modern age of truly legalized marijuana and we offer a variety of strains to satisfy the most discerning of consumers. We are open 24/7 and you are always welcome."

    ReplyDelete
  14. Crystal online pharmacy is a trusted online drug store with a wide range of products to suit the needs of ther clients. Crystal Pharmacy do strive to offer the best service and ship products world wide. All the products listed on their website are Available in stock. Buy Viagra online Expect your order to be processed Immediately when you send your request. They deal with varieties of drugs for customers satisfaction. They also cross barriers with their products and struggle hard to meet human satisfaction. When shopping with them, Be safe and secured and you will realize how swift they are with our services.

    ReplyDelete
  15. ChemLab Store Store provide you with top quaility research chemicals like: A-pvp, Methylone Crystals, Methylone Powder, Pentedrone Crystals, Pentedrone Powder, MDPV Powder, Buphedrone Powder, 4-FMC Powder, 4-MemABP Powder, NEB Powder, AMT Powder, 6-APB Pellets, Butylone Powder, MDAI Powder, 4-FA Powder, 4-FA Crystals, MPA Powder, Methoxetamine, JWH-122 Powder, JWH-122 Herbal Buds, Ketamine, AM-2201, Herbal Buds, We have a wide range of products including JWH-018, JWH-073, JWH-200, buy 4 meo pcp online JWH-250, 4-MEC, 5-IAI, Phenazepam, 2c-i, Actavis Promethazine, Naphyrone, U-47700. Methedrone, crystal meth and other chemicals in all different amounts ranging from 5gm to 1kg retail and also large amounts at wholesale prices, When you buy Research Chemicals or bath salts from us you are guaranteed of the highest quality available on the market, high purity products, secure payment, fast and discreet international delivery.

    Disclaimer: None of the Products on ChemLab Research Chem Store are intended for human consumption and Neither ChemLab Research Chem Store,

    nor any of the staff INCLUDING the owner of ChemLab Online Chem Store resume ANY responsibility for ANY injuries to ANY individual who does not correspond with this warning and will not be held accountable for any loss or damages due to an individual burning, inhaling, or consuming into the body of any human being, animal or living specimen. This statement applies to all of the products sold on this site.

    By purchasing ANY PRODUCT ON THIS SITE, You Agree to be held 100% liable for any personal injury or damages due to you (Customer) using any of the products in any way other than that manufacturer’s instructions of use printed on the package!

    ReplyDelete
  16. Testimonial Review of Taskade, the all-in-one collaboration platform for remote teams. Unleash your team productivity with task lists, mindmaps, and video chat.

    ReplyDelete
  17. Recently, the keto diet has become extremely popular for its health benefits such as weight loss and preventing disease. A custom Keto plan for life! Visit here: keto diet definition

    ReplyDelete
  18. Indianapolis Roadside and Tow company that provides quality service to our customers. Visit: Lock out

    ReplyDelete
  19. Find the perfect handmade gift, scented soy candles vintage & on-trend clothes, unique jewelry, and more… lots more.

    ReplyDelete
  20. Health Experts have proven that regular exercise coupled with a good diet allow you to live longer and healthier. In this busy day and age, not everyone has the time to go to the gym - resulting to a lot of overweight people that desperately need to exercise. A healthy alternative is for you to Buy Home Gym Equipments that you can store in your own home or even at your office. Here are some tips when buying home gym equipment.

    First, know your fitness goals and keep these goals in mind when you are buying home gym equipment. One of the biggest mistakes that people make is buying the biggest or trendiest fitness machine simply because they like how it looks. More often than not, these end up gathering dust in your storage rooms or garage because you never end up using them. It is important to take note of what particular type of physical activity you want or enjoy doing before you buy your exercise machine. If you are looking to loose a few pounds and you enjoy walking or hiking, a treadmill is the best option for you. If you are looking to tone your lower body while burning calories a stationary bike is your obvious choice. Similarly, Special Equipments for Core Strength Exercises, Strength Training Weight Vests, Core Strength & Abdominal Trainers, Home Cardio Training, Strength Training Power Cages, Strength Training Racks & More.

    Second, set aside a budget before Buying Home Gym Equipments. Quality exercise machines do not come cheap. They are constantly exposed to wear and tear when they are used properly. So, pick machines that are built to last and have passed quality certifications to get the most out of your money. If you are operating on a tight budget, think about investing in several weights, We can Provide you High Quality Home Gym Equipments at Very Low Prices for your Complete Uses: Core Strength Exercises, Strength Training Weight Vests, Core Strength & Abdominal Trainers, Home Cardio Training, Strength Training Power Cages, Strength Training Racks & More.

    Its the Right Time to Buy Home Gym Equipments for you at Very Low Prices.

    ReplyDelete
  21. https://artificialgrasslab.com/ Artificial Grass Lab contains guides that enable you to choose, install and maintain synthetic turf products both in indoor and outdoor environment.

    ReplyDelete
  22. - Como organizar sua Semana com o Taskade - Segunda Feira, primeiro dia.
    Como organizar sua semana com o Taskade - Terça - Vlog de Produtividade
    - Como organizar sua semana com o Taskade - Quarta
    - Como organizar sua semana com o Taskade - Quinta - Vlog Produtividade.
    - Taskade - Sexta, Sábado e Domingo. Como foi e uma grande novidade

    ReplyDelete
  23. Crystal online pharmacy is a trusted online drug store with a wide range of products to suit the needs of our clients. Crystal Pharmacy do strive to offer the best service and ship products world wide. All the products listed on our website are Ava in stock. Expect your order to be processed Immediately when you send us your request. Buy Electrolytes online We deal with varieties of drugs for our customers satisfaction. We cross barriers with our products and struggle hard to meet human satisfaction. When shopping with us, Be safe and secured and you will realize how swift we are with our services.

    ReplyDelete
  24. Archie 420 Dispensary is a trusted Cannabis dispensary base in Los Angeles California USA. It is one of the top dispensary in this part of the country. Indica vs sativa They do deliver Marijuana in the USA and to over 25 countries in the world. You can always visit their dispensary in Los Angeles using the address on their website. Place your order and get served by the best dispensary in the planet. Have fun.

    ReplyDelete
  25. Buy Dank Now began as an idea to create a top-notch delivery service for buy weed online in the US and quickly evolved in much more. Even though California accepted Safe to Buy Marijuana Online in 1996, we felt there was still a major lacking in quality and service. From what once started as a humble, flower-child type movement, evolved into the next California gold rush.

    Buy Dank Now Shop is committed to ensuring that your privacy and security is protected at all times, in fact, we care so much that we offer guaranteed stealth delivery to anywhere in the world at no extra cost! Buy Weed Online, Glo Carts, Glo Extracts, Glo Cart, Glo Cartridges, Glo thc Carts, Glo vape, Lions Breath Carts, Big Chief Carts and All orders are fully guaranteed, so whatever happens, nothing will ever stand between you and your weed!

    With literally thousands upon thousands of amazing strains from the best breeders in the world, ranging from famous cup-winners to potent, CBD-laden medical strains, High THC powerhouses, Glo Extracts, famous cheese to Buy Marijuana Online and Glo Carts popular white widow strains, all the way through to some of the rarest, hardest-to-find varieties in the world.

    Why Is Marijuana Effective for Treating Anxiety? Conventional medicine uses several different kinds of drugs to treat anxiety disorders, including serotonin reuptake inhibitors like Zoloft and tranquilizers like Valium. However, many patients don’t respond well to these medications. One of the non-psychoactive cannabinoids found in marijuana that is commonly used to treat anxiety is cannabidiol (CBD). Various scientists and researchers have experimented with both animals and humans to test the effectiveness of CBD for anxiety treatment.

    You can get it all right here at Buy Dank Now! Because we only ever work with breeders who meet our rigorous quality standards, you can be sure that whatever products you get from our Website such as, Glo Carts, Glo Extracts, Glo Cart, Glo Cartridges, Glo thc Carts, Glo vape, Lions Breath Carts, Big Chief Carts, they’ll make exceptional additions to your genetic library!

    ReplyDelete
  26. ac repair and services in manikonda Extend the Lifespan of Your System with Proper Maintenance Like all machines, air conditioners benefit from regular maintenance; we know that for a fact.

    ReplyDelete
  27. PMP certification is the globally recognized certification for project management. It is the validity given by the PMI Institute to candidates who clear certain education and professional criteria - Pass PMP.

    There are many ways to Pass PMP certification.


    Go for the heavy books, memorize them, sit for PMP trainings on your weekend, sit in the long, sleepy PMP video on demand trainings and still have the unsurety of passing the exam.
    Get PMP dumps, PMP practice exams, PMP review material and try to memorize hundreds of questions and still fear of forgetting some and getting new questions as PMP changes very frequently.
    Contact CBTproxy and through PMP proxy exam, get your PMP certification without any hassle.
    There are several sites selling PMP dumps and PMP exam questions which are 90% not reliable. Since there are always new questions in PMP exam, there is no reliability on the PMP dumps. Contact CBTproxy and through our PMP proxy exam, Pass PMP Certification without any hassle. We ensure first time passing guarantee and liberate the candidate from taking the real exam multiple times - PMP Brain Dump.

    ReplyDelete
  28. Descubre los mejores diseños de alfombras vinilicas y azulejos adhesivos para decoración e interiorismo. Alfombras infantiles Envío gratis

    ReplyDelete
  29. Impresión online en gran formato, Impresión lonas imprimimos roll ups, photocalls, vinilos, lonas. Envío gratis

    ReplyDelete
  30. Impresión online en gran formato, Impresión lonas imprimimos roll ups, photocalls, vinilos, lonas. Envío gratis

    ReplyDelete
  31. MetroBizPros is a firm of Business Brokers & Franchise Consulting that focuses on providing exceptional service to Buyers, Sellers, and existing/future franchisees. Our services are delivered with the maximum in confidentiality, Business For Sale professionalism and integrity. MetroBizPros is effective and results oriented, leveraging a database of qualified Financial and Strategic Buyers and a confidential national collaborative network of Business Intermediaries. We serve the needs of potential Buyers and Sellers in the District of Columbia, Maryland, Virginia, and in many other states, discretely and professionally with one mission in mind: To add exceptional value to a seamless process of Business Transfer.

    We work with businesses of any size or industry and pride ourselves on our committed and comprehensive service. Our Business Brokers and Consultants operate with honesty and confidentiality to ensure success for both the buyer and the seller. It’s only when the conditions of the deal are suitable to all parties involved that everyone prospers.

    Our Services include but are not limited to, business listings, business valuations, transaction management commercial real estate and new franchise opportunities.

    ReplyDelete
  32. We are a clean skincare brand, 100% organic and made with what the earth has given us first. Our product formulations came from listening to our ingredients. From their benefits, https://www.zotero.org/firstbaseskncare/cv scents and results, our products are truly science of the earth. We wanted to step back from the long list of hard to pronounce scientific gibberish and provide ingredients relatable and understood. We are very proud to be one of the first few on the market to be ECO-Certified under the COSMOS standards, and for us we want to leave the earth better than we found it.

    ReplyDelete
  33. Buy Modafinil Online – Buying pills like Modafinil is not easy. Are you trying to purchase modafinil online? If your answer is Yes, then you are in the right place. In this buyer’s guide, we are going to cover everything you need to know about the most popular nootropic in the world.

    ReplyDelete
  34. Congratulation for this successful project. 토토사이트 Can you please share some pictures of the your project. I am going to share this post with my friends. 먹튀검증

    ReplyDelete
  35. What an incredibly beautiful story, despite the fact that it is rugged but the result turned out to be kind and good and now it has become a tradition that is passed on in every generation 먹튀검증

    ReplyDelete
  36. Archie 420 Dispensary is a trusted Cannabis dispensary base in Los Angeles California USA. It is one of the top dispensary in this part of the country. Super silver haze for sales They do deliver Marijuana in the USA and to over 25 countries in the world. You can always visit their dispensary in Los Angeles using the address on their website. Place your order and get served by the best dispensary in the planet. Have fun.

    ReplyDelete
  37. Crystal online pharmacy is a trusted online drug store with a wide range of products to suit the needs of our clients. Buy CLA online Crystal Pharmacy do strive to offer the best service and ship products world wide. All the products listed on our website are Ava in stock. Expect your order to be processed Immediately when you send us your request. We deal with varieties of drugs for our customers satisfaction. We cross barriers with our products and struggle hard to meet human satisfaction. When shopping with us, Be safe and secured and you will realize how swift we are with our services.

    ReplyDelete
  38. Why Your Online Business Needs A WordPress Website

    The WordPress site framework is currently the most generally utilized site building stage on the web, with more than 22% of all dynamic areas utilizing it. This site program has the usefulness to assist your online business with procuring income also giving as a total substance the board framework.

    There are in excess of 75 million WordPress sites on the web and it is supposedly utilized by numerous lofty associations. On the off chance that it is adequate for them, it will doubtlessly be sufficient for your online business.

    A Flexible Website Builder.

    WordPress is an entirely adaptable program for an online business. You have the choice to post customary news things onto your site and make explicit item deals pages. You can decide to permit remarks on your pages which makes client created content as peruser's remarks. Updates can be planned for advance so that pages can go live at a pre-decided time and you can make certain pages private so just your clients with the particular URL can get to them.

    Creator Management.

    The program permits you to have numerous clients with various degrees of power. You can let others to make and add substance to your site without giving them full access rights to the whole site situation. You likewise can check and support any updates before they go live.

    wordpress website templates.

    At the point when a guest lands on your site, you just have seconds to dazzle them and convince them to remain. With the site layouts (called subjects) you can transfer an immense wide range of topics at the snap a catch. A few subjects are free and some have a little expense and there will be a topic that gives the look and highlights that you need for your online business. You can likewise effectively review and trade between subjects to see which one you like best.

    A WordPress Website Design To Suit You.

    The fundamental site download is a minimal programming system and you do have to add the additional items, or modules, to expand your site's abilities. Numerous modules are free and permit you to do various things including the formation of mailing records, contact structures, connect following, site design improvement frameworks, site investigation and the sky is the limit from there.

    Since there are so numerous WordPress sites on the web there are individuals everywhere on the world who create additional items, modules, topics for you to download to your site. What was once utilized for publishing content to a blog has now developed into an exceptionally incredible program to assist you with making a site that will attract the traffic and bring in cash for you.

    ReplyDelete
  39. Universal Gun sales is a trusted Firearm company base in Los Angeles California USA. It is one of the top Firearms Company in this part of the country. Buy hunting guns online They do offer the best firearms deal in the USA and to over 25 countries in the world. You can always visit their shop in Los Angeles using the address on their website. Place your order and get served by the best Firearm Company in the planet. Have fun.

    ReplyDelete
  40. test bank go Testbank.Shop | For All Your Test Bank and Solution Manual Needs

    ReplyDelete
  41. If you're looking for free movies online feel free to visit the site. free online streaming website You can watch unlimited movies and tv shows without any registration. Bazflix has thousands of movies and tv shows online.

    ReplyDelete
  42. massage mundaring is run by a talented female massage therapist and is based from her home studio in Mundaring. Trained in an introductory Traditional Thai Style Yoga massage course, in Northern Thailand mid 2015, Her eyes opened to the different cultural style of massage, which is offered fully clothed with pressing, stretching, extending and rotating techniques focusing on meridian and acupressure points. Her chosen style of massage is Deep Tissue and Trigger Point which she believes to be powerful at unlocking and manipulating the muscle fibers, allowing new oxygen and blood to restore the tissue. Her technique is described by her clients as fluid, deep, rhythmic, releasing and restorative.

    ReplyDelete
  43. Health Experts have proven that regular exercise coupled with a good diet allow you to live longer and healthier. In this busy day and age, not everyone has the time to go to the gym - resulting to a lot of overweight people that desperately need to exercise. A healthy alternative is for you to Buy Home Gym Equipments that you can store in your own home or even at your office. Here are some tips when buying home gym equipment.

    First, know your fitness goals and keep these goals in mind when you are buying home gym equipment. One of the biggest mistakes that people make is buying the biggest or trendiest fitness machine simply because they like how it looks. More often than not, these end up gathering dust in your storage rooms or garage because you never end up using them. It is important to take note of what particular type of physical activity you want or enjoy doing before you buy your exercise machine. If you are looking to loose a few pounds and you enjoy walking or hiking, a treadmill is the best option for you. If you are looking to tone your lower body while burning calories a stationary bike is your obvious choice. Similarly, Special Equipments for Core Strength Exercises, Strength Training Weight Vests, Core Strength & Abdominal Trainers, Home Cardio Training, Strength Training Power Cages, Strength Training Racks & More.

    Second, set aside a budget before Buying Home Gym Equipments. Quality exercise machines do not come cheap. They are constantly exposed to wear and tear when they are used properly. So, pick machines that are built to last and have passed quality certifications to get the most out of your money. If you are operating on a tight budget, think about investing in several weights, We can Provide you High Quality Home Gym Equipment at Very Low Prices for your Complete Uses: Core Strength Exercises, Strength Training Weight Vests, Core Strength & Abdominal Trainers, Home Cardio Training, Strength Training Power Cages, Strength Training Racks & More.

    Its the Right Time to Buy Home Gym Equipment for you at Very Low Prices.

    ReplyDelete
  44. 국내 최고 스포츠 토토, 바카라, 우리카지노, 바이너리 옵션 등 검증완료된 메이져 온라인게임 사이트 추천해 드립니다. 공식인증업체, 먹튀 검증 완료된 오라인 사이트만 한 곳에 모아 추천해 드립니다 - 카지노 사이트 - 바카라 사이트 - 안전 놀이터 - 사설 토토 - 카지노 솔루션.

    온라인 카지노, 바카라, 스포츠 토토, 바이너리 옵션 등 온라인 게임의 최신 정보를 제공해 드립니다.

    탑 카지노 게임즈에서는 이용자 분들의 안전한 이용을 약속드리며 100% 신뢰할 수 있고 엄선된 바카라, 스포츠 토토, 온라인 카지노, 바이너리 옵션 게임 사이트 만을 추천해 드립니다.

    ReplyDelete
  45. It's very interesting. And it's fun. This is a timeless article. I also write articles related to , and I run a community related to 안전놀이터. For more information, please feel free to visit !!

    ReplyDelete

emo-but-icon

SUBSCRIBE


item