服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

几个实用的servlet应用例子-入门、cookie、session及上传文件


  servlet可以被认为是服务端的applet,它被web服务器加载和执行,前端可以显示页面和获得页面数据,后台可以操纵数据库,能完成javabean的很多功能。在这里我较为详细的说说servlet在cookie,session和上传文件上的应用,在说明时我给出一些能编绎运行的小例子,最后给出一个文件上传例子以加深印象。
  我们先来看看servlet程序的基本构架:
式1:
  package test;
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.*;
  import java.util.*;
  public class test extends httpservlet {
  public void init(servletconfig config) throws servletexception {
  super.init(config);
}
  public void service(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  int f =1; switch(f){
  case 1:firstmothed(request,respponse);break;
}
}
  public void firstmothed(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  response.setcontenttype("text/html");
  outputstreamwriter osw = new
  outputstreamwriter(response.getoutputstream());
  printwriter out = new printwriter (response.getoutputstream());
  out.println("< html>");
  out.println("< head>< title>servlet1< /title>< /head>");
  out.println("< body>你好!");
  out.println("< /body>< /html>");
  out.close();
}
}
式2:
  package test;
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.*;
  import java.util.*;
  public class test extends httpservlet {
  public void init(servletconfig config) throws servletexception {
  super.init(config);
}
  public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  response.setcontenttype("text/html");
  outputstreamwriter osw = new outputstreamwriter(response.getoutputstream());
  printwriter out = new printwriter (response.getoutputstream());
  out.println("< html>");
  out.println("< head>< title>servlet1< /title>< /head>");
  out.println("< body>你好!");
  out.println("< /body>< /html>");
  out.close();
}
  public void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  response.setcontenttype("text/html");
  outputstreamwriter osw = new outputstreamwriter(response.getoutputstream());
  printwriter out = new printwriter (response.getoutputstream());
  out.println("< html>");
  out.println("< head>< title>servlet1< /title>< /head>");
  out.println("< body>你好!");
  out.println("< /body>< /html>");
  out.close();
}
}
  式1适合于作总控模块,此servlet作中间调度,根据不同的f值调用不同的servlet或方法。
式2适合于对html的get和post有不同要求的情况。
  但这并不是绝对的,式2就完全可以代替式1,只要在doget()方法中写上dopost就与式1完全一样。
在init方法中执行的语句,只要这个servlet被启动了就一直有效,比如,我们在init()中new了一个对象,那么这个对象的内存空间就永远存在,除非显式地把这个对象赋为null,或重启服务。
  httpservletrequest和httpservletresponse两个对象实现http请求,它们有很多有用的方法,在下面的cookie和session管理中会细加描述。
  1, cookie管理 cookie用于在客户端保存个人所特有的信息,它采取在客户机写临时文件的机制。
  package test;
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.*;
  import java.util.*;
  public class test extends httpservlet {
  public void init(servletconfig config) throws servletexception {
  super.init(config);
}
  public void service(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  //写cookie
  string cookiename ="js79"; //若是汉字则需编码
  string cookievalue = "yesky";//若是汉字则需编码
  cookie cookie = new cookie(cookiename,cookievalue);
  cookie.setmaxage(age); // age = integer.max_value 永不过期
  cookie.setpath("/");
  //读cookie
  string value = null;
  cookie[] cookies = request.getcookies();
  if (cookies != null) {
  for (int i=0; i< cookies.length; i++) {
  if (cookies[i].getname().equals(cookiename))
  value = cookies[i].getvalue();
  break;
}
}
}
  response.setcontenttype("text/html");
  outputstreamwriter osw = new outputstreamwriter(response.getoutputstream());
  printwriter out = new printwriter (response.getoutputstream());
  out.println("< html>");
  out.println("< head>< title>test< /title>< /head>");
  out.println("cookie键:"+cookiename+"< br>");
  out.println("cookie值: "+value);
  out.println("< /body>< /html>");
  out.close();
}
}
  2,session管理
  session在servlet中是很有用的,它比cookie安全可靠灵活,但是管理起来有点麻烦,用得不好会造成服务器的开销很大,浪费资源。下面是一个基于session管理一个对象的简单例子。
