serlvet

来源:互联网 发布:澳洲机场退税软件 编辑:程序博客网 时间:2024/05/21 05:55

写完web的作用域,说说serlvet,转一篇文章,总结的不错

Java Servlet基本概念

        Java Servlet是一个专门用于编写网络服务器应用程序的Java组件。所有基于Java的服务器端编程都是构建在Servlet之上的。在J2EEServlet已经是一个标准的组件。

在J2EE中所属包:javax.servlet

1)Servlet 是顶层接口。
2)GenericServlet 是继承Servlet与协议无关的类。
3)HttpServlet 是继承GenericServlet并实现HTTP协议相关的类。

servlet引擎

        Servlet引擎一般是第三方的插件,它通过一定的方法连接到Web服务器,Servlet引擎把它识别为Servlet请求的那些HTTP请求截获下来处理,而其他的HTTP请求由Web服务器按照通常的方式来处理,Servlet引擎会装载合适的Servlet到内存中,如果Servlet还没有运行的话,会分配一个可以使用的线程来处理请求,再把Servlet的输出返回到发出请求的Web客户机。

        Servlet运行于Servlet引擎管理的Java虚拟机中,被来自客户机的请求所唤醒,与CGI不同的是,在虚拟机中只要装载一个Servlet就能够处理新的请求,每个新请求使用内存中那个Servlet的相同副本,所以效率比CGI来得高。

Servlet的生命周期

       在每个Servlet实例的生命中有三种类型的事件,这三种事件分别对应于由Servlet引擎所唤醒的三个方法:
1)init()初始化。
2)service()处理请求。
3)destroy()当Servlet即将被卸载时由Servlet引擎来调用,这个方法用来清除并释放在init方法中所分配的资源。

注意对于servlet具体的实现,如HttpServlet其service服务将根据请求的方式调用doPost()或doGet()方法。(此外:doHeader 、doPutdoDelete 等也是)

在使用这些方法时必须带两个参数。第一个包含来自客户端的数据HttpServletRequest。第二个参数包含客户端的相应HttpServletResponse。

[java] view plaincopy
  1. public class MsgServlet extends HttpServlet {  
  2.     /** 
  3.      * 请求是get方式 
  4.      */  
  5.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{  
  6.         //设置相应的类型为text/html  
  7.         response.setContentType("text/html");   
  8.         //对于get方式 获取请求文本参数的方法 getParameter(对应的键)  
  9.         String parameValue=request.getParameter("parameKey");  
  10.         //对客户端请求的数据进行操作  
  11.         System.out.println(parameValue);  
  12.           
  13.         //从HttpServletResponse得到输出流  
  14.         PrintWriter out = response.getWriter();   
  15.         //向客户端打印HTML文本  
  16.         out.write("<div>html格式响应文本</div>");   
  17.           
  18.         //输出并关闭流  
  19.         out.flush();  
  20.         out.close();  
  21.     }  
  22.     /** 
  23.      * 请求是post方式 
  24.      */  
  25.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{  
  26.         //post的操作基本与get方式一致 但post不仅能传递文本 还能传递二进制流  
  27.         InputStream io=request.getInputStream();  
  28.         BufferedReader br=new BufferedReader(new InputStreamReader(io));  
  29.         String line,reslult="";  
  30.         while((line=br.readLine())!=null)  
  31.             reslult+=line+"\n";  
  32.         System.out.println(reslult);  
  33.         io.close();  
  34.         //其他操作……  
  35.     }  
  36. }  


Servlet配置

在web.xml中配置servlet以便客户端进行访问:

[html] view plaincopy
  1. <servlet>  
  2.  <!-- servlet名称 -->  
  3.  <servlet-name>msgServlet</servlet-name>  
  4.  <!-- servlet对应的类 -->  
  5.  <servlet-class>com.linxcool.servlet.MsgServlet</servlet-class>  
  6. </servlet>  
  7. <servlet-mapping>  
  8.  <!-- servlet名称 -->  
  9.  <servlet-name>msgServlet</servlet-name>  
  10.  <!-- 访问的URL地址 -->  
  11.  <url-pattern>showMsg</url-pattern>  
  12. </servlet-mapping>  


Servlet会话控制

        Session的发明是为了填补HTTP协议的局限。请注意HTTP协议的工作方式:
用户发出请求,服务器作出响应,这种用户端和服务器端的联系就是离散的,非连续的。HTTP协议不能提供允许服务器跟踪用户请求的功能。
在服务器端完成响应用户的请求之后,服务器不能继续与该浏览器继续保持连接。
从服务器这端来看,每一个请求都是独立的,因此HTTP协议被认为是无状态协议,当用户在多个主页间切换时,服务器无法知道他的身份。

        Session的出现就是为了弥补这个局限。利用Session,您就可以当一个用户在多个主页间切换的时候也能保存他的信息。这样很多以前根本无法去做的事情就变得简单多了。在访问者从到达某个特定的主页到离开为止的那段时间,每个访问者都会单独获得一个Session。
  Java Servlet定义了一个HttpSession接口,实现的Session的功能,在Servlet中使用Session的过程如下:

