目录:
登录系统
提交表单数据
打开PDF
Cookie
URL传递参数
URL重写跟踪会话
使用HttpSession对象跟踪会话
Servlet间协作
过滤器Filter
<!DOCTYPE HTML PUBLIC "=//w3c//dtd html 4.0 transitional/cn">
<html>
<head>
<title>提交表单数据</title>
</head> <body bgcolor="#FFFFFF">
<h1 align="center"><b>欢迎登陆系统</b></h1>
<form action = "servlet/GetPostData" method = "post">
<p></p>
<table width = "52%"border="2" align ="center">
<tr bgcolor ="#FFFFCC">
<td align = "center" width="43%"><div align="center">用户名:</div></td>
<td width="57%">
<div align="left">
<input type ="text" name = "username">
</div>
</td>
</tr> <tr bgcolor = "#ccff99">
<td align = "center" width = "43%">
<div align= "center">密码:</div>
</td>
<td width = "57%">
<div align = left>
<input type="password" name= "password">
</div>
</td>
</tr>
</table> <p align="center">
<input type="reset" name= "Reset" value = "重置">
<input type="submit" name= "Submit2" value = "提交">
</form>
</body>
</html>
GetPostData.java
protected void processRequest(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
resp.setContentType("text/html;charset=gb2312"); //确保汉字信息正确编码方式显示
req.setCharacterEncoding("gb2312");//确保参数信息以汉字编码方式提取
PrintWriter myout = resp.getWriter();
myout.println(
"<html>"+
"<head></head>"+
"<body bgcolor=\"#FDF5E6\">\n"+
"<h1 align=center>"+"get post data" + "</h1>\n"+
"<ul>\n"+
"<li><b>username</b>:"+
req.getParameter("username")+"\n"+
"<li><b>password</b>:"+
req.getParameter("password")+"\n"+
"</ul>\n"+
"</body></html>"
);
myout.close();
} protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
processRequest(req,resp);
} protected void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
processRequest(req,resp); }
============================================================
<!DOCTYPE HTML PUBLIC "=//w3c//dtd html 4.0 transitional/cn">
<html>
<head>
<title>提交表单数据</title>
</head> <body bgcolor="#FFFFFF">
<h1 align="center"><b>选择你喜欢的蔬菜</b></h1>
<form action="servlet/GetPostData" method="post">
<input type="checkbox" name="vegatablebox" value="Cucumber">黄瓜
<input type="checkbox" name="vegatablebox" value="Tomato">西红柿
<input type="checkbox" name="vegatablebox" value="Potato">土豆
<ul></ul>
<input type="reset" name="Reset" value="重置">
<input type="submit" name="Submit" value="提交">
</form>
</body>
</html>
GetPostData.java
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=gb2312"); //确保汉字信息正确编码方式显示
request.setCharacterEncoding("gb2312");//确保参数信息以汉字编码方式提取
String[] paramValues = request.getParameterValues("vegatablebox");
PrintWriter out = response.getWriter();
out.print(
"<html>"+
"<head><title>喜欢的蔬菜</title></head>"+
"</body>"+
"你喜欢的蔬菜是:");
for(int vnum = 0 ; vnum < paramValues.length ; vnum++){
out.print(paramValues[vnum]+" ");
}
out.print(
"</body></html>"
);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
============================================================
public void pdfInfo(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("application/pdf");
ServletOutputStream out = response.getOutputStream();
//response.setHeader("Content-disposition", "attachment;filename=sample.pdf");
//不在网页中直接显示,而是下载
File pdf = null;
BufferedInputStream buf = null;
try{
pdf=new File("f:\\sample.pdf");
response.setContentLength((int)pdf.length());
FileInputStream input = new FileInputStream(pdf);
buf = new BufferedInputStream(input);
int readBytes=0;
while((readBytes=buf.read())!=-1)
out.write(readBytes);
}catch(IOException e){
out.println("File not found!");
}finally{
if(out!=null){
out.close();
}if(buf!=null)
buf.close();
}
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
pdfInfo( request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
pdfInfo( request, response);
}
============================================================
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { Cookie cookie = null;
//获取请求相关的Cookie
Cookie[] cookies = request.getCookies();
//判断Cookie ServletStudy是否存在,若存在,数值+1
/*if(cookies!= null){
for(int i = 0 ; i <cookies.length ; i ++){
if(cookies[i].getName().equals("VisitTimes")){
String v = cookies[i].getValue();
int value = Integer.parseInt(v)+1;
cookies[i].setValue(Integer.toString(value));
//将值更新后的cookie重新写回响应
response.addCookie(cookies[i]);
cookie=cookies[i];
}
}
}//end if
*/
if(cookies!= null){
for(int i = 0 ; i <cookies.length ; i ++){
if(cookies[i].getName().equals("VisitTimes")){
cookie=cookies[i];
break;
}
}
}//end if if(cookie == null){
int maxAge=-1;
//创建Cookie对象
cookie=new Cookie("VisitTimes","1");
cookie.setPath(request.getContextPath());
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}//end if
else{
//定义一个存放次数的变量
int count = 0;
//通过getValue()方法得到从客户端myCookie的值,得到的值是一个String类型的要将转换成int类型的,才能进行计数操作
count = Integer.parseInt(cookie.getValue());
//累加访问的次数
count++;
//把count的值添加到定义的Cookie对象中
cookie.setValue(String.valueOf(count));
//设置Cookie的最大保存时间
//cookie.setMaxAge(60 * 60 * 24 * 30);
//把Cookie添加到客户端
response.addCookie(cookie); } //显示信息
response.setContentType("text/html;charset=gb2312"); //确保汉字信息正确编码方式显示
response.setCharacterEncoding("gb2312");//确保参数信息以汉字编码方式提取
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Cookie 跟踪会话</title>");
out.println("</head>");
out.println("<body>");
out.println("<h2>您好!</h2>");
out.println("欢迎您"+cookie.getValue()+"访问本页面<br>"); out.println("</body>");
out.println("</html>"); } public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
============================================================
URLRewrite.java
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html,charset=GB2312");
response.setCharacterEncoding("gb2312");//确保参数信息以汉字编码方式提取
PrintWriter out = response.getWriter();
String contextPath = request.getContextPath();
String encodedUrl = response.encodeURL(contextPath+
"/servlet/URLRewriteServer?name=张三&age=27");
out.println("<html>");
out.println("<head>");
out.println("<title>URL Rewriter</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>URL重写演示:发送参数</h1>");
out.println("转到URL2<a href=\""+encodedUrl+"\">here</a>"); out.println("</body>");
out.println("</html>"); } public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
URLRewriteServer.java
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html,charset=GB2312");
response.setCharacterEncoding("gb2312");//确保参数信息以汉字编码方式提取
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>URL Rewriter</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>URL重写演示:接收参数</h1>");
out.println("下面是接收的参数:<br>");
String paramname= request.getParameter("name");
String x = new String(paramname.getBytes("ISO-8859-1"), "GBK");
//直接显示汉字会导致乱码,所以先转换为GBK
//out.println("name="+request.getParameter("name"));
out.println(x);
out.println("age="+request.getParameter("age")); out.println("</body>");
out.println("</html>");
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
注意
String paramname= request.getParameter("name");
String x = new String(paramname.getBytes("ISO-8859-1"), "GBK");
//直接显示汉字会导致乱码,所以先转换为GBK
============================================================
URLRewrite.java
public class URLRewrite extends HttpServlet {
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html,charset=GB2312");
response.setCharacterEncoding("gb2312");//确保参数信息以汉字编码方式提取
PrintWriter out = response.getWriter();
String contextPath = request.getContextPath();
String encodedUrl = response.encodeURL(contextPath+
"/servlet/URLRewriteServer?name=张三&age=27");
out.println("<html>");
out.println("<head>");
out.println("<title>URL Rewriter</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>URL重写演示:发送参数</h1>");
out.println("转到URL2<a href=\""+encodedUrl+"\">here</a>");
out.println("</body>");
out.println("</html>");
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
}
URLRewriteServer.java
public class URLRewriteServer extends HttpServlet {
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html,charset=GB2312");
response.setCharacterEncoding("gb2312");//确保参数信息以汉字编码方式提取
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>URL Rewriter</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>URL重写演示:接收参数</h1>");
out.println("下面是接收的参数:<br>");
String paramname= request.getParameter("name");
String x = new String(paramname.getBytes("ISO-8859-1"), "GBK");
//直接显示汉字会导致乱码,所以先转换为GBK
//out.println("name="+request.getParameter("name"));
out.println(x);
out.println("age="+request.getParameter("age"));
out.println("</body>");
out.println("</html>");
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
}
============================================================
HitCounter.java
public class HitCounter extends HttpServlet {
static final String COUNTER_KEY="Counter";
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取会话对象
HttpSession session = request.getSession(true);
response.setContentType("text/html;charset=GB2312");
response.setCharacterEncoding("gb2312");//确保参数信息以汉字编码方式提取
PrintWriter out = response.getWriter();
//从会话中获取属性
int count =1;
Integer i = (Integer)session.getAttribute(COUNTER_KEY);
//如果存在以前的数值
if(i!=null){
count=i.intValue()+1;
}
//将属性信息存入会话
session.setAttribute(COUNTER_KEY, new Integer(count));
Date lastAccessed = new Date(session.getLastAccessedTime());
Date sessionCreated = new Date(session.getCreationTime());
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);
//输出对话信息
out.println("<html>");
out.println("<head>");
out.println("<title>会话计数器</title>");
out.println("</head>");
out.println("<body>");
out.println("你的会话ID:<b>"+session.getId()+"<br>");
out.println("会话创建时间:"+formatter.format(sessionCreated)+"<br>");
out.println("会话上次访问时间:"+formatter.format(lastAccessed)+"<br>");
out.println("</b>会话期间你向页面发起<b>"+count+"</b>次请求");
out.println("<form method=GET action=\""+request.getRequestURI()+"\">");
out.println("<input type='submit'"+"value=\"再次点击...\">");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
}
============================================================
Main.java
public class Main extends HttpServlet {
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String m_userID = request.getParameter("userID");
if(m_userID==null) m_userID="";
String m_password = request.getParameter("password");
if(m_password==null) m_password="";
if(m_userID.equals("guest")&&m_password.equals("guest")){
RequestDispatcher dispatcher =request.getRequestDispatcher("/servlet/LoginSuccess");
dispatcher.forward(request,response);
//RequestDispatcher.forward()方法
//将当前的request和response重定向到该 RequestDispacher指定的资源。
}else{
RequestDispatcher dispatcher =request.getRequestDispatcher("/servlet/LoginFail");
dispatcher.forward(request,response);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
}
LoginSuccess.java
public class LoginSuccess extends HttpServlet {
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GB2312");
response.setCharacterEncoding("gb2312");
PrintWriter out = response.getWriter();
String name = request.getParameter("userID");
out.println("<html>");
out.println("<head>");
out.println("<title>登录成功</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>欢迎!"+name+ "您已成功登录系统...</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
}
LoginFail.java
代码和LoginSuccess.java类似,只改了汉字
dl.html
<!DOCTYPE HTML PUBLIC "=//w3c//dtd html 4.0 transitional/cn">
<html lang='zh'>
<head>
<title>登录</title>
</head>
<h1 align="center"><b>欢迎登陆系统</b></h1>
<form name="login" method = "post" action="servlet/Main">
<div align="center">用户名:</div>
<input type ="text" name = "userID" value="">
<div align= "center">密码:</div>
<input type="password" name= "password" value="">
<input type="reset" name= "reset" value = "重置">
<input type="submit" name= "tj" value = "提交">
</form>
</body>
</html>
============================================================
在上一部分的程序基础上加上
TimeTrackerFilter.java
public class TimeTrackFilter implements Filter {
private FilterConfig filterConfig=null;
public void destroy() {
this.filterConfig=null;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
Date startTime , endTime;
double totalTime;
StringWriter sw = new StringWriter();
System.out.println("我在Filter中");
try{
Thread.sleep(2000);
}catch(InterruptedException e){
System.out.println(e.toString());
}
startTime = new Date();
chain.doFilter(request, response);
endTime = new Date();
totalTime = endTime.getTime()- startTime.getTime();
System.out.println("我在Filter中");
PrintWriter writer = new PrintWriter(sw);
writer.println("==============");
writer.println("耗时"+totalTime+"毫秒");
writer.println("==============");
filterConfig.getServletContext().log(sw.getBuffer().toString());
}
public void init(FilterConfig fConfig) throws ServletException {
this.filterConfig=fConfig;
} }
需要完成destory() init() doFilter() 三个函数
其余效果均与上一个程序相同,在服务器控制台会有如下显示