举一个简单的servlet的例子:比如查询用户。
(1)在页面输入用户名,点击查询按钮(<input type="submit" value="提交">)进行提交。
<form action="servlet/queryUser.action" method="post">
(2)根据配置文件web.xml。
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.ys.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
(3)执行TestServlet.java
public class TestServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String requestURI = request.getRequestURI();
String path = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));
Action action = null;
if ("/servlet/addUser".equals(path)) {
action = new AddUserAction();
}else if ("/servlet/delUser".equals(path)) {
action = new DelUserAction();
}else if ("/servlet/modifyUser".equals(path)) {
action = new ModifyUserAction();
}else if ("/servlet/queryUser".equals(path)) {
action = new QueryUserAction();
}else {
throw new RuntimeException("请求失败!");
}
String forward = null;
try {
forward = action.execute(request, response);
} catch (Exception e) {
e.printStackTrace();
}
request.getRequestDispatcher(forward).forward(request, response);
}
}
在TestServlet中截取URL、根据URL分发到相应的Action,如(Action action = new QueryUserAction())。
(4)执行QueryUserAction.java
public class QueryUserAction implements Action {
@Override
public String execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String userName = request.getParameter("userName");
//其他查询条件......
//调用业务逻辑
UserManager userManager = new UserManager();
List userList = userManager.query(userName);
request.setAttribute("userList", userList);
return "/query_success.jsp"; //转向路径可以通过配置文件读取
}
}
(5)转向到相应的视图页面,渲染页面,进行显示。
<body>
查询成功!
<p>
<%=request.getAttribute("userList") %>
</body>
用时序图分析整个流程如下: