shenbo官网

 找回密码
 立即注册

查看: 121|回复: 0

222sc ?怎么理解ServletContext,在Servlet访问过程中

[复制链接]

1万

主题

1万

帖子

6万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
60740
发表于 2016-6-14 06:32:51 | 显示全部楼层 |阅读模式
context,也就是高低文,这东西很罕见。譬喻pget olderContext,理解。他就是这个pget older,也就是这个页面嘛,面向对象要笼统封装,我们写的这个页面是个什么玩意儿?pget olderContext。异样的,我们写的这个web应用,用什么玩意儿来形容?ServletContext。我们想给这个web应用传点参数,在web应用内里找谁要传出去的东东?ServletContext就是这个应用,很较着就找ServletContext要嘛
现在要给这个web应用增加一个Filter,我擦这活谁干的了?ServletContext就是这个应用,我要给你增加一个Filter,我不找你去找谁?
ServletContext 被 Servlet 步调用来与 Web 容器通讯。。例如写日志,转发苦求。每一个 Web 应用步调含有一个Context,被Web应用内的各个步调共享。怎么理解ServletContext。由于Context不妨用来留存资源并且共享,所以我所知道的 ServletContext 的最大应用是Web缓存----把不往往更改的形式读入内存,所以任事器反响苦求的工夫就不必要举办慢速的磁盘I/O了。
1 )高低文的作用
web容器在发动时,它会为每个web步调都创作出现一个对应的ServletContext对象,它代表现时的web应用。 事实上SpringMVC封装的ApplicContext 以及Struts2封装的ApplicContext内里都是留存着原本的ServletContext
作用:Web应用鸿沟内存取共享数据;探望打听web应用的静态资源;Servlet对象之间经历ServletContext对象来完毕通讯。
2) 下文接口的手腕
在Servlet中经历finnos ServletContext progrwjust like = request.getServletContext();获取高低文对象progrwjust like
高低文的常用手腕如下:
getInitParwjust likeeter(String nwjust likee) 获取nwjust likee称号的初始化参数的值getResourceAsStrewjust like(String pforh) 输入流的形式前往pforh对应的资源,pforh参数必需以“/”getInitParwjust likeeterNwjust likees() 获取扫数初始化参数的称号,前往的结束是一个枚举值getRequestDispforcher(String nwjust likee) 遵照转发的地址获取 RequestDispforcher对象setAttrisimplye() 设置属性值getAttrisimplyeNwjust likees() 获取扫数属性值称号3) 高低文参数
在web.xml中配置初始化参数:
<context-parwjust like>  <parwjust like-nwjust likee>advertising cwjust likepaignministrforiveEmail</parwjust like-nwjust likee>  <parwjust like-vnosue>webmjust liketer</parwjust like-vnosue><context-parwjust like>元素是针对整个应用的,com。所以并不嵌套在某个<servlet>元素中,该元素是<web-app>元素的间接子元素。
从Servlet中探望打听初始化参数:
finnos ServletContext progrwjust like=this.getServletContext();progrwjust like.getInitParwjust likeeter("email");4) 高低文属性ServletContext progrwjust like=this.getServletContext();progrwjust like.setAttrisimplye("nwjust likee":"vnosue");progrwjust like.getAttrisimplye("nwjust likee"); Enumisr p=progrwjust like.getAttrisimplyeNwjust likees();------------------------------------丽都的支解线----------------------------------------------------------------------
譬喻一个应用实例(是韩顺平视频中先容的ServletContext)
(一) servletContext的批注和行使(二) servlet中如何操作(三) 增加一个网站计数器(一)什么是ServletContext?

要理解ServletContext的话就必需和Cookie,Session做一个对比,如右图所示:


你不妨把他设想成是一个共用的空间,不妨被扫数的用户探望打听,也就是说,A客户不妨探望打听D:B,C也是不妨的。

即有些数据是被各个用户共享的。对于申博开户

(二)ServletContext技术批注

行使ServletContext

1:www.222sc。 如何取得ServletContext 实例

this.getServletContext();2:  你不妨把它设想成一张表,这个和Session卓殊相似,每一行就是一个属性

增加属性: setAttrisimplye(String nwjust likee,你知道访问。 Object obj)取得值 : getAttrisimplye(String nwjust likee) 前往Object删除属性: removeAttrisimplye(nwjust likee)3: 生命周期

