I want to apply MVC2 J2EE approach in my work with JSP pages.
I want to separate the code in Servlet and design in JSP.
The problem I am facing is that I want to display all users and their data from DB table
to HTML table in JSP page
Now How should I call the servlet from JSP page, since there is no form in display page
and I don't know whether I could use dispatcher since the admin will click on <a href>display users and JSP pages should display all uesrs. How can i make that?
views:
167answers:
1
+3
A:
Just use the doGet() method of the Servlet and call the URL of the servlet instead.
E.g.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<User> users = userDAO.list();
request.setAttribute("users", users);
request.getRequestDispatcher("/WEB-INF/users.jsp").forward(request, response);
}
Map this servlet in web.xml as follows:
<servlet>
<servlet-name>users</servlet-name>
<servlet-class>com.example.UsersServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>users</servlet-name>
<url-pattern>/users</url-pattern>
</servlet-mapping>
Now the servlet is accessible by http://example.com/context/users.
In the /WEB-INF/users.jsp file use JSTL c:forEach to display users in a table.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.name}</td>
<td>${user.email}</td>
<td>${user.age}</td>
</tr>
</c:forEach>
</table>
The JSP file is to be placed in /WEB-INF folder to avoid that it's accessible without calling the servlet first.
See also:
- How to avoid Java code in JSP files
- Hidden features of JSP/Servlet
- (Advanced) design patterns in JSP/Servlet
Update: to install JSTL, take the following steps:
- Download jstl-1.2.jar.
- Drop it in
/WEB-INF/libfolder. Do NOT extract it! Do NOT changeweb.xml! Some poor online tutorials will suggest this. They're all wrong. Declare the taglib of interest in top of JSP page as per the JSTL TLD documentation. For example, JSTL core:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
BalusC
2010-09-13 23:19:47
when i use </c:forEach> it makes error so i download JSTL_imp jar file and JSTL_api jar file and add it to my project , but </c:forEach> didn't recognize yet
Alaa
2010-09-14 00:15:58
See update in answer. I assume you're using a Servlet 2.5 container (e.g. Tomcat 6.x and up) and that your `web.xml` is declared as Servlet 2.5.
BalusC
2010-09-14 00:22:16
can u tell me what is user in servlet mapping<servlet-mapping> <servlet-name>users</servlet-name> <url-pattern>/users</url-pattern></servlet-mapping>Is it MY JSP page?
Alaa
2010-09-14 00:27:56
for each now is work very well thanx , plz see the other comment .
Alaa
2010-09-14 00:29:26
No, it is the URL which the Servlet should listen on. If you open http://example.com/context/users, then it will execute any servlet which is listening on an `url-pattern` of `/users` (or `/users/*`). See also the "See also" links for more hints and details. By the way, don't forget to mark the answer accepted (and those on your [previous questions](http://stackoverflow.com/users/303467/alaa), your accept rate is pretty poor).
BalusC
2010-09-14 02:40:01