Servlet
考虑一个银行的业务处理,用户应该能够登录到自己的账户、查看账户余额、取款等。除了这些活动外,还有许多其他的业务规则需要说明,例如,用户不能察看别人的账户或从别人的账户上取款等。
一个简化的银行事务例子应包含以下组件;
login.html 、 error.html 、 LoginServlet 、 AccountServlet
用户首先通过login.html页面登录,然后使用LoginServlet来验证用户名和口令,如果合法则将请求转发到AccountServlet,否则转发到error.html页面。AccountServlet让用户查看账户信息。
1.登录页面login.html
<html>
<head>
<title>Login.html</title>
</head>
<body>
<center>请输入用户名和口令查看账户信息<br/></center>
<form action="login.do" method="get">
用户名:
<input type="text" name="username" size="15"/><br/>
密 码:
<input type="password" name="password" size="15"/><br/>
<input type="submit" value="登录"/> <input type="reset" value="取消"/>
</form>
</body>
</html>
2.验证页面LoginServlet.java
package com.demo;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.HashMap;;
public class LoginServlet extends HttpServlet
{
ServletContext context;
HashMap<String,String> users=new HashMap<String,String>();
public void init() throws ServletException
{
context=getServletContext();
users.put("ann","aaa");
users.put("john","jjj");
users.put("mark","mmm");
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String username=request.getParameter("username");
String password=request.getParameter("password");
if(username!=null&&password!=null&&password.equals(users.get(username)))
{
request.setAttribute("username",username);
RequestDispatcher view=context.getRequestDispatcher("/account.do");
view.forward(request,response);
return;
}
else
{
RequestDispatcher view=context.getRequestDispatcher("/error.html");
view.forward(request,response);
return;
}
}
}
3.账户信息页面AccountServlet.java
package com.demo;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.HashMap;;
public class AccountServlet extends HttpServlet
{
ServletContext context;
HashMap<String,String[]> data=new HashMap<String,String[]>();
public void init() throws ServletException
{
context=getServletContext();
data.put("ann",new String[]{"01/01/2009:1000.00","01/02/2009:1300.00","01/03/2009:900/00"});
data.put("john",new String[]{"01/01/2009:4500.00","01/02/2009:2100.00","01/03/2009:2600/00"});
data.put("mark",new String[]{"01/01/2009:7800.00","01/02/2009:5200.00","01/03/2009:1900/00"});
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String username=(String)request.getAttribute("username");
if(username!=null)
{
String [] records=(String[])data.get(username);
response.setContentType("text/html;charset=gb2312");
PrintWriter out=response.getWriter();
out.println("<HTML>");
out.println(" <BODY>");
out.println("您好!"+username+",您的账户信息如下:<p>");
for(int i=0;i<records.length;i++)
{
out.println(records[i]+"<br>");
}
out.println("<HTML>");
out.println(" <BODY>");
}
else
{
RequestDispatcher view=context.getRequestDispatcher("/login.html");
view.forward(request,response);
}
}
}
4.在DD文件中添加Servlet定义
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AccountServlet</servlet-name>
<url-pattern>/account.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file/>
<welcome-file>/Login.html</welcome-file>
</welcome-file-list>
从Tomcat中打开Login页面登录: