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

  1Servlet可以被认为是服务端的applet,它被WEB服务器加载和执行,前端可以显示页面和获得页面数据,后台可以操纵数据库,能完成JavaBean的很多功能。在这里我较为详细的说说Servlet在Cookie,Session和上传文件上的应用,在说明时我给出一些能编绎运行的小例子,最后给出一个文件上传例子以加深印象。 
  2  我们先来看看SERVLET程序的基本构架: 
  3式1:
  4  package test;
  5  import javax.servlet.*
  6  import javax.servlet.http.*
  7  import java.io.*
  8  import java.util.*
  9  public class test extends HttpServlet 
 10  public void init(ServletConfig config) throws ServletException 
 11  super.init(config);
 12}
 
 13  public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 14  int f =1switch(f)
 15  case 1:firstMothed(request,respponse);break
 16}
 
 17}

 18  public void firstMothed(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 19  response.setContentType("text/html");
 20  OutputStreamWriter osw = new 
 21  OutputStreamWriter(response.getOutputStream()); 
 22  PrintWriter out = new PrintWriter (response.getOutputStream());
 23  out.println("< html>"); 
 24  out.println("< head>< title>Servlet1< /title>< /head>");
 25  out.println("< body>你好!"); 
 26  out.println("< /body>< /html>"); 
 27  out.close(); 
 28}
 
 29}
 
 30式2:
 31  package test; 
 32  import javax.servlet.*
 33  import javax.servlet.http.*;
 34  import java.io.*
 35  import java.util.*
 36  public class test extends HttpServlet 
 37  public void init(ServletConfig config) throws ServletException {
 38  super.init(config);
 39}

 40  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 41  response.setContentType("text/html");
 42  OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream());
 43  PrintWriter out = new PrintWriter (response.getOutputStream());
 44  out.println("< html>"); 
 45  out.println("< head>< title>Servlet1< /title>< /head>"); 
 46  out.println("< body>你好!");
 47  out.println("< /body>< /html>");
 48  out.close();
 49}

 50  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 51  response.setContentType("text/html");
 52  OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream()); 
 53  PrintWriter out = new PrintWriter (response.getOutputStream()); 
 54  out.println("< html>");
 55  out.println("< head>< title>Servlet1< /title>< /head>"); 
 56  out.println("< body>你好!"); 
 57  out.println("< /body>< /html>"); 
 58  out.close(); 
 59}
 
 60}
 
 61  式1适合于作总控模块,此SERVLET作中间调度,根据不同的f值调用不同的SERVLET或方法。 
 62式2适合于对html的get和post有不同要求的情况。
 63  但这并不是绝对的,式2就完全可以代替式1,只要在doGet()方法中写上doPost就与式1完全一样。
 64在init方法中执行的语句,只要这个servlet被启动了就一直有效,比如,我们在init()中new了一个对象,那么这个对象的内存空间就永远存在,除非显式地把这个对象赋为null,或重启服务。
 65  HttpServletRequest和HttpServletResponse两个对象实现http请求,它们有很多有用的方法,在下面的cookie和session管理中会细加描述。
 66  1, cookie管理 cookie用于在客户端保存个人所特有的信息,它采取在客户机写临时文件的机制。 
 67  package test; 
 68  import javax.servlet.*
 69  import javax.servlet.http.*
 70  import java.io.*
 71  import java.util.*
 72  public class test extends HttpServlet {
 73  public void init(ServletConfig config) throws ServletException {
 74  super.init(config);
 75}

 76  public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 77  //写cookie 
 78  String CookieName ="js79"//若是汉字则需编码 
 79  String CookieValue = "yesky";//若是汉字则需编码 
 80  Cookie cookie = new Cookie(CookieName,CookieValue); 
 81  cookie.setMaxAge(age); // age = Integer.MAX_VALUE 永不过期
 82  cookie.setPath("/");
 83  //读cookie 
 84  String value = null;
 85  Cookie[] cookies = request.getCookies();
 86  if (cookies != null{
 87  for (int i=0; i< cookies.length; i++
 88  if (cookies[i].getName().equals(CookieName))
 89  value = cookies[i].getValue(); 
 90  break
 91}
 
 92}

 93}

 94  response.setContentType("text/html"); 
 95  OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream());
 96  PrintWriter out = new PrintWriter (response.getOutputStream());
 97  out.println("< html>");
 98  out.println("< head>< title>test< /title>< /head>"); 
 99  out.println("cookie键:"+CookieName+"< br>"); 
