java web 文件上传下载分析总结

时间:2019-05-15 09:49:27下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《java web 文件上传下载分析总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《java web 文件上传下载分析总结》。

第一篇:java web 文件上传下载分析总结

个人理解:

上传下载文件根本是对流的处理,最基础的是不使用任何框架,直接对流进行获取和解析(对request.getInputStream()进行解析处理)。

其次用一些框架进行处理,目前文件上传的(框架)组件: Apache—-fileuploadOrialiy – COS,Jsp-smart-upload。以fileupload为例,提供了工具类解析request,不需要自己去解析流。

最后是使用一些J2EE流行框架,使用框架内部封装好的来完成上传下载。这些框架大体集成了fileupload等框架,在后者基础上进一步封装,不需要处理request就获取了封装好的文件,只需处理封装后的文件就可。

Struts2使用了fileupload,Springmvc则提供了commonsmultipartresolver进行解析。

在开发过程中文件的上传下载很常用。这里简单的总结一下: 1.文件上传必须满足的条件:

a、页面表单的method必须是post 因为get传送的数据太小了 b、页面表单的enctype必须是multipart/form-data类型的 c、表单中提供上传输入域

代码细节:客户端表单中:

(如果没有这个属性,则服务端读取的文件路径会因为浏览器的不同而不同)服务端ServletInputStream is=request.getInputStream();用流的方式获取请求正文内容,进一步的解析。

2.上传文件的细节:

(1)为什么设置表单类型为:multipart/form-data.是设置这个表单传递的不是key=value值。传递的是字节码.表单与请求的对应关系:

如上可以看出在设置表单类型为:multipart/form-data之后,在HTTP请求体中将你选择的文件初始化为二进制,如上图中的Cookie之下的一串的随机字符串下的内容。但注意,在标识文件(即一串随机字符串)所分割出来的文件字节码中有两行特殊字符,即第一行内容文件头和一行空行。之后的第三行才是二进制的文件内容。所以在服务端接受客户端上传的文件时,获取HTTP请求参数中的文件二进制时,要去掉前三行。

3.自己手工解析上传的txt文件:

importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/** * 如果一个表单的类型是post且enctype为multipart/form-date * 则所有数据都是以二进制的方式向服务器上传递。* 所以req.getParameter(“xxx”)永远为null。

* 只可以通过req.getInputStream()来获取数据,获取正文的数据 * * @authorwangxi * */