一个简单的bean对象testobject
  package test;
  public class testobject extends object {
  int id = 0; public string cur="";
}
  package test;
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.*;
  import java.util.*;
  public class testman extends httpservlet {
  public void init(servletconfig config) throws servletexception {
  super.init(config);
}
  public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  int f = 1;
  if(request.getparameter("f")!=null)
  f =
  integer.parseint(request.getparameter("f"));
  switch(f){
  case 1: this.getresult(request,response);
  break;
  case 2:
  this.setsession(request,response);
  break;
}
}
  public void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  doget(request,response);
}
  public void getresult(httpservletrequest request, httpservletresponse response)   throws servletexception, ioexception {
  testobject testobject = null;
  testobject = getstatus(request,response);
  string html = testobject.id; dowrite( response,html);
}
  public void setsession(httpservletrequest request, httpservletresponse response)  throws servletexception, ioexception {
  httpsession session = request.getsession();
  testobject testobject = null;
  testobject = getstatus(request,response);
  string tmp = null;
  tmp = request.getparameter("id");
  if(tmp != null) testobject.id = tmp;
  session.putvalue("testobject ",article);
  getresult(request,response);
}
  private testobject getstatus(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  httpsession session = request.getsession();
  testobject testobject = null;
  if(session!=null){
  if(session.getvalue("testobject ")!=null){
  testobject = (testobject)session.getvalue("testobject ");
}
  else{
  testobject = new testobject ();
}
}
  else{
  testobject = new testobject ();
}
  return testobject;
}
  private void dowrite(httpservletresponse response,string html) throws   servletexception, ioexception {
  printwriter out = response.getwriter();
  out.println(html);
  out.close();
}
  /////////////////////////////////////////////////////////
}
  若能轻松搞定上面的例子,相信读者对servlet已有了较为深刻的理解。
下面再介绍一个上传文件例子,其中汲及到了下载的免费javabean (如有感兴趣的朋友,可来函索要免费javabean源代码,email:js79@yesky.com)
  上传基本原理:由页面发出一个http请求,服务端得到请求后,解析多媒体协议,读出文件内容,写文件内容到服务器,所有的这些功能都封装到javabean中。
  上传文件的必需条件:browser端< form>表单的enctype属性值必须为 multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,< input>的type属性必须是file。
  package upload;
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.*;
  import java.util.*;
  public class uploadservlet extends httpservlet {
  public void init(servletconfig config) throws servletexception{
  super.init(config);
}
  public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  printwriter out = response.getwriter();
  out.println("< html>< head>< title>upload< /title>"
  +"< meta http-equiv=´content-type´ content=´text/html; charset=gb2312´>"
  +"< /head>"
  +"< body>");
  out.println("< div align=´center´ valign=´top´>"
  +"< span class=´nava´>请你选择上传的文件(请注意文件大小只能在20k之内)< /span>< br>"
  +"< form enctype=´multipart/form-data´ method=post action=´´>"
  +"< input type=´file´ name=´file´>"
  +"< input type=´submit´ value=´发送´>"
  +"< /form>"
  +"< /div>");
  out.println("< /body>< /html>");
  out.close();
}
  ////////
  public void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  printwriter out = response.getwriter();
  int tmpid = 1; try {
  multipartrequest multi = new multipartrequest(request,"/home/js79/html/", 5 * 1024 * 1024);
}
  catch(exception e){
  tmpid = -1; system.out.println(e);
}
  if(tmpid == 1){
  out.println("< html>< head>< title>upload< /title>"
  +"< meta http-equiv=´content-type´ content=´text/html; charset=gb2312´>"
  +"< /head>"
  +"< body>");
  out.println("上传成功!< /body>< /html>");
}
  else{
  out.println("< html>< head>< title>upload< /title>"
  +"< meta http-equiv=´content-type´ content=´text/html; charset=gb2312´>"
  +"< /head>"
  +"< body>");
  out.println("上传不成功!< /body>< /html>");
}
  out.close();
}
}

扫描关注微信公众号