100  out.println("cookie值: "+value); 
101  out.println("< /body>< /html>");
102  out.close();
103}

104}
105  2,session管理 
106  Session在Servlet中是很有用的,它比cookie安全可靠灵活,但是管理起来有点麻烦,用得不好会造成服务器的开销很大,浪费资源。下面是一个基于Session管理一个对象的简单例子。 
107一个简单的bean对象TestObject
108  package test; 
109  public class TestObject extends Object {
110  int id = 0public String cur="";
111}
 
112  package test;
113  import javax.servlet.*
114  import javax.servlet.http.*
115  import java.io.*
116  import java.util.*;
117  public class TestMan extends HttpServlet 
118  public void init(ServletConfig config) throws ServletException {
119  super.init(config);
120}

121  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
122  int f = 1;
123  if(request.getParameter("f")!=null)
124  f = 
125  Integer.parseInt(request.getParameter("f")); 
126  switch(f)
127  case 1this.getResult(request,response); 
128  break;
129  case 2:
130  this.setSession(request,response);
131  break
132}
 
133}
 
134  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
135  doGet(request,response);
136}

137  public void getResult(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {
138  TestObject testObject = null;
139  testObject = getStatus(request,response);
140  String html = testObject.id; doWrite( response,html); 
141}

142  public void setSession(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
143  HttpSession session = request.getSession(); 
144  TestObject testObject = null
145  testObject = getStatus(request,response); 
146  String tmp = null
147  tmp = request.getParameter("id");
148  if(tmp != null) testObject.id = tmp; 
149  session.putValue("testObject ",article); 
150  getResult(request,response);
151}
 
152  private TestObject getStatus(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
153  HttpSession session = request.getSession(); 
154  TestObject testObject = null
155  if(session!=null){
156  if(session.getValue("testObject ")!=null){
157  testObject = (TestObject)session.getValue("testObject ");
158}
 
159  else{
160  testObject = new TestObject ();
161}

162}

163  else
164  testObject = new TestObject (); 
165}

166  return testObject; 
167}

168  private void doWrite(HttpServletResponse response,String html) throws   ServletException, IOException 
169  PrintWriter out = response.getWriter();
170  out.println(html); 
171  out.close();
172}

173  
174}
 
175  若能轻松搞定上面的例子,相信读者对SERVLET已有了较为深刻的理解。 
176下面再介绍一个上传文件例子,其中汲及到了下载的免费JavaBean (如有感兴趣的朋友,可来函索要免费JavaBean源代码,Email:js79@yesky.com) 
177  上传基本原理:由页面发出一个http请求,服务端得到请求后,解析多媒体协议,读出文件内容,写文件内容到服务器,所有的这些功能都封装到JavaBean中。
178  上传文件的必需条件:Browser端< form>表单的ENCTYPE属性值必须为 multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,< input>的type属性必须是file。 
179  package upload;
180  import javax.servlet.*
181  import javax.servlet.http.*
182  import java.io.*
183  import java.util.*
184  public class UpLoadServlet extends HttpServlet {
185  public void init(ServletConfig config) throws ServletException
186  super.init(config);
187}
 
188  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
189  PrintWriter out = response.getWriter();
190  out.println("< HTML>< HEAD>< TITLE>UpLoad< /TITLE>"
191  +"< meta http-equiv=´Content-Type´ content=´text/html; charset=gb2312´>" 
192  +"< /HEAD>" 
193  +"< body>"); 
194  out.println("< div align=´center´ valign=´top´>"
195  +"< span class=´nava´>请你选择上传的文件(请注意文件大小只能在20K之内)< /span>< BR>" 
196  +"< form ENCTYPE=´multipart/form-data´ method=post action=´´>" 
197  +"< input type=´file´ name=´file´>" 
198  +"< input type=´submit´ value=´发送´>" 
199  +"< /form>"
200  +"< /div>"); 
201  out.println("< /body>< /html>");
202  out.close(); 
203}
 