publicclassUpServletextendsHttpServlet { publicvoiddoPost(HttpServletRequestreq, HttpServletResponseresp)throwsServletException, IOException { req.setCharacterEncoding(“UTF-8”);String txt = req.getParameter(“txt”);//返回的是null System.err.println(“txt is :”+txt);System.err.println(“=========================================”);InputStream in = req.getInputStream();// byte[] b= new byte[1024];// intlen = 0;

// while((len=in.read(b))!=-1){

// String s = new String(b,0,len);// System.err.print(s);// }

BufferedReaderbr = newBufferedReader(newInputStreamReader(in));String firstLine = br.readLine();//读取第一行,且第一行是分隔符号,即随机字符串

String fileName = br.readLine();//第二行文件信息,从中截取出文件名

fileName = fileName.substring(fileName.lastIndexOf(“")+1);// xxxx.txt”

fileName = fileName.substring(0,fileName.length()-1);

br.readLine();br.readLine();String data = null;//获取当前项目的运行路径

String projectPath = getServletContext().getRealPath(“/up”);PrintWriterout =newPrintWriter(projectPath+“/”+fileName);while((data=br.readLine())!=null){ if(data.equals(firstLine+“--”)){ break;} out.println(data);} out.close();} }

4.使用apache-fileupload处理文件上传:

框架:是指将用户经常处理的业务进行一个代码封装。让用户可以方便的调用。目前文件上传的(框架)组件: Apache—-fileuploadJsp-smart-upload – 200M。用fileupload上传文件: 需要导入第三方包:

Apache-fileupload.jar – 文件上传核心包。

Apache-commons-io.jar – 这个包是fileupload的依赖包。同时又是一个工具包。核心类:

DiskFileItemFactory–设置磁盘空间,保存临时文件。只是一个具类。ServletFileUpload-文件上传的核心类,此类接收request,并解析reqeust。

ServletfileUpload.parseRequest(requdest)-List 注:一个FileItem就是一个标识的开始:---------243243242342到------------------245243523452—就是一个FileItem

第一步:导入包:

第二步:书写一个servlet完成doPost方法

/** * DiskFileItemFactory构造的两个参数

* 第一个参数:sizeThreadHold-设置缓存(内存)保存多少字节数据,默认为10K * 如果一个文件没有大于10K,则直接使用内存直接保存成文件就可以了。* 如果一个文件大于10K,就需要将文件先保存到临时目录中去。* 第二个参数 File 是指临时目录位置

* */

publicclassUp2ServletextendsHttpServlet { publicvoiddoPost(HttpServletRequestreq, HttpServletResponseresp)throwsServletException, IOException { req.setCharacterEncoding(“UTf-8”);//获取项目的路径

String path = getServletContext().getRealPath(“/up”);//第一步声明diskfileitemfactory工厂类,用于在指的磁盘上设置一个临时目录

DiskFileItemFactory disk = newDiskFileItemFactory(1024*10,new File(“/home/wang/”));//第二步:声明ServletFileUpoload,接收上面的临时目录 ServletFileUpload up = newServletFileUpload(disk);//第三步:解析request

try { List list = up.parseRequest(req);//如果就一个文件

FileItem file = list.get(0);//获取文件名,带路径

String fileName = file.getName();fileName = fileName.substring(fileName.lastIndexOf(“")+1);//获取文件的类型

String fileType = file.getContentType();//获取文件的字节码

InputStream in = file.getInputStream();//声明输出字节流

OutputStream out = newFileOutputStream(path+”/“+fileName);//文件copy

byte[] b = newbyte[1024];intlen = 0;while((len=in.read(b))!=-1){ out.write(b,0,len);} out.close();

long size = file.getInputStream().available();

//删除上传的临时文件 file.delete();//显示数据

resp.setContentType(”text/html;charset=UTf-8“);PrintWriter op = resp.getWriter();op.print(”文件上传成功
文件名:“+fileName);op.print(”
文件类型:“+fileType);op.print(”
文件大小(bytes)“+size);

} catch(Exception e){ e.printStackTrace();}

} }

5.使用该框架上传多个文件:

第一步:修改页面的表单为多个input type=”file”

“method=”post“enctype=”multipart/form-data“>

File1:
File2:

第二步:遍历list publicclassUp3ServletextendsHttpServlet { publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException { request.setCharacterEncoding(”UTF-8“);String path = getServletContext().getRealPath(”/up“);//声明disk

DiskFileItemFactory disk = newDiskFileItemFactory();disk.setSizeThreshold(1024*1024);disk.setRepository(new File(”d:/a“));//声明解析requst的servlet

ServletFileUpload up = newServletFileUpload(disk);try{ //解析requst

List list = up.parseRequest(request);//声明一个list封装上传的文件的数据

List> ups = newArrayList>();for(FileItem file:list){ Map mm = newHashMap();//获取文件名

String fileName = file.getName();fileName = fileName.substring(fileName.lastIndexOf(”“)+1);String fileType = file.getContentType();InputStream in = file.getInputStream();int size = in.available();//使用工具类

FileUtils.copyInputStreamToFile(in,new File(path+”/“+fileName));mm.put(”fileName“,fileName);mm.put(”fileType“,fileType);mm.put(”size“,”“+size);

ups.add(mm);file.delete();} request.setAttribute(”ups“,ups);//转发

request.getRequestDispatcher(”/jsps/show.jsp“).forward(request, response);

}catch(Exception e){ e.printStackTrace();} } } 如上就是上传文件的常用做法。现在我们在来看看fileupload的其他查用API.判断一个fileItem是否是file(type=file)对象或是text(type=text|checkbox|radio)对象: booleanisFormField()如果是text|checkbox|radio|select这个值就是true.6.处理带说明信息的图片

publicclassUpDescServletextendsHttpServlet { publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException { request.setCharacterEncoding(”UTF-8“);//可以获取中文的文件名 String path = getServletContext().getRealPath(”/up“);DiskFileItemFactory disk = newDiskFileItemFactory();disk.setRepository(new File(”d:/a“));try{ ServletFileUpload up = newServletFileUpload(disk);List list = up.parseRequest(request);for(FileItem file:list){ //第一步:判断是否是普通的表单项

if(file.isFormField()){ String fileName = file.getFieldName();//=desc

String value = file.getString(”UTF-8“);//默认以ISO方式读取数据

System.err.println(fileName+”=“+value);}else{//说明是一个文件

String fileName = file.getName();fileName = fileName.substring(fileName.lastIndexOf(”“)+1);file.write(new File(path+”/“+fileName));System.err.println(”文件名是:“+fileName);System.err.println(”文件大小是:“+file.getSize());file.delete();} } }catch(Exception e){ e.printStackTrace();} } } 7.文件上传的性能提升

在解析request获取FileItem的集合的时候,使用: FileItemIterator it=up.getItemIterator(request);

比使用 Listlist = up.parseRequest(request);

性能上要好的多。示例代码:

publicclassFastServletextendsHttpServlet {

publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException { request.setCharacterEncoding(”UTF-8“);String path = getServletContext().getRealPath(”/up“);DiskFileItemFactory disk = newDiskFileItemFactory();disk.setRepository(new File(”d:/a“));try{ ServletFileUpload up = newServletFileUpload(disk);//以下是迭代器模式

FileItemIterator it= up.getItemIterator(request);while(it.hasNext()){ FileItemStream item = it.next();String fileName = item.getName();fileName=fileName.substring(fileName.lastIndexOf(”“)+1);InputStream in = item.openStream();FileUtils.copyInputStreamToFile(in,new File(path+”/“+fileName));} }catch(Exception e){ e.printStackTrace();}

} } 8.文件的下载

既可以是get也可以是post。

publicvoiddoPost(HttpServletRequestreq, HttpServletResponseresp)throwsServletException, IOException { req.setCharacterEncoding(”UTF-8“);String name = req.getParameter(”name“);//第一步:设置响应的类型

resp.setContentType(”application/force-download“);//第二读取文件

String path = getServletContext().getRealPath(”/up/“+name);InputStreamin = newFileInputStream(path);//设置响应头

//对文件名进行url编码

name = URLEncoder.encode(name, ”UTF-8“);resp.setHeader(”Content-Disposition“,”attachment;filename=“+name);resp.setContentLength(in.available());

//第三步:开始文件copy

OutputStreamout = resp.getOutputStream();byte[] b = newbyte[1024];intlen = 0;while((len=in.read(b))!=-1){ out.write(b,0,len);} out.close();in.close();}

在使用J2EE流行框架时,使用框架内部封装好的来完成上传下载更为简单: Struts2完成上传.在使用Struts2进行开发时,导入的jar包不难发现存在 commons-fileupload-1.3.1.jar 包。通过上面的学习我们已经可以使用它进行文件的上传下载了。但Struts2在进行了进一步的封装。view

username:
file:

Controller FileUploadActionextendsActionSupport { private String username;

//注意,file并不是指前端jsp上传过来的文件本身,而是文件上传过来存放在临时文件夹下面的文件 private File file;

//提交过来的file的名字

//struts会自动截取上次文件的名字注入给该属性 private String fileFileName;//getter和setter此时为了节约篇幅省掉 @Override

public String execute()throws Exception { //保存上传文件的路径

String root = ServletActionContext.getServletContext().getRealPath(”/upload“);//获取临时文件输入流

InputStream is = newFileInputStream(file);//输出文件

OutputStreamos = newFileOutputStream(new File(root, fileFileName));//打印出上传的文件的文件名

System.out.println(”fileFileName: “ + fileFileName);

// 因为file是存放在临时文件夹的文件,我们可以将其文件名和文件路径打印出来,看和之前的fileFileName是否相同

System.out.println(”file: “ + file.getName());System.out.println(”file: “ + file.getPath());

byte[] buffer = newbyte[1024];int length = 0;

while(-1!=(length = is.read(buffer, 0, buffer.length))){ os.write(buffer);}

os.close();is.close();

return SUCCESS;} }

首先我们要清楚一点,这里的file并不是真正指代jsp上传过来的文件,当文件上传过来时,struts2首先会寻找struts.multipart.saveDir(这个是在default.properties里面有)这个name所指定的存放位置(默认是空),我们可以在我们项目的struts2中来指定这个临时文件存放位置。

如果没有设置struts.multipart.saveDir,那么将默认使用javax.servlet.context.tempdir指定的地址,javax.servlet.context.tempdir的值是由服务器来确定的,例如:假如我的web工程的context是abc,服务器使用Tomcat,那么savePath就应该是%TOMCAT_HOME%/work/Catalina/localhost/abc_,临时文件的名称类似于upload__1a156008_1373a8615dd__8000_00000001.tmp,每次上传的临时文件名可能不同,但是大致是这种样式。而且如果是使用Eclipse中的Servers里面配置Tomcat并启动的话,那么上面地址中的%TOMCAT_HOME%将不会是系统中的实际Tomcat根目录,而会是Eclipse给它指定的地址,例如我本地的地址是这样的:/home/wang/EclipseJavaCode/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/abc/upload__1a156008_1373a8615dd__8000_00000001.tmp。Struts2完成下载.struts2的文件下载更简单,就是定义一个输入流,然后将文件写到输入流里面就行,关键配置还是在struts.xml这个配置文件里配置:

publicclassFileDownloadActionextendsActionSupport { //要下载文件在服务器上的路径 private String path;//要下载文件的文件名

private String downloadFileName;//写入getter和setter

publicInputStreamgetDownloadFile(){ return ServletActionContext.getServletContext().getResourceAsStream(path);} @Override

public String execute()throws Exception { //当前action默认在valuestack的栈顶 setDownloadFileName(xxx);return SUCCESS;} }

action只是定义了一个输入流downloadFile,然后为其提供getter方法就行,接下来我们看看struts.xml的配置文件:

attachment;fileName=”${downloadFileName}“

downloadFile

struts.xml配置文件有几个地方我们要注意,首先是result的类型,type一定要定义成stream类型_,告诉action这是文件下载的result,result元素里面一般还有param子元素,这个是用来设定文件下载时的参数,inputName这个属性就是得到action中的文件输入流,名字一定要和action中的输入流属性名字相同,然后就是contentDisposition属性,这个属性一般用来指定我们希望通过怎么样的方式来处理下载的文件,如果值是attachment,则会弹出一个下载框,让用户选择是否下载,如果不设定这个值,那么浏览器会首先查看自己能否打开下载的文件,如果能,就会直接打开所下载的文件,(这当然不是我们所需要的),另外一个值就是filename这个就是文件在下载时所提示的文件下载名字。在配置完这些信息后,我们就能过实现文件的下载功能了。

SpringMVC完成上传:

view于struts2示例中的完全一样。此出不在写出。Controller: @Controller @RequestMapping(value=”fileOperate“)publicclassFileOperateAction { @RequestMapping(value=”upload“)public String upload(HttpServletRequest request,@RequestParam(”file“)MultipartFilephotoFile){ //上传文件保存的路径

String dir = request.getSession().getServletContext().getRealPath(”/“)+”upload“;//原始的文件名

String fileName = photoFile.getOriginalFilename();//获取文件扩展名

String extName = fileName.substring(fileName.lastIndexOf(”.“));//防止文件名冲突,把名字小小修改一下

fileName = fileName.substring(0,fileName.lastIndexOf(”.“))+ System.nanoTime()+ extName;FileUtils.writeByteArrayToFile(new File(dir,fileName),photoFile.getBytes());return”success“;} }

SpringMVC完成下载:

@RequestMapping(”/download“)public String download(String fileName, HttpServletRequest request, HttpServletResponse response){ response.setCharacterEncoding(”utf-8“);response.setContentType(”multipart/form-data“);response.setHeader(”Content-Disposition“, ”attachment;fileName=“

+ fileName);try { InputStreaminputStream = newFileInputStream(new File(文件的路径);

OutputStreamos = response.getOutputStream();byte[] b = newbyte[2048];int length;while((length = inputStream.read(b))>0){ os.write(b, 0, length);}

// 这里主要关闭。

os.close();

inputStream.close();} catch(FileNotFoundException e){ e.printStackTrace();} catch(IOException e){ e.printStackTrace();} // 返回值要注意,要不然就出现下面这句错误!

//java+getOutputStream()has already been called for this response returnnull;}

另附Spring mvc的三种上传文件方法

前台:

<%@ page language=”java“contentType=”text/html;charset=utf-8“

pageEncoding=”utf-8“%>

Insert title here

采用流的方式上传文件

采用multipart提供的file.transfer方法上传文件

使用spring mvc提供的类的方法上传文件

第二篇:javaWeb总结+小结

JavaWeb B/S与C/S的区别

1,从安装上来讲,B/S只需要在服务器端安装即可,而C/S却需要每一个客户端进行安装。2,从部署上来说,B/S只需要服务器能够支持即可,而C/S却对每一个客户端的电脑提出了要求。

3,从升级,维护角度来说,B/S只需要在服务器端升级维护即可,像网易的邮箱,而C/S却是服务器更新维护一次,客户端就要下载相关的补丁才能使用 4,从安全性来讲,B/S是基于服务器的,较之C/S安全性好

5,从本质上来说,B/S是基于请求驱动的,即客户端发送一个Http请求,然后服务器进行处理之后,响应给客户端,而C/S却是基于事件驱动的,像腾讯的QQ。

6,从耦合度来讲,B/S与服务器端耦合,而C/S却是与客户端的操作系统进行耦合。但是Client/Server(从游戏的角度来讲)较之Brows/Server具有优质的画面。

Servlet的使用步骤:

1,创建一个JAVA类,存放在com.fit.servlet包中,并且此类extends HttpServlet类,才能成为一个Servlet 2,覆写doGet()和doPost()方法

3,最后,在web.xml文件中进行Servlet配置。具体的配置如下:

Servlet类名

完整的包.类名称

Servlet类名

网页访问的名称,例如/hello Servlet的生命周期,作用,并说出和CGI(Common Gateway Interface)的区别

就是指Servlet从创建出实例对象到销毁的过程。它是一个容器,负责创建实例来接受客户端的请求,并且以多线程的方式响应给客户。具体过程如下:

Servlet被服务器实例化之后,容器运行其init方法进行初始化,请求到达时运行其service方法,在此过程中仅创建一个对象,然后service方法自动调用与请求相应的doXxx方法,当服务器决定将实例进行销毁时,再调用其destroy方法。

与CGI(通用网关接口)的区别在于,Servlet处于服务器进程中,它通过多线程的方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每一个请求都产生新的进程,服务完成后就销毁,所以效率低于Servlet 作用:可以用来进行接收客户端的请求,也可以进行请求流的控制。

Http协议:(了解)

首先它是(Hypertext Transfer Protocol)超文本传输协议。

HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式如下:

请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体

请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。

应答报文格式如下:

状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体

状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。工作流程:

一次HTTP操作称为一个事务,其工作过程可分为四步:

首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。

建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客 户机与服务器断开连接。

Javascript的作用:

1,进行验证(通过正则表达式,在css+HTML的部分特性进行浏览器端的格式验证工作)

2,进行交互(将客户端的一个请求通过JavaScript可以发送到服务器端,也可以在浏览器端进行人机的交互,突破了以前静态页面的交互性限制)3,进行特效的处理,如走马灯,时间时钟。

Servlet生命周期:(详细)是指Servlet实例从被创建到其消失(对象销毁,回收)中间的时间及各个阶段,称之为Servlet生命周期。

前提:web服务器加载类。之后执行以下过程:

1,实例化:Servlet容器创建Servlet实例,具体就是当接收到客户端的第一次请求时,Servlet容器负责创建Servlet的一个实例。且在此过程中仅创建一个实例,通过多线程的方式响应客户端的请求

2,初始化:该容器调用init()方法。

3,服务:当请求到达时,该Servlet容器自动调用server()方法,根据客户端发送请求的方式,选择doXxx()方法执行

4,销毁:当web服务器被卸载的时候,调用destroy()方法进行对象的销毁。请看以下的一段代码: package com.fit.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Test extends HttpServlet { private static final long serialVersionUID = 1L;

public Test(){

super();

System.out.println(“===========================”);

} public void destroy(){

System.out.println(“对象被销毁!”);} public void init()throws ServletException {

System.out.println(“对象初始化!”);} protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

System.out.println(“get方法执行”);} protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

this.doGet(request, response);} protected void service(HttpServletRequest arg0, HttpServletResponse arg1)

throws ServletException, IOException {

System.out.println(“服务开始启动了!”);

super.service(arg0, arg1);}

}运行效果如下:

=========================== 对象初始化!服务开始启动了!

get方法执行

2011-7-19 12:07:04 org.apache.catalina.core.StandardContext reload 信息: Reloading this Context has started 对象被销毁!

分析原因:

1,实例化对象发生在客户端请求第一次到达的时候,而不是类被加载的时候。2,对象只被实例化一次.3,如果service()被覆写的话,则调用的时候加入super.service(arg0, arg1);这句话时候才可以清楚的调用的doXxx()方法,如果不加入此句话,那么将不会执行doGet()方法。所以一般不要覆写service()方法。只需要覆写doGet()和doPost()方法。

4,当web服务器被卸载的时候,将执行destroy()方法。进行对象的销毁!

Jsp页面构成元素,Jsp跟Html的区别,优势

Jsp定义:(Java Server Page)Java服务器端语言,组成如下: 1,静态模板:由HTML,css,JavaScript等元素构成。

2,指令:设定网页元素的属性,用于提供这个歌JSP网页的相关信息。

3,脚本元素--声明:<%!...%>,在此之中可以进行变量,常量的定义,类,方法都可以声明,但是一般不用。

4,脚本元素--Java脚本:<%...%>,在此期间可以进行Java代码的拼写。5,脚本元素--表达式:<%=..%>,用于表达式输出时使用。

6,动作:利用JSP动作可以重用JavaBean组件,可以动态的包含页面,也可以进行服务器端的跳转(即将用户的请求转发给其他的页面)。7,注释:

--HTML注释:,此种注释可以在页面中看到,成为客户端注释。--Jsp注释:<%----%>,此种注释在页面中看不到,也成为服务器端注释。--Java注释:

单行注释:// 多行注释:/*„„„*/ Jsp优点:使用HTML,CSS等技术构建页面的模板部分,用Java语言根据用户的输入动态生成可变的内容部分。既可以实现HTML控制页面布局,也亦可以实现Servlet的功能,实现了内容与表示分离。Jsp的常见指令,并说出静态包含和动态包含的区别

Page指令:<%@ page language=”java” import=” 完整的包.类名称” autoFlush=”true[false]” errorPage=”文件名” isErrorPage=”false[true]” isThreadSafe(设置是否能多线程使用)contentType=”text/html;charset=ISO-8859-1” %> 包含指令:<%@ include file=”文件名”%> taglib指令:此指令用于在Jsp页面中引入用户自定义的标签库。例如: <@% taglib url=http://java.sun.com/jsp/jstl/core prefix=”c”%> 静态包含跟动态包含的区别:

<%@ include file=”文件名%>,此包含属于静态包含,是指先将文件包含进来然后在进行编译,编译后生成的class文件中,被包含的文件在静态块中。且此种包含不允许带参数。

此种包含属于动态包含,先解释再包含进来结果,即只有在客户端进行请求时才会被动态的编译载入,在生成的class类中,它被请求一次就被创建一次。且此种被包含页面可以取得包含它的页面的参数。

Jsp常见的动作,调用JavaBean相关:

,调用此动作,可以用于实例化JavaBean,或者定位一个已经存在的JavaBean的实例,并把实例的引用赋给一个变量。

,通过这个动作可以取得JavaBean对象的属性

或者通过此动作,可以用来设置JavaBean的简单属性和索引属性,此动作的name属性必须与总的id属性相匹配。当JavaBean的属性名与请求参数名相同的情况下,可以使用property=“*”的方式为多个JavaBean的属性同时赋值,如: jsp页面通信:

:此动作用来在当前Jsp包含动态和静态文件的输出结果,可以和配合使用,向嵌入的Jsp页面传递参数

:此动作用来从当前Jsp页面转向其他页面,并传递Request对象,response对象,该标签后面的代码将不会被执行。Jsp的内置对象,四种作用域的通信对象的范围

输入/输出对象

request:表示客户端对网页的请求

response:用于处理Jsp生成的响应,使用Http协议将响应发送给客户端。

out:表示从response中取得的输出流。常用的方法有write(),print(),println()等,用于在页面中输出文本形式的响应内容 作用域通信对象

pageContext:此通信对象的作用域仅在当前页面有效,一旦跳转则不可用

request:此通信对象的作用域针对的同一个客户的请求,如果不是同一个请求则不可以使用

session:此通信对象的作用域适用于一次会话,即打开的同一个浏览器的所有页面都可以适用

application:此通信对象的作用域适用于基于WEB服务器的所有会话,适用于监听器 Servlet对象

page:指向当前Jsp页面经过转译(jsp.java文件),编译(.java文件.class文件)后的对象本身,即编译后的Servlet对象本身

config:是在一个Servlet初始化时,服务器向它传递的初始化信息。初始化信息可以在web.xml中找到。错误对象

execption:表示Jsp页面运行时抛出的异常对象,可以在专门准备的错误处理页面中访问这个异常对象。

Jsp执行过程:

jsp文件转译:当客户端请求一个正确的Jsp文件时,将Jsp—>.java文件(即将Jsp文件翻译成相应的Servlet类的源文件)编译:.java文件.class文件,即将Servlet类的源文件进行编译成为.class的Servlet文件。调用Servlet的service()方法响应用户的请求。

描述Jsp和Servlet的区别,共同点,各自的应用范围:

1,从发展上来看,Jsp可以避开Servlet的输出页面的繁琐步骤,它集合了HTML和Servlet的优点。

2,从本质上来说,Jsp是Servlet的扩展,它是Servlet的简易形式。Jsp经过转译之后就成为了类Servlet。

3,从创建方式上来说:Jsp由HTML代码和JSP标签构成,而Servlet则完全是由程序代码构成擅长于流程控制和事务处理的类

4,从使用角度来说:在MVC中,Jsp担任的是VIEW层,侧重于视图,而Servlet则充当的控制层,侧重于控制逻辑。请求转发和重定向

 response.sendRedirect():利用response对象向客户端发回一个响应指示其访问其他URL资源,或者说是一个web组件向另一个web组件发送一个新的请求,属于重定向,地址栏有变化。且不可以传递属性request参数,当所有的代码执行完之后才进行重定向。

request.getRequestDispatcher().forword(req,resp):web组件将一个请求转发给另一个web组件,他们始终是同一个请求,在此期间可以传递request属性参数,地址栏没有变化。且一执行到此代码处,后边的将不再执行

JavaBean的组成:

类必须是具体的,公共的。提供无参数的构造方法

提供getter()和setter()方法访问它的属性。版权所有@杨肖飞yangxf159371@126.com

第三篇:javaweb课程设计

课程设计:基于Java Web的讨论区BBS系统的设计与实现

本系统要求实现以下主要功能:

(1)登录:提供用户登录系统的功能,需要输入用户名和密码

(2)注册:提供用户注册的功能,需要输入用户名、密码、密码确认、Email、QQ

(3)修改注册信息:提供用户修改注册信息的功能,可以修改密码、Email、QQ

(4)浏览讨论区:用户登录后就可以浏览系统中已存在的讨论区,用户可以查看某讨论

区的详细信息,也可以进入该讨论区浏览已发表的帖子,以及回帖

(5)创建讨论区:用户可以创建讨论区,每个讨论区包含一个名称和顺序号,每个讨论

区的名称在系统中是唯一的,顺序号表示讨论区在列表中的排序

(6)修改讨论区:提供讨论区名称和顺序号的修改功能

(7)删除讨论区:提供讨论区删除的功能,方便管理员进行讨论区管理

(8)浏览帖子:用户进入一个讨论区后,可以看到帖子列表,包含帖子主题、作者、创

建时间、回复次数,点击一个帖子,可以查看该帖子的内容和回帖

(9)创建帖子:用户进入一个讨论区后,可以选择创建一个新帖子,需要输入帖子标题

和内容

(10)修改帖子:提供给管理员使用,修改帖子标题和内容

(11)删除帖子:提供给管理员使用,方便管理员进行帖子整理

(12)回复帖子:用户在浏览帖子信息的时候,可以进行回复

第四篇:javaweb学习心得

学习心得

在写心得之前总结下中级部分学习的内容,我们的中级部分主要学习了html,css,javacript,xml,dtd/scheam,以及java ee 中的jsp,servlet,过滤器,监听器,JSTL,EL,jQuery,Ajax。

下面就各个模块进行总结:在学习html时,我是对这个没太在意的,因为里面全部是标签,没有需要理解的内容,全部是属于识记的,所以在学习时相对轻松,对于html常用的标签都是非常清楚的form中的十一种类型,常用的有text,password,hidden,submit,button,radio,checkbox,等其他的标签如div,table,span,select都是重要的标签.Css的学习:虽然说在标签中也可以定义样式,但是这么做看起来不是那么明智,我在学CSS时还是比较努力的,所有的样式效果都测试过,并且写了相应的案例,只是过了不到3个月就忘了一大半,很多时候都是查文档才能写出来的,虽然CSS对于我们来说不必要非常精通,但是我觉得掌握的东西越多,以后的工作就越轻松,所以在中级结束后也会去看看前面的笔记和案例。

Javascript:js 我认为是最重要的,甚至于超过servlet,jsp,在上课期间,讲的内容还是比较少的,就javascript中创建对象来说吧,应该只讲过3中方法,虽然在一般的情况下是用不上的,但是我觉得还是有必要学习的,这样有助于看懂别人写的框架,在javascript这部分学习中讲的最多的还是dom操作,不过我觉得用dom操作太繁琐了,写的代码太多,而且效率看起来也不高,后面就是讲的事件,事件也算是简单的,只是对触发的事件进行相应的响应。除了这些就是javascript流程控制,对象一些基本语法,这些和java类似,所以在上课时没有讲得太多。

Xml: Markup Language可扩展标记语言。它是由SGML(Standard Gerneralized Markup language)发展而来的,允许开发者自定标签,可以将标签和内容有效的分离。在XML技术里,可以编写一个文档来约束XML文档的书写规范,称之为XML约束。本文主要介绍DTD与Schema两种约束,在这里学习了dtd,scheama,定义XML约束,这部分的学习是我感觉最累的一部分,DTD还算好,SCheama里面的内容,现在都忘了,没有任何记忆,只知道在XML约束中有着两中方式,还好这些在刚开始工作时是用不上的,因此我也没有用很多时间来学习。

Servlet:我觉得是比较简单的,可能是因为它是java代码,容易理解。首先讲的是开发环境的配置,安装tomcat,了解tomcat下的目录,以及web工程下的目录。后来是讲了servlet的访问方式,post和get的区别,处理中文乱码是servlet中一个重要的知识点,几乎每个项目都会遇到这个问题。主要乱码有get,post乱码,是通过设置request或者response的编码方式来实现的。Servlet间的跳转方式有重定向和转发,对于重定向和转发的区别,现在理解的很透彻了,重定向是不能获取request中参数,是客户端的两次请求,而转发是服务器内部跳转,不过,两种在设置过滤器的情况下,都要通过过滤器才能跳转。Servlet的生命周期是笔试的必考题,其实这是很简单的,只需要理解,没必要死记硬背的,session算是重要的知识点,很多数据都是存储在内存中,如购物车,用户信息等,还可以对session设置生存时间。说到session就必须说说四种会话跟踪技术,cookie,URL重写,表单域隐藏和session。

JSP:JSP实际上和servlet是一样的,只不过两者侧重点不同,JSP的内置对象和作用域大致是一样的,JSP中还有动作,常用的有操作JavaBean的动作,页面跳转的动作,以及包含的动作。这里重点提到两种包含的区别。在JSP还讲过jstl和EL表达式,都是基础的应用,不过写自定义的标签还是要有一定的java基础的,我开始不太理解标签的解析过程,后来看了几个例子,发现自定义的已不是那么难。

jQuery:jQuery可以说是中级部分学的最好的,主要是它方便了,特别是选择器,而且避免了一些浏览器的差异,所以在学习jQuery后,就再也不想用javascript来获取元素了。不仅如此,jQuery中封装的Ajax操作也是非常简单,不需要自己封装一个类,$.get和$.post 能够省去很多麻烦,jQuery的监听事件也是很简单,不需要在标签中添加对应事件,可以动态的绑定事件。还有就是dom操作更是方便。我在学习完Ajax,json后就发现,即使是没有JSP,也能做出一个动态页面出来,只是会存在效率问题。

总结:虽然说这上面的知识大部分都掌握了,但是能否灵活运用才是重点,所以在今后的学习中多思考问题是否有多种解决方法。

第五篇:Javaweb期末试卷总结版2

Java Web试题 JAVA WEB部分: 1.基于HTTP协议的Servlet通常继承__C______, 也可以继承__B______。这些类型都实现了接口___A_____。

A.javax.servlet.Servlet

B.javax.servlet.GenericServlet C.javax.servlet.http.HttpServlet 2.我们实现的基于HTTP协议的Servlet的服务方法签名正确的有__

BCD_____________。

A.public void doGet(ServletRequest req, ServletResponse res)throws IOException, ServletException B.public void doPost(HttpServletRequest req, HttpServletResponse res)throws IOException, ServletException C.public void service(HttpServletRequest req, HttpServletResponse res)throws IOException, ServletException D.public void service(ServletRequest req, ServletResponse res)throws IOException, ServletException

重写服务方法,一般是以下两种方式: doGet(HttpServletRequest req,HttpServletResponse res)doPost(HttpServletRequest req,HttpServletResqonse res)

HttpServlet继承自GenericServlet,其中的service方法自动实现; GenericServlet的调用方法: 容器

-->service(ServletRequest req,ServletResponse res)-->service(HttpServletRequest req,HttpServletResponse res)-->METHOD=“GET”-->doGet(HttpServletRequest req,HttpServletResponse res)-->METHOD=“POST”-->doPost(HttpServletRequest req,HttpServletResponse res)

API中有D这个方法

3.在Servlet中要输出内容,使用HttpServletResponse的方法_setContentType 设置内容,对于文本类型调用方法__ getWriter _获得一个___ PrintWriter ___的输出流,对于二进制类型调用_ getOutputStream 获得_ ServeltOutputStream _的输出流。调用HttpServletRequest的方法_ getParameter 解析有名参数,调用_ getInputStream 获得一个_ ServletInputStream _的输入流。在Servlet中也可以调用_ ServletContext 和_ HttpServletRequest _的方法_ getRequestDispatcher __获得__ RequestDispatcher __, 将请求的处理权交给一个新的资源。A.ServletInputStream

B.ServletContext

C.HttpServletRequest D.setContentType

E.getInputStream

F.getOutputStream G.getRequestDispatcher H.RequestDispatcher

I.getParameter J.ServeltOutputStream K.getWriter

L.PrintWriter

4.控制一个Servlet的生命周期的方法有__C______, _____B___和____A____。其中 ___C_____在所有的请求到来之前调用,____A____在撤消应用或关闭web container时调用。Servlet通常只有一个实例,被所有的访问者共享,因此要注意资源的同步。A.destroy

B.service

C.init 5.以下是部署在主机”%> C.

D.

E.<% int i = 10;%>

F.<%!int i = 10;%> G.< %@taglib uri=”http://java.sun.com/jstl/core” prefix=”c”%> H.<%=new java.util.Date()%> I. J.<% response.sendRedirect(“http://www.xiexiebang.com”);%> K.<%@page contentType=”text/html;charset=gb2312”%>

11.在directive page中,__B______属性可反复出现,___AC_____属性的却省值为true, ____E____属性的值指向处理异常的页面,______D__表示激活EL。A.autoFlush

B.import

C.session D.isELIgnored=false

E.errorPage

jsp的page指令(directive)

jsp的page指令(directive)影响着由JSP页面生成的Servlet的整体结构!page指令的功能包括(1)类的导入(2)Servlet父类的制定(3)内容类型的设置(4)页面会话的设置(5)页面缓冲的设置

(6)错误页面的设置(7)控制线程行为

page属性(attribute)值的两边的双引号也可以用单引号代替,单引号不能省略,若属性值本身含有引号,则在它们之前加上反斜杠来转义。

page 的几个重要的指令:1.import 唯一的一个允许多次出现的attirbute.默认情况下有以下几个是自动导入的包,java.lang.*;java.servelt.*;javax.servlet.jsp.*;javax.servlet.http.*!2.pageEncoding用来单独设置页面的字符集。%@page pageEncoding=“GB2312”% 3.contentType设置响应报头标明发送到客户端的MIME类型和页面字符集!<%@ page contentType=“text/html;charset=gb2312”%> 4.session 属性控制页面的会话特性!%@page session=“true|false”%

默认值为true.5.buffer 和 autoFlush 属性

buffer 设置缓冲区的大小 <%@ page buffer=“sizekb|none”%>

autoFlush 当缓冲区满后自动清空!%@page autoFlush=“true|false”% 默认值为true,为false时会抛出一个异常。

6.errorPage 和isErrorPage(attribute)<%@page errorPage=“RelativeURL ”%>指定一个页面处理当前页面抛出但未捕获的异常对象。

%@page isErrorPage=“true|false”% 表明当前页面是否可以作为其他jsp页面的错误页面。可以将此页面放在WEB-INF目录中,有助于提高程序的安全性。

1、<%@ page buffer=“25kb” autoFlush=“true” %>

2、buffer=“none | 8kb | sizekb” buffer的大小被out对象用于处理执行后的JSP对客户浏览器的输出。缺省值是8kb

3、autoFlush=“true | false” 设置如果buffer溢出,是否需要强制输出,如果其值被定义为true(缺省值),输出正常,如果它被设置为false,如果这个buffer溢出,就会导致一个意外错误的发生.如果你把buffer设置为none,那么你就不能把autoFlush设置为false.12.有一个JavaBean com.briup.Student, 在JSP中用action在session作用域里创建一个对象hellen的语句是_______。

什么是JavaBean?(参见文档)

13.以下_ABCD_______是JSP中正确的注释:

A.<%--comments--%> 真正的注释

B.<% //comments %> C. 会写在页面当中

D.<%!/* comments */ %> JAVA中的单行和多行注释

14.以下__AB______是错误的:

A.<%!int i = 10;int j = 10;i += j;%> B.<% int getHash(String str){ return str.hashCode();} %> 声明脚本 C.<%!class A { void print(){System.out.println(“in A”);}} %> 15.在JSP中有很多隐含变量,request的类型是C_javax.servlet.http.HttpServletRequest______, response的类型是_I__javax.servlet.http.HttpServletResponse__, page的类型是__E__javax.servelet.jsp.JspPage_,pageContext的类型是__B__javax.servlet.jsp.PageContext____, session的类型是_D__javax.servlet.http.HttpSession_____, application的类型是____G__ javax.servlet.ServletContext__, config的类型是__F_javax.servlet.ServletConfig_, out的类型是_H__ javax.servlet.jsp.JspWriter_____, exception的类型是___A__java.lang.Throwable___。A.java.lang.Throwable

B.javax.servlet.jsp.PageContext C.javax.servlet.http.HttpServletRequest

D.javax.servlet.http.HttpSession E.javax.servelet.jsp.JspPage

F.javax.servlet.ServletConfig G.javax.servlet.ServletContext H.javax.servlet.jsp.JspWriter I.javax.servlet.http.HttpServletResponse

参见PDF97页

16.JSP在处理客户请求前会被编译成servlet, JSP中declaration中定义的变量和方法在运行时成为对应servlet的___B_____变量和方法;scripting会成为服务方法____C____的语句。JSP的生命周期受到____A____,___C_____和___D_____的控制。A.jspInit

B.member

C._jspService

D.jspDestroy

调出一个编译后的JSP文件给学生看

D:JAVATomcat-5.5.25workCatalinalocalhostRunCommunityorgapachejsppages

17.在web应用webdev的WEB-INF的目录下有一个标签库描述文件sample.tld, 其内容部分如下:

hello

com.tarena.tags.HelloTag

empty

user

true

false

java.lang.String

在hello.jsp中要使用标签hello, 因此必须先引入该标签库,语句是__<%@taglib uri=”/WEB-INF/sample.tld” prefix=”s”%>_____。要用hello标签在页面上给”world“打招呼的语句是________________。

18.在web应用webdev的WEB-INF/tags目录下放置了一些标签文件,用前缀”me”引入这些标签到一个jsp的 directive taglib的表达式是___<%@taglib tagdir=”/WEB-INF/tags” prefix=”me”%>__。

19.一个没有body的标签其tag handler要实现接口__C______;如果某个标签有body, 但标签不与body交互,tag handler要实现接口___E_____, 如果要与body交互,tag handler要实现接口____D____。通常前两种情况的tag handler会继承___A_____, 最后一种情况tag handler会继承_____B___。

A.javax.servlet.jsp.tagext.TagSupport B.javax.servlet.jsp.tagext.BodyTagSupport C.javax.servlet.jsp.tagext.Tag D.javax.servlet.jsp.tagext.BodyTag E.javax.servlet.jsp.tagext.IterationTag 20.在EL中以下____B____可以获得requestURI:

A.${requestScope.request.requestURI} B.${pageContext.request.requestURI} C.${requestScope.requestURI} 21.EL中可使用一些隐含对象,通过____C____可以访问request中的属性(attriubte), 通过___A_____可以访问session中的属性, 通过___B_____可以访问application中的属性, 通过___D_____可以访问浏览器输入的参数,通过____G____可以访问请求头中的参数,通过____E____可以访问web应用的参数,通过____F____可以访问cookie。A.sessionScope

B.applicationScope

C.requestScope D.param

E.initParam

F.cookie G.header 22.在EL中能够访问的函数(function)必须是_____A___。

A.public static

B.protected

C.protected static D.public static void

F.protected static void 23.在EL中访问JavaBean Student的对象smallTank的属性name正确的是__ABC______。A.${smallTank.name}

B.${smallTank[„name‟]} C.${smallTank[“name”]}

D.${smallTank(„name‟)}

SESSION AAA=”aa”

APPLICATION(aa=”hhhh”)

applicationScope['aa'] 此种情况只能用方括号

24.Struts提供MVC的一个实现,是Java Web应用的一个框架(Framework).它主要采用了____D____模式。浏览器请求被控制器servlet ___A_____截取,控制器将浏览器表单的输入封装到____F____类型的JavaBean对象中,如果应用需要作合法性检测,该类型的____G____方法会被调用,该方法的返回类型是_____B___。如果合法性检测正确,控制器会将调用类型为____H____对象的方法__E______处理请求,该方法返回类型为____C____。A.org.apache.struts.action.ActionServlet

B.org.apache.struts.action.ActionErrors C.org.apache.struts.action.ActionForward

D.command

E.execute F.org.apache.struts.action.ActionForm G.validate H.org.apache.struts.action.Action 25.使用Tomcat,我们通常会设置环境变量_C_ CATALINA_HOME_指向安装目录;web应用的却省部署目录在安装目录下的___A__webapps___子目录;如果有多个web应用共享的包如数据库驱动程序,我们应该将其放置在安装目录的__D__common/lib__子目录;Tomcat的主要配置文件是安装目录下__B_conf _子目录下的___F__server.xml___;Tomcat 5的应用相关的配置文件放在安装目录下___E__conf/Catalina/___子目录。A.webapps

B.conf

C.CATALINA_HOME D.common/lib

E.conf/Catalina/ F.server.xml

下载java web 文件上传下载分析总结word格式文档
下载java web 文件上传下载分析总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    javaweb程序打包成war文件的步骤

    如何生成WAR文件 2008-04-22 17:15 将Web应用打包成WAR文件的方法 2007年09月27日 星期四 10:41 (1)在命令行中运用Jar命令 假定有一个Web应用:C:/myHome myHome/WEB-INF/…......

    javaWeb安全验证漏洞修复总结

    EMA服务管理平台二期扩容安全验收 漏洞修复总结 2011年5月 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 目 录 1 2 WEB安全介绍 ...................................

    JavaWeb实习报告

    武汉工程大学计算机科学与工程学院 生产实习报告 JavaWeb实习报告 一、实习目的与任务 为了锻炼我们的实践动手能力,提高我们分析问题、解决问题的能力,培养我们的工作意识和......

    javaWeb面试题(含答案)

    1、jsp和servlet的区别、共同点、各自应用的范围?? JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servle......

    javaweb笔试题

    (1) 假设在helloapp应用中有一个hello.jsp,它的文件路径如下: %CATALINA_HOME%/webapps/helloapp/hello/hello.jsp c 那么在浏览器端访问hello.jsp的URL是什么? 选项: (A) ht......

    javaweb毕业实习报告

    javaweb毕业实习报告 javaweb毕业实习报告一、实训题目 会员管理系统的设计与实现二、实训内容 引言 .1系统开发背景 本系统是在Internet普及的情况下,越来越多的公司企业建设......

    javaweb 实训报告

    1、实习题目:java软件开发2、实习目的: 本人由于在达内实训时,各项成绩优异,被北京木联能科技有限公司录用为java软件开发实习生,作为即将步入社会的应届毕业生,我带着无比激动的......

    Javaweb复习题(带答案)

    Javaweb复习题 1.什么是超文本协议?一般JSP应用程序服务器(WEB服务器)使用的发布端口是多少? 超文本协议(HTTP)Hypertext Transfer Protocol:进行超文本和超媒体数据的传输. 发布......