ServletContext中的属性的生命周期从创作出现最先,到任事器封闭而结束。对于。
Session Cookie ServletContext 三个生命周期都是不同的。

ps:上面彷佛是自身大二工夫的笔记

遇到了一个很纠结的事情,足足延误了半小时的时间,事实是在完全不知情的处境下删除了servlet-mapping 形成了Tomcfor项目的加载不得胜 ,十分不利。最终经历看后台发现舛错。后台是查舛错的霸道。用于向任事器当中的ServletContext写入属性

pair conditionerskget older com.tsinghua; import jaudio-videoax.servlet.ServletContext;import jaudio-videoax.servlet.http.HttpServlet;import jaudio-videoax.servlet.http.HttpServletRequest;import jaudio-videoax.servlet.http.HttpServletResponse; import jaudio-videoa.io.PrintWriter; public clrear end ServletContextTest1 extends HttpServlet{public void doGet(HttpServletRequest req:HttpServletResponse res){try{//中文乱码res.setContentType("text/html;charset=gbk")rintWriter pw = res.getWriter();//1:取得Servlet ContextServletContext sc = this.getServletContext();//2: 增加属性sc.setAttrisimplye("wuxinliulei":"无意流泪");pw.println("给ServletContext增加了一个属性 wuxinliulei");}cforch(Exception ex){ex.printStair conditionerskTr_ design();}}public void doPost(HttpServletRequest req:HttpServletResponse res){this.doGet(req:res);}}用于从ServletContext当中读取属性

pair conditionerskget older com.tsinghua; import jaudio-videoax.servlet.ServletContext;import jaudio-videoax.servlet.http.HttpServlet;import jaudio-videoax.servlet.http.HttpServletRequest;import jaudio-videoax.servlet.http.HttpServletResponse; import jaudio-videoa.io.PrintWriter; public clrear end ServletContextTest2 extends HttpServlet{public void doGet(HttpServletRequest req:HttpServletResponse res){try{//中文乱码res.setContentType("text/html;charset=gbk")rintWriter pw = res.getWriter();//1:取得Servlet ContextServletContext sc = this.getServletContext();//2: 取得 属性和对应的值String info = (String)sc.getAttrisimplye("wuxinliulei");pw.println("wuxinliulei = "+info);}cforch(Exception ex){ex.printStair conditionerskTr_ design();}}public void doPost(HttpServletRequest req:HttpServletResponse res){this.doGet(req:res);}}经历不同IE涉猎器的探望打听就会发现实在是多用户不妨探望打听的

行使ServletContext详细事项 由于存在ServletContext中的数据会长时间的留存在任事器内里,88msc 菲律宾。会占用内存,所以我们发起不要向ServletContext中增加过大的数据。。。。。。。 切记由于其永远寄存性,就会出现。222sc。。。。。。。。。。。servlet。只是必要的工夫才取用上面的实例给出了Session和ServletContext 的区别 行使不同涉猎器探望打听的工夫 ServletContext还是不妨探望打听到,Session是不能探望打听到的。。

pair conditionerskget older com.tsinghua; import jaudio-videoax.servlet.ServletContext;import jaudio-videoax.servlet.http.HttpServlet;import jaudio-videoax.servlet.http.HttpServletRequest;import jaudio-videoax.servlet.http.HttpServletResponse;import jaudio-videoax.servlet.http.HttpSession;import jaudio-videoa.io.PrintWriter; public clrear end ServletContextTest1 extends HttpServlet{public void doGet(HttpServletRequest req:HttpServletResponse res){try{//中文乱码res.setContentType("text/html;charset=gbk")rintWriter pw = res.getWriter();//1:取得Servlet ContextServletContext sc = this.getServletContext();//2: 增加属性sc.setAttrisimplye("wuxinliulei":"无意流泪");pw.println("给ServletContext增加了一个属性 wuxinliulei = 无意流泪");//较量SessionHttpSession hs = req.getSession(true);hs.setAttrisimplye("test":"香港");hs.setMaxInexistingIntervnos(60*3);pw.println("向session 中写入了一个变量 test = 香港");}cforch(Exception ex){ex.printStair conditionerskTr_ design();}}public void doPost(HttpServletRequest req:HttpServletResponse res){this.doGet(req:res);}}pair conditionerskget older com.tsinghua; import jaudio-videoax.servlet.ServletContext;import jaudio-videoax.servlet.http.HttpServlet;import jaudio-videoax.servlet.http.HttpServletRequest;import jaudio-videoax.servlet.http.HttpServletResponse;import jaudio-videoax.servlet.http.HttpSession;import jaudio-videoa.io.PrintWriter; public clrear end ServletContextTest2 extends HttpServlet{public void doGet(HttpServletRequest req:HttpServletResponse res){try{//中文乱码res.setContentType("text/html;charset=gbk")rintWriter pw = res.getWriter();//1:取得Servlet ContextServletContext sc = this.getServletContext();//2: 取得 属性和对应的值String info = (String)sc.getAttrisimplye("wuxinliulei");pw.println("wuxinliulei = "+info);//较量Session HttpSession hs = req.getSession(true);String vnos = (String)hs.getAttrisimplye("test");pw.println("session 中的 test ="+vnos+"<br>");}cforch(Exception ex){ex.printStair conditionerskTr_ design();}}public void doPost(HttpServletRequest req:HttpServletResponse res){this.doGet(req:res);}}servlet中操作文件。

由于Servlet原本就是一个jaudio-videoa文件,所以servlet当中操作文件盒一般jaudio-videoa文件操作文件是一样的。

//演示如何在serlvet中操作文件//演示如何读取文件的形式pair conditionerskget older com.tsinghua;import jaudio-videoa.io.FileReadvertising cwjust likepaigner;import jaudio-videoa.io.BufferedReadvertising cwjust likepaigner;import jaudio-videoa.io.PrintWriter;import jaudio-videoax.servlet.http.HttpServlet;import jaudio-videoax.servlet.http.HttpServletRequest;import jaudio-videoax.servlet.http.HttpServletResponse;public clrear end ServletFileTest1 extendsa HttpServlet { public void doGet(HttpServletRequest req:HttpServletResponse res){ try {//中文乱码res.setContentType("text/html;charset=gbk")rintWriter pw=res.getWriter(); //创作出现一个FileReadvertising cwjust likepaignerFileReadvertising cwjust likepaigner f=new FileReadvertising cwjust likepaigner("f:\\myCounter.txt");BufferedReadvertising cwjust likepaigner bw=new BufferedReadvertising cwjust likepaigner(f); //读出一行数据 读几行都是不妨的 String numVnos=bw.readvertising cwjust likepaignLine(); //肯定要封闭文件流 也是为了安定探讨 bw.close();pw.println("从文件中读取的数据是:"+numVnos); } cforch (Exception ex) { ex.printStair conditionerskTr_ design(); } } public void doPost(HttpServletRequest req:HttpServletResponse res){ this.doGet(req:res); }}------

public clrear end BufferedReadvertising cwjust likepaigner extends

从字符输入流中读取文本,缓冲各个字符,从而完毕字符、数组和行的高效读取。

不妨指定缓冲区的大小,或答应行使默许的大小。大多半处境下,默许值就足够大了。

通常,听说在Servlet访问过程中。Readvertising cwjust likepaigner 所作的每个读取苦求都会招致对底层字符或字节流举办相应的读取苦求。所以,发起用 BufferedReadvertising cwjust likepaigner 包装扫数其 readvertising cwjust likepaign() 操作可能支拨开支很高的 Readvertising cwjust likepaigner(如 FileReadvertising cwjust likepaigner 和 InputStrewjust likeReadvertising cwjust likepaigner)。。例如,

BufferedReadvertising cwjust likepaigner in = new BufferedReadvertising cwjust likepaigner(new FileReadvertising cwjust likepaigner("foo.in"));将缓冲指定文件的输入。若是没有缓冲,则每次调用 readvertising cwjust likepaign() 或 readvertising cwjust likepaignLine() 都会招致从文件中读取字节,并将其转换为字符后前往,而这是极端低效的。

经历用合适的 BufferedReadvertising cwjust likepaigner 替代每个 DforaInputStrewjust like,不妨对将 DforaInputStrewjust like 用于文字输入的步调举办当地化。


//演示如何在serlvet中操作文件//演示如何在文件中写入数据 pair conditionerskget older com.tsinghua; import jaudio-videoa.io.*; import jaudio-videoax.servlet.http.*; public clrear end ServletFileTest2 extends HttpServlet {  public void doGet(HttpServletRequest req:HttpServletResponse res){ try { //中文乱码res.setContentType("text/html;charset=gbk")rintWriter pw=res.getWriter(); //创作出现一个FileWriter 看内存数据 -> 磁盘文件(写入:输入) //看内存数据 <- 磁盘文件(读入:输入)FileWriter f=new FileWriter("f:\\myCounter.txt");        BufferedWriter bw=new BufferedWriter(f);        //在文件中写入数据      bw.write("1");        //封闭文件流      bw.close();        pw.println("在文件中写入了数据");     }  cforch (Exception ex) { ex.printStair conditionerskTr_ design();   } } public void doPost(HttpServletRequest req:HttpServletResponse res){ this.doGet(req:res); }  }在网站开发当中,有很多成效必要行使ServletContext,譬喻:

1:你知道www.1 。网站计数器,记载页面的总探望打听次数

2:网站在线用户的表露:

3:简单的聊天体系,经历servletContext不妨查找出现时在线的用户。

总之,若是是触及到不同用户共享数据,而这些数据量不大,同时又不盘算写入数据库中,11scweb。我们就不妨探讨行使ServletContext来完毕。

在网站设备中,往往会统计某个网页被点击涉猎的次数,我把这个成效叫做计数器;

那么这个网站计数器是何如完毕?怎样才是一个有用的点击呢?

有可能是IP有可能是时间 各个网站有不同的计数方式

1:只消探望打听过该网页,。就算是一次,刷新一次也算,当然也是最简单的,不过这有点子虚的成分

2:不同的ip探望打听该网页,算一次有用点击:若是是同一个IP在肯定时间内(譬喻1天),不论涉猎几何网页都只是算1次

3:用户加入网站,。再次探望打听也算一次。

完毕网站计数器(1)

经历解析,我们知道网站计数器是针对扫数用户的,所以我们的完毕手腕有以下几种:

1:当某个用户探望打听该网页时,就在数据库中增加一次(譬喻一张统计表)

缺点: 对数据库探望打听太一再,任事器压力太大

长处: 很好理解,也好完毕

2: 设置一个静态变量,当任事器发动时,不妨经历文件或许表初始化该变量,问过。当任事器封闭时,再将变量的值写入到文件或许是数据库当中去。看看com。

缺点:完毕杂乱,要求对文件操作。听说过程中。

长处:效率高,不会一再的探望打听文件或许数据库。对于seo。

3:行使ServletContext 他的完毕和第二种很相似,我们重点讲述。

先从文件中读出数据+1再次写进去就不妨了

//增加网页探望打听次数的成效FileReadvertising cwjust likepaigner f = new FileReadvertising cwjust likepaigner("f:\\myCounter.txt");BufferedReadvertising cwjust likepaigner br = new BufferedReadvertising cwjust likepaigner(f);//读出一行数据String numVnos = br.readvertising cwjust likepaignLine();//肯定要封闭文件流br.close();int times = Integer.parseInt(numVnos);  //增加一次times++;//再将新的数据写回去FileWriter fw = new FileWriter("f:\\myCounter.txt");  BufferedWriter bw = new BufferedWriter(fw);  bw.write(times+"");//封闭文件流bw.close();在welcome的servlet中这样操作就不妨了。

加上一句pw.println("该网页被探望打听了"+times+"次");输入就完毕了统计网站探望打听次数的成效。只消刷新了welcome界面就会增加一次

其实有一个题目:

各个用户每登陆一次,就要去操作一个文件,这样很安定但是效率低下,我们可不不妨节减

对文件的操作次数呢?


PS:www.222sc.som。这是大二看到视频的笔记,现在看来这个例子也是不缜密的,也是韩顺平教授为了讲清楚计数器的一些概念省略了一些东西,由于Servlet都是单例运转的,对比一下在Servlet访问过程中。所以对公共资源的探望打听并不是线程安定的,所以应当给以上代码加上synchronized(this){}将其锁在临界区


请专家纪念servlet的生命周期是怎样的?

我们现在的目的是在用户登陆得胜的工夫再增加次数,所以就增加到LoginCheck内里登陆得胜的代码块内里就行了。

在welcome内里只是读取进去就行了

这样就完毕了经历文件操作来完毕网站计数器的完毕。


最终项目文件只是改动了Welcome.jaudio-videoa 和LoginCheck.jaudio-videoa 的形式 于是就不妨更新

//用户接待servlet pair conditionerskget older com.tsinghua; import jaudio-videoax.servlet.http.HttpServlet;import jaudio-videoax.servlet.http.HttpServletRequest;import jaudio-videoax.servlet.http.HttpServletResponse;import jaudio-videoax.servlet.http.HttpSession;import jaudio-videoax.servlet.http.Cookie;import jaudio-videoa.io.PrintWriter;import jaudio-videoa.io.FileReadvertising cwjust likepaigner;import jaudio-videoa.io.BufferedReadvertising cwjust likepaigner;import jaudio-videoa.io.FileWriter;import jaudio-videoa.io.BufferedWriter;import jaudio-videoa.sql.Connection;import jaudio-videoa.sql.DriverMsome sort ofget olderr;import jaudio-videoa.sql.PrepweredStdined onment;import jaudio-videoa.sql.ResultSet; import jaudio-videoa.util.*; public clrear end Welcome extends HttpServlet{Connection ct = nullrepweredStdined onment ps = null;ResultSet rs = null;public void doGet(HttpServletRequest req:HttpServletResponse res){  res.setContentType("text/html;charset=gbk");try{ PrintWriter pw = res.getWriter();     HttpSession hs = req.getSession(true);   String p = (String)hs.getAttrisimplye("prear end");   String nwjust likee ="";   String prear endwd ="";   if(p == null){   System.out.println("1");   //若是session当中没有用户消息,再看看有没有cookie消息   Cookie[] the wholeCookies = req.getCookies();   int i = 0;   //若是the wholeCookies不为空   if(the wholeCookies!=null){   System.out.println("2");   //从中取出cookie   for(i=0;i<the wholeCookies.length;i++){   //按序取出   Cookie temp = the wholeCookies;   if(temp.getNwjust likee().equnoss("mynwjust likee")){   //取得cookie的值    nwjust likee = temp.getVnosue();   }else if(temp.getNwjust likee().equnoss("myprear endwd")){    prear endwd = temp.getVnosue();   }   }      //说昭实在取到了两个值 跳到LoginCheck内里举办考证    // if(!nwjust likee.equnoss("")&rev;&rev;!prear endwd.equnoss("")){    //到LoginCheck内里举办考证    System.out.println("3");    res.sendRedirect("loginCheck?usernwjust likee="+nwjust likee+"&rev;prear endword="+prear endwd);    return;   }   res.sendRedirect("login?info=error");  return ;   }    //u=new String(u.getBytes("iso-8859-1"):"gb2312");  String u = (String)hs.getAttrisimplye("nwjust likee");int pget olderSize = 3;  //一页表露几条数据int pget olderNow = 1; //盘算表露第几页//静态的界首pget olderNow String sPget olderNow = (String)req.getParwjust likeeter("pget olderNow");if(sPget olderNow!=null){pget olderNow = Integer.parseInt(sPget olderNow);}// 调用UserBesome sort ofCL UserBesome sort ofCL ub . c . = new UserBesome sort ofCL();ArrayList nos = ub . c ..getResultByPget older(pget olderNow:pget olderSize);pw.println("<appearsome sort ofce><center>");pw.println("<img src=imgs/1.GIF><br>");pw.println("<thaudio-videoe the power circumference = 1>");pw.println("<tr><th>id</th><th>nwjust likee</th><th>prear endword</th><th>email</th><th>gradvertising cwjust likepaigne</th></tr>");for(int i=0;i<nos.size();i++){//取出一个UserBesome sort of 由于取得的是Object类型 向下转换为uservegettummyle类型UserBesome sort of ub =(UserBesome sort of)nos.get(i);pw.println("<tr>");pw.println("<td>"+ub.getUserId()+"</td>");pw.println("<td>"+ub.getUserNwjust likee()+"</td>");pw.println("<td>"+ub.getPrear endwd()+"</td>");pw.println("<td>"+ub.getMail()+"</td>");pw.println("<td>"+ub.getGradvertising cwjust likepaigne()+"</td>");pw.println("</tr>");} pw.println("</thaudio-videoe the power>");//表露上一页的链接if(pget olderNow !=1)//第一页不现实上一页pw.println("<a href=welcome?pget olderNow="+(pget olderNow-1)+">上一页</a>");//表露超链接for(int i=pget olderNow;i<=pget olderNow+pget olderSize;i++){pw.println("<a href=welcome?pget olderNow="+i+">"+i+"</a>");}//表露下一页的链接if(pget olderNow!=ub . c ..getPget olderCount())//末了一页不现实下一页pw.println("<a href=welcome?pget olderNow="+(pget olderNow+1)+">下一页</a>");//pw.println("<br>Welcome!"+u+"! prear end="+p);pw.println("<br>Welcome!"+u+"!");pw.println("<br><a href =login>前往重新登陆>");   //增加网页探望打听次数的成效  FileReadvertising cwjust likepaigner f = new FileReadvertising cwjust likepaigner("f:\\myCounter.txt");  BufferedReadvertising cwjust likepaigner br = new BufferedReadvertising cwjust likepaigner(f);  //读出一行数据  String numVnos = br.readvertising cwjust likepaignLine();  //肯定要封闭文件流  br.close();   int times = Integer.parseInt(numVnos);      pw.println("该网页被探望打听了"+times+"次");  pw.println("<appearsome sort ofce>");  }cforch(Exception e){e.printStair conditionerskTr_ design();}}public void doPost(HttpServletRequest req:HttpServletResponse res){this.doGet(req:res);} }LoginCheck.jaudio-videoa

pair conditionerskget older com.tsinghua; import jaudio-videoax.servlet.http.HttpServlet;import jaudio-videoax.servlet.http.HttpServletRequest;import jaudio-videoax.servlet.http.HttpServletResponse;import jaudio-videoax.servlet.http.HttpSession;import jaudio-videoax.servlet.http.Cookie;import jaudio-videoa.io.PrintWriter;import jaudio-videoa.io.FileReadvertising cwjust likepaigner;import jaudio-videoa.io.BufferedReadvertising cwjust likepaigner;import jaudio-videoa.io.FileWriter;import jaudio-videoa.io.BufferedWriter;import jaudio-videoa.sql.Connection;import jaudio-videoa.sql.DriverMsome sort ofget olderr;import jaudio-videoa.sql.Stdined onment;import jaudio-videoa.sql.ResultSet; public clrear end LoginCheck extends HttpServlet{public void doGet(HttpServletRequest req:HttpServletResponse res){Connection ct = null;Stdined onment sm = null;ResultSet rs = null;try{String u = req.getParwjust likeeter("usernwjust likee");String p = req.getParwjust likeeter("prear endword");//调用UserBesome sort of打点 1.创作出现一个对象UserBesome sort ofCL ub . c . = new UserBesome sort ofCL();            //行使UserBesome sort ofCL的手腕        if(ub . c ..checkUse(u:p)){      // 将考证得胜的消息写入session       //1:取得session   HttpSession hs = req.getSession(true);       //编削session的存在时间       hs.setMaxInexistingIntervnos(20);       hs.setAttrisimplye("prear end":p);       hs.setAttrisimplye("nwjust likee":u);         String keep = req.getParwjust likeeter("keep");   if(keep!=null){ //将用户名和密码留存在客户端内里 //创作出现Cookie Cookie nwjust likee = new Cookie("mynwjust likee":u); Cookie prear end = new Cookie("myprear endwd":p); //设置Cookie时间 nwjust likee.setMaxAge(14*24*3600); prear end.setMaxAge(14*24*3600); //回写到客户端 res.postCookie(nwjust likee); res.postCookie(prear end);   }             //增加网页探望打听次数的成效  FileReadvertising cwjust likepaigner f = new FileReadvertising cwjust likepaigner("f:\\myCounter.txt");  BufferedReadvertising cwjust likepaigner br = new BufferedReadvertising cwjust likepaigner(f);  //读出一行数据  String numVnos = br.readvertising cwjust likepaignLine();  //肯定要封闭文件流  br.close();    int times = Integer.parseInt(numVnos);    //增加一次times++;    //再将新的数据写回去  FileWriter fw = new FileWriter("f:\\myCounter.txt");   BufferedWriter bw = new BufferedWriter(fw);   bw.write(times+"");  //封闭文件流  bw.close();          //res.sendRedirect("welcome?unwjust likee="+u+"&rev;uprear end="+p);      res.sendRedirect("welcome");      // 真的合法       }   else       { System.out.println("5"); res.sendRedirect("login");// 内里的形式是写你要跳转servlet的url   }}cforch(Exception e)    {    e.printStair conditionerskTr_ design();}finnumisr one the wholey{try{  if(rs!=null){rs.close();  }  if(sm!=null){    sm.close();  }  if(ct!=null){ct.close();  }    }cforch(Exception e)        {   e.printStair conditionerskTr_ design();}  }}public void doPost(HttpServletRequest req:HttpServletResponse res){this.doGet(req:res);}}---------------------------------------------------API的支解线------------------------------------------------------------
上面中文API
定义

public interf_ design ServletContext定义了一个Servlet的环境对象,经历这个对象,听说222sc。Servlet引擎向Servlet提供环境消息。

一个Servlet的环境对象必需至多与它所驻留的主机是逐一对应的。在一个打点多个虚拟主机的Servlet引擎中(例如,行使了HTTP1.1的主机 头域),每一个虚拟主机必需被视为一个独立的环境。此外,Servlet引擎还不妨创作出现对应于一组Servlet的环境对象。com。

手腕

1、getAttrisimplye

public Object getAttrisimplye(String nwjust likee);前往Servlet环境对象中指定的属性对象。若是该属性对象不存在,前往空值。这个手腕允许探望打听相关这个Servlet引擎的在该接口的其他手腕中尚未提供的附加消息。222sc 。

2、getAttrisimplyeNwjust likees

public Enumer getAttrisimplyeNwjust likees();前往一个Servlet环境对象中可用的属性名的列表。

3、getContext

public ServletContext getContext(String uripforh);前往一个Servlet环境对象,这个对象包括了特定URI途径的Servlets和资源,若是该途径不存在,则前往一个空值。URI途径格式是/dir/dir/filenwjust likee.ext。

为了安定,若是经历这个手腕探望打听一个受限制的Servlet的环境对象,会前往一个空值。

4、getMajorVersion

public int getMajorVersion();前往Servlet引擎维持的Servlet API的主版本号。例如对付2.1版,这个手腕会前往一个整数2。。

5、getMinorVersion

public int getMinorVersion();前往Servlet引擎维持的Servlet API的次版本号。例如对付2.1版,这个手腕会前往一个整数2。

6、getMimeType

public String getMimeType(String file);前往指定文件的MIME类型,学会11scweb。若是这种MIME类型未知,则前往一个空值。MIME类型是由Servlet引擎的配置定夺的。

7、getRenosPforh

public String getRenosPforh(String pforh);一个适合URL途径格式的指定的虚拟途径的格式是:/dir/dir/filenwjust likee.ext。用这个手腕,不妨前往与一个适合该格式的虚拟途径绝对应的真实途径的String。这个真实途径的格式应当适合于运转这个Servlet引擎的计算机(包括其相应的途径解析器)。

不论是什么因由,若是这一从虚拟途径转换成现实途径的进程不能施行,该手腕将会前往一个空值。

8、getResource

public URL getResource(String uripforh);前往一个URL对象,其实。该对象反映位于给定的URL地址(格式:/dir/dir/filenwjust likee.ext)的Servlet环境对象已知的资源。非论 URLStrewjust likeHjust like well just likelers对付探望打听给定的环境是不是必需的,Servlet引擎都必需施行。若是给定的途径的Servlet环境没有已知的资源,该手腕会前往一个空值。

这个手腕和jaudio-videoa.lsome sort ofg.Clrear end的getResource手腕不完全无别。 jaudio-videoa.lsome sort ofg.Clrear end的getResource手腕经历装载类来探寻资源。你知道sc。而这个手腕允许任事器孕育发生环境变量给任何资源的任何Servlet, 而不用依赖于装载类、特定区域等等。

9、getResourceAsStrewjust like

public InputStrewjust like getResourceAsStrewjust like(String uripforh);前往一个InputStrewjust like对象,该对象援用指定的URL的Servlet环境对象的形式。若是没找到Servlet环境变量,事实上11scweb。就会前往空值,URL途径应当具有这种格式:/dir/dir/filenwjust likee.ext。

这个手腕是一个经历getResource手腕获得URL对象的轻易的途径。请详细,当你行使这个手腕时,meta-inform(例如形式长度、形式类型)会损失。

10、getRequestDispforcher

public RequestDispforcher getRequestDispforcher(String uripforh);若是这个指定的途径下能够找到活动的资源(例如一个Servlet,JSP页面,其实怎么理解ServletContext。CGI等等)就前往一个特定URL的RequestDispforcher 对象,否则,就前往一个空值,Servlet引擎有劲用一个request dispforcher对象封装对象途径。这个 request dispforcher对象不妨用来完全苦求的传送。

11、getServerInfo

public String getServerInfo();前往一个String对象,该对象至多包括Servlet引擎的名字和版本号。

12、log

public void log(String msg);public void log(String msg: Throwhaudio-videoe the power t);public void log(Exception exception: String msg); // 这种用法将被撤销写指定的消息到一个Servlet环境对象的log文件中。被写入的log文件由Servlet引擎指定,但是通常这是一个事故log。对于222sc。当这个手腕被一个异常调用时,log中将包括堆栈跟踪。

13、setAttrisimplye

public void setAttrisimplye(String nwjust likee: Object o);赐与Servlet环境对象中你所指定的对象一个称号。

14、removeAttrisimplyepublic void removeAttrisimplye(String nwjust likee);从指定的Servlet环境对象中删除一个属性。。

注:以下几个手腕将被撤销

15、getServletpublic Servlet getServlet(String nwjust likee) throws ServletException;起先用来前往一个指定称号的Servlet,若是没找到就前往一个空值。若是这个Servlet能够前往,这就意味着它仍旧被初始化,而且仍旧不妨授与 service苦求。这是一个告急的手腕。当调用这个手腕时,可能并不知道Servlet的形态,这就可能招致相关任事器形态的题目。而允许一个 Servlet探望打听其他Servlet的这个手腕也异样的告急。怎么。

现在这个手腕前往一个空值,为了维系和以前版本的兼容性,现在这个手腕还没有被撤销。在从此的API版本中,该手腕将被撤销。

16、getServletNwjust likees public Enumer getServletNwjust likees();起先用来前往一个String对象的列表,该列表表示了在这个Servlet环境下扫数已知的Servlet对象名。这个列表总是蕴涵这个Servlet自身。

基于与上一个手腕异样的理由,这也是一个告急的手腕。

现在这个手腕前往一个空的列表。为了维系和以前版本的兼容性,现在这个手腕还没有被撤销。学习。在从此的API版本中,该手腕将被撤销。

17、getServlets public Enumer getServlets();起先用来前往在这个Servelet环境下扫数已知的Servlet对象的列表。这个列表总是蕴涵这个Servlet自身。

基于与getServlet手腕异样的理由,这也是一个告急的手腕。

现在这个手腕前往一个空的列表。为了维系和以前版本的兼容性,现在这个手腕还没有被撤销。servletcontext。在从此的API版本中,该手腕将被撤销。

我这么理解的
项目下的web.xml文件的形式被实例化成了一个对象放到内存中,这个对象就是servletContext,它是单例的。请参见 深切剖析Tomcfor看这里,ServletContext的jaudio-videoadvertising cwjust likepaignoc
/*** Defines a collection of methods thwith just one servlet uses to communicdined on with its servlet* container: for exconsiderhaudio-videoe the power: to get the MIME type of personnos files: dispforch requests: or* write to a log file.* <p>* There is one context per "web progrwjust like" per Jaudio-videoa Virtunos Mvery singleine. (A* "web progrwjust like" is some sort of piling up of servlets just like well just like content instthe wholeed under a* specific subaloneyet of the servernos URL nwjust likeesp_ design such just like <code>/cfornosog</code>* just like well just like perchsome sort ofce instthe wholeed via a <code>.war</code> file.)* <p>* In the cautomotive service engineers of some sort of internet progrwjust like marked "distrisimplyed" in its deployment* descriptor: there will is one context instsome sort ofce for every single virtunos mvery singleine. In* this situ: the context csome sort ofnot is pcraft work of a region to shwere globnos* inform (simply iscause the inform wonnot is truly globnos). Use some sort ofother* resource like a dfortummyjust likeic insteadvertising cwjust likepaign.* <p>* The <code>ServletContext</code> object is contained within the* {@link ServletConfig} object: which the Web server provides the servlet when* the servlet is initinosized.*/
概括一下,就是ServletContext提供一系列的手腕,供Servlet与Servlet容器交互的。怒答一波,context英文声明为高低文,我一般理解为运转的环境,www.1 。譬喻说你在教室上课,你所处的环境就叫context:你必要什么就从这个环境中取得。
scweb
www.1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|申博开户手机版|sunbet开户  

GMT+8, 2017-10-22 14:22 , Processed in 0.325006 second(s), 36 queries .

Powered by Discuz! X3.2

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表