204  
205  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
206  PrintWriter out = response.getWriter(); 
207  int tmpID = 1try {
208  MultipartRequest multi = new MultipartRequest(request,"/home/js79/html/"5 * 1024 * 1024);
209}

210  catch(Exception e){
211  tmpID = -1; System.out.println(e);
212}
 
213  if(tmpID == 1){
214  out.println("< HTML>< HEAD>< TITLE>UpLoad< /TITLE>" 
215  +"< meta http-equiv=´Content-Type´ content=´text/html; charset=gb2312´>"
216  +"< /HEAD>"
217  +"< body>"); 
218  out.println("上传成功!< /body>< /html>"); 
219}
 
220  else{
221  out.println("< HTML>< HEAD>< TITLE>UpLoad< /TITLE>"
222  +"< meta http-equiv=´Content-Type´ content=´text/html; charset=gb2312´>" 
223  +"< /HEAD>"
224  +"< body>");
225  out.println("上传不成功!< /body>< /html>");
226}
 
227  out.close();
228}

229}
   

转载于:https://www.cnblogs.com/wubiyu/archive/2008/06/25/1229617.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】DICOM医学图像处理:DIMSE消息发送与接收“大同小异”之DCMTK fo-dicom mDCM

转自&#xff1a;https://my.oschina.net/zssure/blog/354816 背景&#xff1a; 从DICOM网络传输一文开始&#xff0c;相继介绍了C-ECHO、C-FIND、C-STORE、C-MOVE等DIMSE-C服务的简单实现&#xff0c;博文中的代码给出的实例都是基于fo-dicom库来实现的&#xff0c;原因只有一…

公司间交易学习笔记---概述

本系列笔记是我在学习公司间交易的过程中的随笔&#xff0c;有些是我自己的想法&#xff0c;内容可能跟教程有所出入&#xff0c;由于对AX的应用部分理解得很浅&#xff0c;所以如果错误还请多多指教。 为了处理集团公司中各个分公司之间的交易&#xff0c;AX采用了InterCompan…

用VS2005开发WinCE程序调试图文教程

一、WinCE 模拟器通过ActiveSync 6.1(即Windows Mobile设备中心)连接PC ActiveSync 6.1&#xff1a;http://www.cr173.com/soft/26994.html 1.启动WinCE模拟器 命令行&#xff1a; start .\DeviceEmulator.exe WINCE镜像\Wince5.bin /memsize 256 /video 480x272x16 /sharedf…

【转】 ADO.NET最佳实践

本文转自&#xff1a;http://blog.csdn.net/spidertan/archive/2003/12/13/17110.aspx 概述&#xff1a; 本文在微软站点资源的基础上加工整理而成&#xff0c;意在介绍在你的ADO.NET应用程序中执行和完成性能优化、稳定性和功能性方面提供最佳的解决方案&#xff1b;同…

php 变量文件间传递,同一文件的两个JS函数之间如何传变量?

满意答案ed_ch2013.11.06采纳率&#xff1a;44% 等级&#xff1a;12已帮助&#xff1a;8801人定义成全局变量就可以了var style_key;function change_mystyle(my){style_keymy.options[my.selectedIndex].value;if(style_key 114la){document.getElementById(shoostyleicon…

获取 Web 设计的免费资源

Web 开发人员可以找到很多免费资源&#xff0c;尽管其中一些资源会比另外一些资源更加自由。如果您正在设计网站或 Web 应用程序&#xff0c;那么不管是静态的还是所有可以想到的动态 Ajax 内容&#xff0c;都能找到减轻您的劳动强度并为网站增色的资源。本文从免费图标到 Web …

设计模式C++实现(1)——工厂模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性&#xff1a;封装、继承、多态&#xff0c;真正领悟设计模式的精髓是可能一个漫长的过程&#xff0c;需要大量实践经验的积累。最近看设计模式的书&#xff0…

java对象间的转型,详细讲述Java中的对象转型

向上转型&#xff1a;子类对象转为父类&#xff0c;父类可以是接口。公式&#xff1a;Father f new Son();Father是父类或接口&#xff0c;son是子类。向下转型&#xff1a;父类对象转为子类。公式&#xff1a;Son s (Son)f;我们将形参设为父类Animal类型&#xff0c;当执行t…

