- 浏览: 289389 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chenchangqun:
这段示例代码没有客户端 没法实验
Java NIO原理和使用 -
congjl2002:
误,整理好了在发phk070832 写道垃圾代码,一大推的编译 ...
snmp trap的接收(jdmk方式) -
phk070832:
垃圾代码,一大推的编译错误,整理好了在发表吧。
snmp trap的接收(jdmk方式) -
zhangcctao:
我也遇到线程池的内存溢出问题。。不知道是不是这个原因呀?
多线程中使用静态方法 -
新入职:
分享了,这个eclise版本有没有讲究?我的3.3的可以么
windows下安装android及eclipse配置
很久没用过serverlet了,看了一篇稍微详细的例子就转了过来!
Java Servlet 在网络上的编程应用,如利用Servlet 上传和下载文件、Servlet 的数据库编程、在Servlet 中发送和接受邮件以及Java Servlet 在RMI和XML等方面的应用,由于篇幅有限,在这里就不在多介绍了,下面再举一个Servlet 上传的例子。
在Web 应用程序中,用户向服务器上传文件是非常普遍的操作。使用Servlet 实现文件的上传是比较简单的。
编程思路:下面的UploadServlet.java ,其主要功能为从InputStream 中读取文件内容,将上传文件保存在根目录下,且文件名与上传文件的文件名一致。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class UploadServlet extends HttpServlet { //default maximum allowable file size is 1000k static final int MAX_SIZE = 1024000; //instance variables to store root and success message String rootPath, successMessage; /** * init method is called when servlet is initialized. */ public void init(ServletConfig config) throws ServletException { super.init(config); //get path in which to save file rootPath = config.getInitParameter("RootPath"); if (rootPath == null) { rootPath = "/"; } /*Get message to show when upload is complete. Used only if a success redirect page is not supplied.*/ successMessage = config.getInitParameter("SuccessMessage"); if (successMessage == null) { successMessage = "File upload complete!"; } } /** * doPost reads the uploaded data from the request and writes * it to a file. */ public void doPost(HttpServletRequest request, HttpServletResponse response) { ServletOutputStream out=null; DataInputStream in=null; FileOutputStream fileOut=null; try { /*set content type of response and get handle to output stream in case we are unable to redirect client*/ response.setContentType("text/plain"); out = response.getOutputStream(); //get content type of client request String contentType = request.getContentType(); out.println("\ncontentType= " + contentType); //make sure content type is multipart/form-data if(contentType != null && contentType.indexOf( "multipart/form-data") != -1) { //open input stream from client to capture upload file in = new DataInputStream(request.getInputStream()); //get length of content data int formDataLength = request.getContentLength(); out.println("\nContentLength= " + formDataLength); //allocate a byte array to store content data byte dataBytes[] = new byte[formDataLength]; //read file into byte array int bytesRead = 0; int totalBytesRead = 0; int sizeCheck = 0; while (totalBytesRead < formDataLength) { //check for maximum file size violation sizeCheck = totalBytesRead + in.available(); if (sizeCheck > MAX_SIZE) { out.println("Sorry, file is too large to upload."); return; }
编程技巧说明:
首先定义上传文件最大字节为1024K(1M),上传文件保存在根目录(/)下,从请求的InputStream 读取实体数据,根据请求头Content-Type 和contenLength 等值,从实体数据中解析出表单Form 数据中的filename 和Content-Type 等值,然后将实体数据中真正属于上传文件的内容保存到服务器上的根目录文件中。
其中用到涉及中文输出:
String fileStr=new String(dataBytes,"ISO8859_1"); fileOut=new FileOutputStream(rootPath+fileName); fileOut.write(fileStr.getBytes("ISO8859_1"),0,fileStr.legth()); |
UploadFile.html 的源代码如下:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80"> <title>Upload a File</title> </head> <body> <h1>文件上传 </h1> <h2>提示:您的浏览器必须能支持文件上传!</h2> <form action="servlet/uploadServlet" method="POST" enctype="multipart/form-data"> <div align="left"> <pre>发送文件:<input type="file" size="40" name="upl-file"> </BR> <input type="submit" value="开始发送" now> <input type="reset" value="重 设"></pre> </div> </form> </body> </html> |
小结:
(1) Servlet 编程要求读者已经掌握了Java 语言程序设计,最好对面向对象也有一定的了解。Java 语言程序设计最主要的是对Java 的类库的使用,同样掌握Servlet 编程也要求熟练使用Sun 公司提供的JSDK。
(2) 一个好的Servlet 程序必须要考虑得全面。由于Servlet 在服务器上执行,为客户提供服务,有时可能会有多个客户同时向一个服务器发请求,这就要求Servlet 程序必须能够保证良好的并发性。允许Servlet 并发执行,就要解决Servlet 中变量和同步访问以及共享的问题,尤其要特别注意服务器的一些昂贵的资源。另一方面,Servlet 要把处理结果返回给客户,要求Servlet 充分考虑响应的速度和响应结果的简洁明了,同时对客户的错误请求有一定的容错性。
(3) 解决Servlet 中文输出问题
当Servlet 输出的文档中有中文时,需要在Servlet 中使用下面的语句来指明:
response.setContentType("text/html;charset=gb2312"); |
在JSP中使用:
<%@page contentType="text/html;charset=gb2312"%> |
这两者是等效的。
如果在Servlet 中文显示有问题,可从以下几方面来考虑:
* 修改区域设置---在控制面板中选择区域设置,如设为英语(美国)。
* 在编译Servlet 时加入代码选项,如:javac -encoding iso8859-1 ghqServlet.java
* 在源程序中加入编码转换函数,如:out.println(new String("请输入用户名").getBytes("GBK"),"ISO8859_1"));
或者使用下面的方法:
String Str="请输入用户名"; Byte[] tempByte=Str.getBytes("ISO8859_1"); String tempStr=new String(tempByte); |
这样tempStr 中的中文就可以正确显示了。
由于Servlet 采用不同的引擎,其中文的解决方法可能不同;因此,当出现中文显示问题时,建议一定要多实验,最终总会得到解决。
(4) Java Servlet 程序弥补了 Applet 程序的不足, Servlet 主要应用在HTTP Servlet 接收请求(HttpServletRequest接口)和产生响应(HttpServletResponse接口)、使用Cookies 及会话管理(HttpSession 接口)应用、Java Servlet 在网络上的编程应用如利用Servlet 上传和下载文件、Servlet 的数据库编程、在Servlet 中发送和接受邮件以及Java Servlet 在RMI和XML等方面的应用,因此Servlet 的编程应用还是比较广泛的。
通常 Servlet 可以使用以下的方法调用:
* 客户通过访问 Servlet 产生的文档来调用
Server 得到一个访问文档的请求后,查找配置参数,就会发现所需文档不是一个静态文档,而是由 Servlet 对象产生的,于是服务器就会把请求传给 Servlet,Servlet 调用 "service" 方法产生输出。这种方法与传统的调用 CGI 的方法类似。
* 直接通过 URL 调用 Servlet
客户(浏览器)使用以下格式的 URL 调用:
http://Servlet_Host_Name/servlet/<servlet URL>
<servlet URL>是指向 Servlet 位置的普通的URL,它的格式如下所示:
name?para1=value1¶2=value2...
其中,name 是 Servlet 的名字,"?" 后面跟的是一串参数,para1 是第一个参数名,value1是它的值,para1 是第二个参数名,value2是它的值,以此类推。通常Servlet 存放的位置可能与服务器不在同一台机器上,这时服务器就要动态加载、初始化和执行Servlet 类。
* 通过 SSI(Server-Side Includes) 标志调用
任何一个以.sthml 为扩展名的文件都是服务器要分析的文件。在该文件中,如果出现了Servlet标志,那么服务器就会运行该Servlet,并把它的输出结果插入标志所指示的地方。
* 把 Servlet 放在/servlet/目录下
如果一个 Servlet 的类文件被放在/servlet/目录下,那么就可以直接使用它的类名调用它。
* 通过 Filter Chain 调用
这种方法一般要把 Servlet 配置成当一个特定的 MIME 类型被设置为响应时再调用。
但Servlet 也有它的缺点:
* 在复杂的HTML 网页中,加入的动态部分如果用Servlet 来处理的话,那对程序员来说简直是一场噩梦。
* Servlet 要进行编译、放入执行码等复杂的调用过程。
正是由于Servlet存在的缺点,才出现使用JSP 技术来解决上面的问题,这也正是JSP 的优点。
发表评论
-
java阻塞队列学习(转帖)
2010-06-06 11:50 3467import java.util.concurrent.Arr ... -
httpclient链接关闭问题(转帖)
2010-03-11 22:09 2128HttpClient client = new HttpCli ... -
J2EE集群原理(转贴)
2010-03-09 19:57 1211J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念: ... -
Spring 实现ibatis事务回滚
2010-03-05 20:34 3630网上发现这篇文章,转过来学习一下,好不好用还没有实践,需要自己 ... -
java 可变参数
2009-12-14 20:50 14120vararg的意思是变量参数,它是与Jav ... -
java中的string
2009-11-25 14:45 1302从javaeye的论坛里看到这 ... -
使用JDBC对BLOB和CLOB进行处理
2009-11-12 20:33 4844从网上看到这篇文章,转过来做为学习用 设有表:create ... -
避免或最小化 Servlet 中的同步
2009-09-24 21:02 970servlet 是多线程的。基于 servlet 的应用程序必 ... -
httpclient 使用小记
2009-09-03 21:05 3374最近学习apache的httpclient 在使用postm ... -
httpclient 学习笔记
2009-08-23 16:52 1525前阵子,学习了一下APACHE 的httpclient,感觉h ... -
log4j使用
2009-06-19 21:08 1545从网上看到得,发现写 ... -
java虚拟机的一些概念
2009-05-24 10:22 1334从网上看到这篇文章,感觉适合初学jvm,就转来作为以后学习参考 ... -
xmlbean 生成带包路径的jar
2009-05-23 23:12 3278因为使用xmlbean生成 ... -
多线程中使用静态方法
2009-05-14 19:54 6630终于把内存泄漏问题解决了,不是多线程访问静态函数的问题,事实证 ... -
java Annotation入门
2009-04-16 21:22 1238因为偶然的原因需要使用Annotation,所以从网上找了这篇 ... -
MINA2.0简单使用
2009-04-12 16:12 5132一直知道MINA是apache 开发的一个开发socket编程 ... -
log4j参数配置说明
2009-03-22 20:31 1999前几天用到log4j,到网上查了一下他的参数配置,发现还是比较 ... -
portal之SSO开发文档
2009-03-02 20:12 4052前两天看到别人写的,感觉不错,就转了过来做为参考 ... -
cas在tomcat中的配置
2009-02-25 21:22 2819cas在tomcat上配置时,需要打开tomc ... -
SSO 原理浅谈
2009-02-25 19:41 2106SSO 是一个非常大的主题,我对这个主题有着深深的感受,自从 ...
相关推荐
在Java Web开发中,文件上传和下载是常见的需求,它们涉及到用户交互,数据传输和存储。本篇文章将介绍如何使用JSP和Servlet结合Apache的Commons FileUpload组件来实现文件上传的功能。首先,我们需要理解一些关键...
jsp&serverlet api开发文档
Java_tomcat_和serverlet的使用
在实际的压缩包文件中,"网上订餐1"可能包含了一系列的源代码文件,如JSP页面、Servlet类、数据库配置文件等,它们共同构成了这个订餐系统的骨架。开发者可以通过阅读和分析这些代码,深入理解每个组件的工作原理,...
将这个Servlet部署到Web应用中,我们需要在`web.xml`配置文件中定义Servlet的映射。例如: ```xml <servlet-name>HelloWorld <servlet-class>HelloWorldServlet <servlet-name>HelloWorld <url-pattern>...
你可以从“Ajax与Serverlet原理及应用”这个文件开始,逐步学习这两个技术的细节,包括它们如何协同工作以创建高效的Web应用程序。 总的来说,Ajax和Servlet的结合使用能够提供高性能、高度交互的Web界面,极大地...
serverlet Json commons-beanutils-1.7.0.jar commons-collections-3.2 .jar commons-lang-2.4.jar commons-logging.jar ezmorph-1.0.6.jar json-lib-2.2.3-jdk15.jar xmlns=...
开发者使用WAR(Web Application Archive)文件将整个应用打包,然后上传到服务器进行部署。 9. **安全性** 图书管理系统可能包含敏感信息,如用户账号和密码。因此,系统应采用安全措施,如加密传输(HTTPS)、...
Servlet的配置通常在Web应用的web.xml文件中进行,包括Servlet的类名、URL映射、初始化参数等。例如: ```xml <servlet-name>MyServlet <servlet-class>com.example.MyServlet</servlet-class> ...
JSP serverlet 增删查改JSP serverlet 增删查改JSP serverlet 增删查改JSP serverlet 增删查改JSP serverlet 增删查改JSP serverlet 增删查改JSP serverlet 增删查改JSP serverlet 增删查改JSP serverlet 增删查改
JavaWeb系列教程主要关注的是如何在Web应用中处理客户端请求,这里我们重点讲解Servlet的最简单登陆代码实现。... 首先,我们需要创建一个Servlet类,继承自HttpServlet。...例如: ```java import javax.servlet.*;...
- **Cookie**:存储在客户端浏览器上的小文本文件,用于跟踪用户信息。 #### 8. 设置和获取请求属性 - **设置属性**:使用`setAttribute(String name, Object value)`方法设置名为`name`的属性值。 - **获取属性**...
这是我接着上次传的jsp视频,都是来子培训班的东西; 先传2集;有人下载了我传剩下的要不也没什么用
例如,在`web.xml`文件中定义Servlet映射: ```xml <servlet-name>JspServlet1 <servlet-class>com.demo.JspServletDemo</servlet-class> <servlet-name>JspServlet1 <url-pattern>/JspServlet ``` 根据...
**JSP(Java Server Pages)** 是一种动态网页技术,由Sun Microsystems开发,它允许开发者在...这个"模式JSP+Serverlet+JavaBean"的学习文件应该包含了相关的示例代码和教程,可以帮助你更好地理解和应用这些知识。
【标题】:“JSP基于Servlet网上书店系统” 【描述】:这个项目是一个综合性的Web应用程序,采用MySQL数据库作为数据存储,JavaBean作为业务逻辑组件,Servlet作为控制器,并在Tomcat 6.0服务器上运行。...
【标题】"javabean+mysql+serverlet 学生成绩管理系统"是一个基于J2EE技术栈构建的应用,主要用于管理教育机构的学生成绩。在这样的系统中,JavaBean是核心组件,它作为数据封装的载体,实现了业务逻辑;MySQL是常用...
5. **配置Servlet映射**: 在Servlet的web.xml配置文件中,需要为Flex的Remoting Destination配置对应的Servlet映射。 6. **Flex端代码示例**: 在Flex应用中,使用`RemoteObject`或`HTTPService`组件来调用Servlet。...
综上所述,"在线考试系统jsp+serverlet"是一个综合运用Java Web技术构建的教育信息化平台,它通过jsp提供友好的用户界面,借助servlet处理复杂的业务逻辑,从而实现教师、学生和管理员的各类功能需求。