users = DatabaseService.getAllUsers();
request.setAttribute("users", users);
path = LIST_USERS_VIEW;
}
```
在这里,我们检索所有用户并将用户列表设置为请求对象。 我们选择`LIST_USERS_VIEW`视图。
```java
response.sendRedirect(path);
```
遵循发布/重定向/获取模式,我们将重定向到`doPost()`方法中的视图。 这样可以防止提交多个表单。 (例如,我们可能不小心多次添加了一个用户)。
`addUser.ftl`
```java
Add new user
```
`addUser.ftl`是一个模板文件,其中包含用于添加新用户的表单。
```java
```
`addUser.ftl`模板文件包含用于更新特定用户的表单。
```java
```
这种 CSS 样式将浅色的只读输入标签的背景绘制为灰色。
```java
Id:
```
ID 是一个只读参数。 `${user.id}`是一个 FreeMarker 插值,可解析为用户 ID。 在到达`updateUser.ftl`文件之前,该请求获得一个将要修改的用户对象。
`listUsers.ftl`
```java
List users
User Id
First Name
Last Name
Email
Action
<#list users as user>
${user.id}
${user.firstName}
${user.lastName}
${user.email}
Update
Delete
#list>
Add new user
```
`listUsers.ftl`模板文件列出了`Users`数据库表中的所有用户。
```java
<#list users as user>
```
FreeMarker `#list`指令遍历`users`集合的所有元素。
```java
${user.id}
${user.firstName}
${user.lastName}
${user.email}
```
这些 FreeMarker 插值显示用户数据。
```java
Update
```
该链接将更新操作发送到应用控制器; 它还发送要修改的用户的 ID。
```java
Delete
```
该链接将删除操作发送到应用控制器。 它还发送要删除的用户的 ID。
```java
Add new user
```
该链接将添加用户操作发送到控制器。
`index.html`
```java
Main page
List all users
```
这是一个带有链接的主页,该链接将列表用户的操作发送到控制器。
`userAdded.html`
```java
User added
New user has been added successfully.
List all users
```
该视图通知用户已成功添加到数据库表中。
`userDeleted.html`
```java
User deleted
User has been successfully deleted.
List all users
```
此视图通知用户删除。
`userUpdated.html`
```java
User modified
User has been modified successfully.
List all users
```
该视图通知用户的修改。
![Users web application](img/ee293d8525f759cf682d04eb692d8475.jpg)
图:用户 Web 应用程序
在上面的屏幕截图中,我们可以看到用户列表。 该应用部署在 NetBeans 内置的 Tomcat 服务器上,该服务器正在侦听端口 8084。
在本教程中,我们创建了一个执行 CRUD 操作的 Java Web 应用。 它使用了 FreeMarker,Servlet 和`JDBCTemplate`。 您可能也对相关教程感兴趣: [`JdbcTemplate`教程](/db/jdbctemplate/), [FreeMarker 教程](/java/freemarker/), [Java 教程](/lang/java/),[游戏入门](/java/play/), [Spark 简介](/java/spark/)或 [Strips 简介](/java/stripes/)。