C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)

今天开始这个系列之前&#xff0c;心里有些恐慌&#xff0c;毕竟园子里的高手关于设计模式的经典文章很多很多&#xff0c;特别是大侠李会军、吕震宇 老师的文章更是堪称经典。他们的文笔如行云流水&#xff0c;例子活泼生动&#xff0c;讲解深入浅出。好在他们都是用C#描述&am…

【转】Windows消息传递机制详解

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka Windows是一个消息&#xff08;Message&#xff09;驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发&#xff0c;并且靠对消…

设计模式C++实现(2)——单例模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性&#xff1a;封装、继承、多态&#xff0c;真正领悟设计模式的精髓是可能一个漫长的过程&#xff0c;需要大量实践经验的积累。最近看设计模式的书&#xff0…

设计模式C++实现(3)——建造者模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性&#xff1a;封装、继承、多态&#xff0c;真正领悟设计模式的精髓是可能一个漫长的过程&#xff0c;需要大量实践经验的积累。最近看设计模式的书&#xff0…

宽字符串忽略大小写比较的实现(原)

宽字符串忽略大小写比较的实现(原) 孙文涛 2008-07-24 在Mac机器平台上没有wcsicmp 或 wcscasecmp之类的函数实现对宽字符忽略大小写的比较&#xff0c;所以实现了好几种方法。 一个自然的思路是: (1) wcscpy 原字符串到tmp字符串; (2) tolower tmp字符串; (3) 然后调用仅存的w…

有关JAVA考试中数据库的题,javaee期末考试题库,用javaEE编写一个题库系统,要怎么做...

javaEE数据库简单问题。你插入2113数据库的时候是把5261它封装为一4102个对象插入的吗&#xff1f;1653如果封装为一个User对象版的权话(User对象有ID和LEVEL两个属性)ResultSet rs ps.executeQuery();User user new User();if(rs.hasNext()){user rs.next();}关于javaee 中j…

oracle 12c sql图形化,Oracle 12c PL/SQL程序设计终极指南

Oracle 12c PL/SQL程序设计终极指南作者&#xff1a;孙风栋;王澜;郭晓惠出版日期&#xff1a;2015年06月文件大小&#xff1a;11.73M支持设备&#xff1a;&#xffe5;60.00在线试读适用客户端&#xff1a;言商书局iPad/iPhone客户端&#xff1a;下载 Android客户端&#xff1a…

oracle 存储同步,Oracle数据库知识——存储过程篇

在线QQ客服&#xff1a;1922638专业的SQL Server、MySQL数据库同步软件存储过程是一组用于完成特定功能的SQL语句&#xff0c;该语句已编译并存储在数据库中。用户通过指定存储过程的名称并提供参数(如果存储过程具有参数)来执行它。存储过程是数据库中的重要对象。任何设计良好…

使用MvcContrib的FormHelper

MvcContrib的FormHelper提供了三大Helper Html辅助 验证HelperGrid表格Helper下载 下载后将MvcContrib.dll与MvcContrib.Samples.FormHelper.dll引用到Asp.net MVC工程 在Web.Config pages.namespaces加入以下节点 <add namespace"MvcContrib.UI.Tags"/><ad…

WinCE控制面板添加应用程序

WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的&#xff0c;里面就是包含了一些应用程序。WinCE系统的控制面板由Ctlpnl.exe&#xff0c;Control.exe和一些.cpl文件组成&#xff0c;其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夹显示和架构&#xff0c;而…

oracle 游标 904,如何解决Oracle数据库游标连接超出问题

如何解决Oracle数据库游标连接超出问题发布时间&#xff1a;2020-07-21 10:57:35来源&#xff1a;亿速云阅读&#xff1a;103作者&#xff1a;小猪这篇文章主要讲解了如何解决Oracle数据库游标连接超出问题&#xff0c;内容清晰明了&#xff0c;对此有兴趣的小伙伴可以学习一下…

用多媒体库 Bass.dll 播放 mp3 [15] - 设置与获取播放速度

本例效果图:代码文件:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ComCtrls;typeTForm1 class(TForm)OpenDialog1: TOpenDialog;Button1: TButton;Button2: TButton;Button3: TButton;TrackBar1:…