1)使用HttpServletRequest的getSession方法得到当前存在的session,如果当前没有定义session,则创建一个新的session,还可以使用方法getSession(true)
2)写session变量。可以使用方法HttpSession.setAttribute(name,value)来向Session中存储一个信息。也可以使用HttpSession.putValue(name,value),但这个方法已经过时了。
3)读Session变量。可以使用方法HttpSession.getAttribute(name)来读取Session中的一个变量值,如果name是一个没有定义的变量,那么返回的是null。需要注意的是,从getAttribute读出的变量类型是Object,必须使用强制类型转换,比如:String uid = (String) session.getAttribute("uid");也可以使用HttpSession.getValue(name),但是这个方法也已经过时了。
4)关闭session,当时用完session后,可以使用session.invalidate()方法关闭session。但是这并不是严格要求的。因为,Servlet引擎在一段时间之后,自动关闭seesion。

[java] view plaincopy
  1. //参数true是指在没有session时 创建一个新的session  
  2. HttpSession session = request.getSession(true);  
  3. //得到session对象创建的时间  
  4. Date created = new Date(session.getCreationTime());   
  5. //得到该session的id,并打印  
  6. out.println("ID " + session.getId()+"<br>");   
  7. //打印session创建时间  
  8. out.println("Created: " + created+"<br>");  
  9. //在session中添加变量UID=12345678  
  10. session.setAttribute("UID","12345678");   
  11. //在session中添加变量Name=Tom  
  12. session.setAttribute("Name","Tom");    

Servlet页面请求

1)直接定位,效率较低,首先返回请求页面,然后请求新的页面
response.sendRedirect("URL地址");

2)请求分发方式,效率较高,直接在服务端寻找并返回新页面
RequestDispatcher dispatcher=request.getRequestDisPatcher("URL地址");
控制权不转移:
dispatcher.include(request,response);
控制权转移:
dispatcher.forward(request,response);

乱码问题

post方式提交,设置默认是UTF-8编码
所以只要在doPost方法内添加如下代码即可解决乱码问题:
request.setCharacterEncoding("UTF-8");


get方式提交,设置默认是UTF-8编码
所以只要在doGet方法内添加如下代码即可解决乱码问题:
new String(<处理的字符>.getBytes("ISO-8859-1"),"UTF-8");

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 英雄联盟连接不上聊天服务器怎么办 用黄金换玫瑰金后悔了怎么办 劳力士日志系列玫瑰金和黄金怎么办 香菇代进地注水后长满绿毛怎么办 群主给你带了不满意的头衘怎么办 普兰德雪地靴洗变色了怎么办 书被水泡了皱了黏了怎么办 书被水泡了皱了没干怎么办 眼皮干燥起皮起皱怎么办能治好吗 手指头起小水泡指甲不平整怎么办 这几天我的内裤上带点血丝怎么办 一个月宝宝私处捂白了怎么办 工资算了字签了老板没把钱怎么办 百合种球叶子都变黄了怎么办 新买的富贵竹叶子发黄怎么办水养 朋友总是以隐私为借口欺骗我怎么办 三星手机版本低下载不了微信怎么办 选了动漫制作技术但不会画画怎么办 做主播高薪可是心累不愿做了怎么办 pr导出的avi无压缩太大怎么办 捡了个小米max被绑定了怎么办 二十岁时头发开始掉了怎么办 在酒店换衣服忘记关窗帘了怎么办 淘宝店铺装修更改图片要收费怎么办 惠阳市教育考试考证号忘记怎么办 高考完被被骗去读自考以后怎么办 孩子学习遇到瓶颈期了老师该怎么办 微信家长群有不好的言论出现怎么办 铃木汽车后备箱电动锁没有电怎么办 坐飞机没有连号座位带孩子怎么办 白沙的衣服洗衣服时染上颜色怎么办 网购商家少发了货怎么办 我想成为安利的员工怎么办会员 安利皇后锅锅盖吸在桌子上怎么办 淘宝客服退款返佣金诈骗后怎么办 第一试用网的钱提现出现问题怎么办 一个手机号注册两个京东账号怎么办 白色衣服被洗衣粉泡白了怎么办 白色衣服染成一块块荧光色了怎么办 中脉远红镇痛护腰不会发热了怎么办 用完悦诗风吟脸变黑不均匀怎么办