J2EE文件的上传和下载

合集下载

Java多方式实现文件上传

Java多方式实现文件上传

在Struts 2中实现文件上传前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。

实现原理Struts 2是通过Commons FileUpload文件上传。

Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。

从而我们就能够以本地文件方式的操作浏览器上传的文件。

具体实现前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。

以下是例子所依赖类包的列表:清单1 依赖类包的列表首先,创建文件上传页面FileUpload.jsp,内容如下:<% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %><% @ taglib prefix = " s " uri = " /struts-tags " %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/ TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title> Struts 2 File Upload </title></head><body><s:form action="fileUpload"method="POST"enctype="multipart/form-data"> <s:file name="myFile"label="Image File"/><s:textfield name="caption"label="Caption"/><s:submit /></s:form></body></html>清单2 FileUpload.jsp在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。

struts2下载(使用配置文件)

struts2下载(使用配置文件)

struts2下载(使用配置文件)1.第一步web.xml2.<?xml version="1.0" encoding="UTF-8"?>3.<web-app version="2.4"4.xmlns="/xml/ns/j2ee"5.xmlns:xsi="/2001/XMLSchema-instance"6.xsi:schemaLocation="/xml/ns/j2ee7./xml/ns/j2ee/web-app_2_4.xsd">8.<welcome-file-list>9.<welcome-file>index.jsp</welcome-file>10.</welcome-file-list>11.12.<filter>13.<filter-name>struts2</filter-name>14.<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>15.</filter>16.<filter-mapping>17.<filter-name>struts2</filter-name>18.<url-pattern>/*</url-pattern>19.</filter-mapping>20.21.</web-app>第二步:struts.xml1.<!DOCTYPE struts PUBLIC2."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"3."/dtds/struts-2.0.dtd">4.<struts>5.<package name="default" extends="struts-default">6.<action name="download" class="action.DownloadAction">7.<result type="stream">8.<param name="contentType">application/octet-stream</param>9.<param name="inputName">inputStream</param>10.<param name="contentDisposition">attachment;filename="${fileName}"</param>11.<param name="bufferSize">4096</param>12.</result>13.</action>14.</package>15.</struts>当result为stream类型时,struts2会自动根据你配置好的参数下载文件。

Java从服务器下载文件到本地(页面、后台、配置都有)

Java从服务器下载文件到本地(页面、后台、配置都有)

Java从服务器下载⽂件到本地(页⾯、后台、配置都有)先来看实现效果:有⼀个链接如下:点击链接下载⽂件:第⼀种⽅法:Servlet实现⼀、HTML页⾯部分:1、HTML页⾯中的⼀个链接<a id="downloadTemplate" style="color:blue" onclick="download();">下载导⼊模板</a>2、引⼊JSfunction download(){downloadTemplate('downloadExel.downloadexcel', 'filename', 'project');}/*** ⽤于下载导⼊模板时的影藏form表单的提交,采⽤post⽅式提交* @param action action映射地址* @param type parameter的名称* @param value parameter的值,这⾥为file的filename*/function downloadTemplate(action, type, value){var form = document.createElement('form');document.body.appendChild(form);form.style.display = "none";form.action = action;form.id = 'excel';form.method = 'post';var newElement = document.createElement("input");newElement.setAttribute("type","hidden"); = type;newElement.value = value;form.appendChild(newElement);form.submit();}3、解释上⾯JS(不是正是代码)相当于提交⼀个form,⾥⾯如下:<input type=hidden name="filename" value = "project">后台可以通过下⾯代码获得⽂件名:projectString filename = request.getParameter("filename");(这段是上⾯js的翻译,不是正式的哦)配置前台页⾯和后台交互1、web.xml配置<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4"xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>downloadServlet</servlet-name><servlet-class>com.zit.rfid.app.prms.business.service.servlet.DownloadTemplateServlet</servlet-class><load-on-startup>3</load-on-startup></servlet><servlet-mapping><servlet-name>downloadServlet</servlet-name><url-pattern>*.downloadexcel</url-pattern></servlet-mapping></web-app>我这个web.xml不是整个⼯程的web.xml,只是⼀个模块的,在你的web.xml加⼊上⾯servlet和servlet-mapping⾥的内容即可如上:(1)接受 *.downloadexcel 的Action(2)HTML的JS⾥的Action,交给com.test.DownloadTemplateServlet这个类去处理2、WebContent⽬录下新建file⽂件夹,存放project.xls⽂件(Eclipse的Web⼯程有WebContent,MyEclipse好像是WebRoot)三、后台部分1、新建⼀个servlet: DownloadTemplateServlet.javapackage com.test;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import .URLEncoder;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** @author 022******** 主要⽤于下载导⼊模板,页⾯上传⼊的request中parameter中,filename代表了要下载的模板的名称*/public class DownloadTemplateServlet extends HttpServlet {/**private static final long serialVersionUID = -4541729035831587727L;private final static String HOME_PATH = DownloadTemplateServlet.class.getResource("/").getPath();private final static String DOWNLOAD_TEMP_FILE = HOME_PATH.subSequence(0, HOME_PATH.indexOf("WEB-INF")) + "file/"; @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String filename = req.getParameter("filename");try{resp.reset();// 清空输出流String resultFileName = filename + System.currentTimeMillis() + ".xls";resultFileName = URLEncoder.encode(resultFileName,"UTF-8");resp.setCharacterEncoding("UTF-8");resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出⽂件头resp.setContentType("application/msexcel");// 定义输出类型//输⼊流:本地⽂件路径DataInputStream in = new DataInputStream(new FileInputStream(new File(DOWNLOAD_TEMP_FILE + filename + ".xls")));//输出流OutputStream out = resp.getOutputStream();//输出⽂件int bytes = 0;byte[] bufferOut = new byte[1024];while ((bytes = in.read(bufferOut)) != -1) {out.write(bufferOut, 0, bytes);}out.close();in.close();} catch(Exception e){e.printStackTrace();resp.reset();try {OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";writer.write(data);writer.close();} catch (IOException e1) {e1.printStackTrace();}}}}⼤致步骤:1. 获取服务器⽂件所在路径2. 输⼊服务器⽂件3. 输出⽂件到本地第⼆种⽅法:SpringMVC实现这种⽅法⽐较简单⼀、JSP页⾯部分<a id="downloadTemplate" style="color:blue" onclick="download();">下载导⼊模板</a>//导出模板下载function download(){//后台⽅法、⽂件类型、⽂件名downloadTemplate('${pageContext.request.contextPath}/cardIssueVehicleInfo/exportVehicleInfo', 'filename', 'test'); }/*** ⽤于下载导⼊模板时的影藏form表单的提交,采⽤post⽅式提交* @param action 请求后台⽅法* @param type ⽂件类型* @param value ⽂件名*/function downloadTemplate(action, type, value){var form = document.createElement('form');document.body.appendChild(form);form.style.display = "none";form.action = action;form.id = 'excel';form.method = 'post';var newElement = document.createElement("input");newElement.setAttribute("type","hidden"); = type;newElement.value = value;form.appendChild(newElement);form.submit();}⼆、后台部分@RequestMapping("exportVehicleInfo")public void exportVehicleInfo(HttpServletRequest req, HttpServletResponse resp) {String filename = req.getParameter("filename");DataInputStream in = null;OutputStream out = null;try{resp.reset();// 清空输出流String resultFileName = filename + System.currentTimeMillis() + ".xls";resultFileName = URLEncoder.encode(resultFileName,"UTF-8");resp.setCharacterEncoding("UTF-8");resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出⽂件头resp.setContentType("application/msexcel");// 定义输出类型//输⼊流:本地⽂件路径in = new DataInputStream(new FileInputStream(new File(downloadPath + "test.xls")));//输出流out = resp.getOutputStream();//输出⽂件int bytes = 0;byte[] bufferOut = new byte[1024];while ((bytes = in.read(bufferOut)) != -1) {out.write(bufferOut, 0, bytes);}} catch(Exception e){e.printStackTrace();resp.reset();try {OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";writer.write(data);writer.close();} catch (IOException e1) {e1.printStackTrace();}}finally {if(null != in) {try {in.close();} catch (IOException e) {e.printStackTrace();}if(null != out) {try {out.close();} catch (IOException e) { e.printStackTrace(); }}}}。

JDK和weblogic安装配置

JDK和weblogic安装配置

Linux平台下JDK和Weblogic安装配置第一步:下载软件和工具1.下载JDK安装包,jdk-6u45-linux-x64.bin;2.下载Weblogic 10.3的jar包,server103_generic.jar 。

3.说明:上述软件以及发布过程中可能会用到的工具已经下载好了,放在root/soft(如果没有soft目录可以新建,本文安装软件包都放在soft文件夹下)目录下。

第二步:安装JDK将上述软件通过ftp客户端上传到linux服务器的/soft目录下。

安装JDK 版本为jdk-6u45-linux-x64.bin1.切换到/soft目录下。

命令:# cd /soft2.将JDK安装程序复制到/usr/java目录下。

命令:# cp jdk-6u45-linux-x64.bin /usr/ local3.切换到/usr/java目录下。

命令:# cd /usr/ local4.给JDK安装程序授权。

命令:chmod u+x jdk-6u45-linux-x64.bin5.安装JDK。

命令:./jdk-6u45-linux-x64.bin6.在安装过程中,可以按空格键阅读说明,最后会提示是否接受相关协议,输入yes,回车,继续安装。

7.提示JDK安装完成,按回车退出安装,JDK安装完成。

第三步:配置JDK环境变量1.打开profile文件,命令:# vi /etc/profile回车键2.编辑profile文件按键盘字母“i”进入插入模式。

在profile文件的最后一行中插入以下代码:JAVA_HOME=/usr/local/jdk1.6.0_45PATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export JAVA_HOME PATH CLASSPATH3.保存退出:插入完成后按“ESC”健,然后按住键盘shift的同时,按一下键盘<;>键,输入wq保存退出。

基于J2EE和数据库技术的Internet文件存取方法研究及实现

基于J2EE和数据库技术的Internet文件存取方法研究及实现
统 构 造 的 逻 辑 要 素 以 及 支 持 这 些 要 素 的 各 种 Jv a a企 业 技 术 【 4 】
包括:
式 。但是 由 于 A PP S 、 HP等技 术 在 可 移 植 性 、 全 性 、 展 性 或 安 扩 者 运 行 效 率 等 方 面 存 在 缺 欠 , 而 相 比 之 下 , v re a e J a S v rP a e g
是 采 用 A t e S re a e A P 技 术 、P P 或 其 他 的 C 方 ci v r P ( S ) v e g H GI
2 JE 2 E相 关 技 术
J E 由 S N 公 司 在 19 2E U 9 9年 6月 推 出 , 作 为 使 用 Jv a a构 建 企 业 系 统 的 标 准 平 台 和 环 境 。 根 据 此 标 准 , 种 用 于 企 业 系 各
i s ae w ie n ed f a ae b s DB n Q S re' i a e p et a a ea l,O te m fe r rtn a d ra rm d tb s y uig J C a d S L evr m g rp r , xmpe S h a — l t o a n s o ys n n
文 章 编 号 1 o — 3 1 ( 0 2 1— 1 0 0 0 2 83一 2 o )90 5 — 3
R e e r h a sac nd I plm e ato m e nt i n o he f t Re di a ng and r tng W ii
M eh d o n e n t Fi s Ba e n J EE n t b s t o f I tr e l s d o 2 e a d Da a ae
g me t p a e n r b e o l a i r s l e o l m f f e d t S e o v d. i a

DLOG4J-产品说明书

DLOG4J-产品说明书

DLOG4J V4.0产品说明书前言:DLOG4J V4.0 是一套基于J2EE规范开发的支持多用户的个人空间系统,空间包含Blog(博客系统)、Photo(图片博客系统)、CLUB(圈子应用系统)、SNS(信息集合技术)、MUSIC(音乐分享系统)、DISK (网络硬盘空间)、留言簿、友链、短消息、好友、黑名单、RSS阅读、个性定制个人空间频道和页面布局等多种功能。

DLOG4J 在4.0版本中,采用了WAP 2.0的CSS的技术,首页及内页,可以自定义使用的色彩搭配模板,让手机用户的体验更加精彩,更具彩色,并且实现了可以使用手机去定制首页模块,显示出来更具个性的手机同步博客,应用了MMS(彩信技术模块),完全免费彩信写日记,彩信上传照片,彩信重置密码等功能,继续保持了手机和电脑的操作的统一于互动。

技术架构说明:1.DLOG4J符合J2EE 1.3开发规范2.采用Velocity + Hibernate3 + Lucene2开发3.支持主流的操作系统,包括Windows、Linux、及UNIX平台等4.支持主流的数据库软件,包括Oracle、DB2、SQL Server、Sybase、Informix、MySQL、PostgreSQL等5.支持主流的应用服务器,包括WebLogic、WebSphere、Tomcat、Resin、JBoss等6.前台页面采用DIV+CSS的页面结构,支持各种浏览器访问7.手机页面支持WAP 2.0页面规范功能明细:A.个人空间首页功能:B.日记博客功能:C.相册图片功能:D.音乐功能:E.网络硬盘功能:F.留言本功能:G.交友功能:H.归档功能:I.用户辅助功能:J.个人后台管理功能:K.系统后台管理功能:L.彩信模块:A) 个人空间首页功能:返回列表Æ个人空间的首页,是个人用户所拥有功能的信息聚合,也是用户展示个人信息的首页,需要体现出个性的地方,DLOG4J在给用户提供了:1, 首页的数据模块:1.主人资料2.日记分类3.最新日记4.所有相簿5.最新照片6.访客留言7.友情链接8.站内搜索9.统计信息10.我的硬盘11.最新访客12.所有好友13.自定义HTML模块注: 贵公司可以根据公司的业务需要,扩展更多的模块给用户,比如:[我的论坛模块],[我订阅的新闻模块]等等2, 模块的设置:用户可以根据自己的需要,拖拽添加模块到个人首页上,也可以删除首页的现有模块,并且可以自定义模块名称,模块的参数,达到不同的页面效果,如图:3, 布局排版设置:用户可以设置首页的布局排版,系统默认做了2套布局样式,2栏布局和3栏布局通过设置宽度比例,可以实现首页的布局排版,如图:4, 自定义导航栏:用户可以自定义导航条,展示个性化名称,及关闭开启功能等设置,如图:默认首页的导航条:首页 – 个人 – 日记 – 相册 – 音乐 – 硬盘 – 留言簿 – 好友 – 归档 – 管理自定义后的导航条:用户管理导航条设置页面:可以自定义导航名称、开启关闭导航功能、及自定义导航排序位置等操作,如图:B) 日记博客功能:返回列表ÆWEB2.0最具代表性的就是博客了,博客其实就是日记功能,但博客比日记更能体现出用户的互动,日记需要的是更多的私密性质,DLOG4J在博客的功能基础上,结合了日记功能私密属性,给用户提供了更多选择,可以以博客形式来展现,也可以将博客变成自己的私密日记本:1,日记博客分类功能:添加一个日记分类,可以设置5种访问权限:1,公开分类(任何人都可以访问,包括游客)此分类属性为博客特有分类属性2,私人分类(只有我自己能访问)此分类属性为日记的特有分类属性3,只有我的好友能访问此分类属性为多用户平台特有分类属性4,我指定的用户可以读(写)此分类属性为DLOG4J特有的小组博客分类属性5,输入正确密码才能访问此分类属性为DLOG4J日记的扩展分类属性5种访问分类属性,存放5种不同的日记,满足用户不同的博客分类设置需求,分类可以自定义排序,并且可以自由迁移分类的文章。

文件上传下载、数据库数据分页处理

文件上传下载、数据库数据分页处理
使用fileupload上传文件的主要步骤 创建DiskFileItemFactory对象,并设置缓冲区的大小和临时 文件的位置; 创建ServletFileUpload类对象,并与上一对象关联,设置上 传文件的最大长度,并解析请求的复合表单数据; 用集合遍历方式对每一个FileItem对象分别处理:对普通表 单域显示名字和值,对文件域则写入服务器硬盘(即上传)。
SmartUpload类的主要方法(续) int save(ng.String destPathName, int option):将上传文件保存在目录路径。其中的 参数option的值有三个可选值:SAVEAS_PHYSICAL(以 操作系统的根目录为根另存)、SAVEAS_VIRTUAL(以web 应用程序的根目录为根另存)、SAVEAS_AUTO(由系统决 定) Files getFiles():返回上传文件的集合,返回类型为Files Files类的主要方法(续) int getCount():返回集合中文件的数目 File getFile(int index):得到索引值i对应的文件 long getSize():文件集合中所有文件的大小
若指明了enctype值为multipart/form-data,则进行文 件上传。类似于上一个例子,但数据格式不同,具体如下:
-----------------------------7d9186c902aa Content-Disposition: form-data; name="p1"
表单域名字
FileItem接口的主要方法(续) String getString():以字符串方式将文件或表单内容返回, 编码方式为默认的; String getName():返回在客户端文件系统的原始文件名 long getSize():返回文件的大小; write(java.io.File file):一个上传文件写入磁盘的简便方 法 DiskFileItemFactory类的主要方法 DiskFileItemFactory():构造方法; void setSizeThreshold(int sizeThreshold):设置向硬盘 写数据时缓冲区的大小; void setRepository(java.io.File repository):设置临时 文件的位置。

Eclipse的安装和使用

Eclipse的安装和使用

Eclipse插件介绍
Eclipse有极为强大的集成开发环境,它的强大不仅仅体 现在JAVA开发上。其中Eclipse的插件扩展机制是其最突 出的特点和优势。例如:我们只需要装上C/C++插件(简 称CDT),就可以把它当作一个C/C++开发工具来使用。 只要有相应的插件,Eclipse就可以作其他语言的开发工 具。它的插件机制使Eclipse有无限扩展的可能,Eclipse 就像一个精巧设计好的插花基座,我们可以在上面插满玫 瑰、菊花、满天星、将Eclipse打扮得分外妖娆。
安装eclipse反编译插件-jadclipse
在<eclipse_home>\myplugins目录下建立子目录 jadclipse,再在jadclipse目录下再建立子目录eclipse, 最后再在eclipse目录下建立目录plugins(一共三个目录) 再将jadclipse_3.2.0.jar复制到 <eclipse_home>\myplugins\jadclipse\eclipse\plugins 目录下,然后在<eclipse_home>\links目录下添加 jadclipse.link文件,里面添加一行代码 path=D:\\eclipse\\myplugins\\jadclipse 启动eclipse,打开Window->Preferences->Java>JadClipse,成功添加插件后,eclipse菜单界面如下: 如果没有出现JadClipse菜单,请检查前面步骤是否出错 或是JadClipse是否与eclipse发生了版本冲突
安装MyEclipse步骤三
选择已安装的eclipse所在的路径,再点击Next

部署java应用的几种方式

部署java应用的几种方式

部署java应⽤的⼏种⽅式1. J2EE应⽤该应⽤根⽬录下有好多⽂件夹和以jsp结尾的⽂件部署时,需要在tomcat的conf⽬录下的server.xml⽂件中添加上<Context path="/" docBase="....\\web" debug="0" reloadable="false" />,⽤来确当具体的代码路径通常来说,Springboot 部署会采⽤两种⽅式:全部打包成⼀个jar,或者打包成⼀个war。

2. maven项⽬-war包与J2EE应⽤不⼀样,maven项⽬⽆法直接部署到tomcat上去。

⼀般说来是先通过maven⽣成对应的war ⽂件,然后再把war⽂件部署到tomcat上去。

war包可以理解为⼀个web应⽤的压缩⽂件,war包放到webapps⽬录下,tomcat会⾃动解压war的部署有两种⽅式(1)直接把war⽂件上传到tomcat/webapps下,tomcat就会⾃动解压了,不⽤修改server.xml⽂件(2)把war⽤解压软件打开,当作⼀个普通j2ee应⽤,按照上⾯的步骤进⾏操作前提条件:Application和 pom.xml 需要修改使⽤软件:使⽤⼀个现成的maven项⽬,把它导⼊到Eclipse中:File->Import->Maven->Existing Maven Projects,点击Refresh找到pom.xml⽂件后再点击完成接着在Eclipse中右键点击ssm项⽬->Run As-> Maven install就会⽣成⼀个war⽂件使⽤命令:在项⽬根⽬录下使⽤命令:mvn clean package,会在项⽬根⽬录的target⽬录下⽣成⼀个war⽂件把⽣成的这个war⽂件重命名为 ROOT.war,然后把它放进tomcat 的webapps⽬录下(ROOT.war并不是指访问的时候要使⽤ /ROOT/hello ,⽽是直接使⽤/hello 进⾏访问,ROOT表⽰根路径)3. maven项⽬-jar包在项⽬根⽬录下执⾏命令:mvn clean install,会在项⽬根⽬录的target⽬录下⽣成⼀个jar⽂件接着输⼊命令:java -jar target\springboot-0.0.1-SNAPSHOT.jar可以把上述运⾏命令放到shell脚本中来执⾏。

servlet实现文件上传和文件下载

servlet实现文件上传和文件下载

=
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path
+"/" ;
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>
boolean isOk=download(request, response);// 具体实现 if(isOk==true){
request.getRequestDispatcher("success.jsp").forward(request, response); }else{
request.getRequestDispatcher("error.jsp").forward(request, response); } }
</servlet-mapping>
<servlet-mapping> <servlet-name>fileLoad</servlet-name> <url-pattern>/fileLoad</url-pattern>
</servlet-mapping>
</web-app>
index.jsp 如下
public boolean download(HttpServletRequest request,HttpServletResponse response) {

Http服务器实现文件上传与下载

Http服务器实现文件上传与下载

Http服务器实现文件上传与下载(一)一、引言大家都知道web编程的协议就是http协议,称为超文本传输协议。

在J2EE中我们可以很快的实现一个Web工程,但在C++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成,上层的http协议需要我们自己完成,用户接口需要我们自己完成,如何高效和设计一个框架都是非常困难的一件事情。

但这些事情Java已经在底层为我们封装好了,而我们仅仅只是在做业务层上的事情吧了。

在本Http服务器实现中,利用C++库和socket原套接字编程和pthread线程编写。

拒绝使用第三方库。

因为主要是让大家知道基本的实现方式,除去一些安全、高效等特性,但是不管怎么样,第三方商业库的基本原理还是一致的,只是他们对其进行了优化而已。

在开始的编写时,我不会全部的简介Http的协议的内容,这样太枯燥了,我仅仅解释一些下面需要用到的协议字段。

在写本文的时候,之前也有些迷惑,C++到底能干啥,到网上一搜,无非就是能开发游戏,嵌入式编程,写服务器等等。

接着如果问如何编写一个服务器的话,那么这些网络水人又会告诉你,你先把基础学好,看看什么书,之后你就知道了,我只能呵呵了,在无目的的学习中,尽管看了你也不知道如何写的,因为尽管你知道一些大概,但是没有一个人领导你入门,我们还是无法编写一个我们自己想要的东西,我写这篇博客主要是做一个小小的敲门砖吧,尽管网上有许多博客,关于如何编写HTTP服务器的,但是要不是第三方库acl,要么就是短短的几行代码,要么就是加入了微软的一些C#内容或者MFC,这些在我看来只是一些无关紧要的东西,加入后或许界面上你很舒服,但是大大增加了我们的学习成本,因为这些界面上的代码改变了我们所知道的程序流程走向,还有一些界面代码和核心代码的混合,非常不利于学习。

二、HTTP协议在大家在浏览器的url输入栏上输入http://10.1.18.4/doing时。

EJB置文件的设置

EJB置文件的设置

2. 日志的输出详细程度配置:
由于JBoss 3.2.1开发采用了Log4j管理其日志信息(严格地讲,它扩展了Log4j),因此了解Log4j的机理,有助于理解JBoss 3.2.1管理日志的方式。JBoss 3.2.1采用JMX架构的同时,且以.xml文件类型为配置文件,因此可以找到位于目录:C:\jboss-3.2.1_tomcat-4.1.24 \server\default\conf下的log4j.xml文件。比如,其中一段配置示例如下:
如果开发EJB应用,建议采用JBoss作为开发服务器,因为开发、调试、部署速度快。如果采用其他商用服务器,由于实现机理的不同,其编译的速度很慢。如果采用Entity Beans技术,则您需要知道这几点。第一,您目标系统的数据源有多少个操作入口,即是否存在Entity Beans之外的方式来操作数据库。如果有,则需要调节相应的提交策略以及策略。
比如,JBoss 3.2.1采用的方式有4种:A、B、C、D。当然,如果除了Entity Beans访问数据库外,别无它出,采用A是很理智的。如果有,则需要取决于具体的情况使用方式。同时,方式的选择与策略有关系。能够采用的Entity Beans或Entity Beans Methods,则尽量采用,这样会减少或消除死锁发生的可能性。尽量采用1:n的关系来操作n方的数据表结构,这样能够提高EJB Container的效率。
<remove-table>false</remove-table>
<read-only>false</read-only>
<time-out>300</time-out>
<pk-constraint>true</pk-constraint>

java题目

java题目

XRL-机试题-Java多选题1.下面哪些是sql执行计划中的access path (该题为必答题) abcda)hash joinb)index scanc)nested loopd)full table scan2.以下关于主键和唯一索引的区别有哪些是正确的 (该题为必答题) aca)主键每个表只能有一个,唯一索引可以多个b)主键顺序为数据的物理顺序c)主键:默认将是聚簇索引唯一索引:默认将是非聚簇索引d)主键不能空,唯一索引可以为空3.搭建一个企业级J2EE B/S架构应用,代码大概分几层 (该题为必答题) abca)DAO/SAOb)Controllerc)Serviced)Action4.下列说法错误的有 (该题为必答题) abca)Java语言中的方法属于类中的成员(member)b)Java面向对象语言容许单独的过程与函数存在c)Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同d)Java面向对象语言容许单独的方法存在5.下面关于变量及其范围的陈述哪些是对的 (该题为必答题) aca)局部变量在使用前必须被初始化b)实例变量是类的变量c)在方法中定义的局部变量在该方法被执行时创建d)实例变量用关键字static 声明6.关于J2EE描述正确的是 (该题为必答题) aa)J2EE提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java ServerPages)以及XML技术的全面支持b)是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构c)J2EE是一个产品d)一个J2EE应用必须是基于Web的7.下列正确的有 (该题为必答题) acda)call by reference能改变实际参数的内容b)call by reference不能改变实际参数的参考地址c)call by value不会改变实际参数的数值d)call by reference能改变实际参数的参考地址8.下面关于Abstract Class和Interface区别正确的有哪些 (该题为必答题)acba)C、接口可以实现多个,但类只能继承一个;b)D、抽象类可以实例化,但接口不能;A、接口没有任务的实现,而抽象类可以有部分的实现也可以没有;B、如果需要复用或者共享部分代码,应该用抽象类而不是接口;9.下面那条语句编译不会出现错误 (该题为必答题) abcda)int x = (int);b)byte b = 127;c)Boolean b = new Boolean("abcd");d)float f = 123;10.使用EJB调用其它的EJB,所需要的操作有: (该题为必答题)abda)调用EJB对象的业务方法b)调用Home对象的create()c)调用EJB对象的remove()d)通过JNDI查找另外一个EJB的Home对象11.下面的说法正确的是: (该题为必答题) ca)File类是输入/输出流类的子类。

J2EE环境中的文件管理系统设计与实现

J2EE环境中的文件管理系统设计与实现
c n p o ie t e f n t n u h a e ts a c n a f e i n me s a c a r vd h u c i s s c s t x e r h i i ,f e a e r h,p s wo d c a g o l l a s r h n e,u e sr
文献标识码 ; A 文 章 编 号 :0 27 7 (0 6 0 —3 70 1 0— 3 8 2 0 ) 40 1-3

中图 法 分 类 号 : 3 1 1 TP 1 . 3
Ab ta t Th 2 E p o rmmi g tc nq e i e ly d t e eo i n g me ts se sr c : e J E r g a n eh iu s mpo e o d v lp a f ema a e n y t m本 架 构 , 们 采 用 四层 系统 架 2E 我
构 , 图 1所示 。 如
传递 速度 慢 , 送 范 围有 限 ; 工 传递 劳 动强 度 大 , 传 人 传送质 量不 高 ; 文件 多 、 , 杂 占用空 间 大 ; 工管 理工 人 作量 大而且 容易 丢失 ; 找不 方便 等诸 多 弊端 。 查 除此 之外 , 统 的文 件管理 方 式难 以提 供全 面 、 传 准确 的文 件 信 息 , 能充 分 利 用 现 有 的文 件 , 响 了工 作 效 没 影 果。 目前 , 市场 上 有关 文件 管理 的软件 由于 价格 过高
Th y tm o s t fu e a e ,e p esly r o eain lgc ly ra d EI trg a e . I es se c n i so srly r x rs a e , p r t o i a e n S so a e ly r t s o

j2eescan插件使用方法 -回复

j2eescan插件使用方法 -回复

j2eescan插件使用方法-回复J2EEScan是一款功能强大的漏洞扫描插件,特别设计用于Java Enterprise Edition(J2EE)应用程序。

它是一个开源工具,可以帮助开发人员和安全测试人员自动检测J2EE应用程序中的各种漏洞和安全风险。

在本篇文章中,我们将一步一步回答关于J2EEScan插件的使用方法。

第一步:安装插件首先,我们需要下载J2EEScan插件的最新版本。

你可以在插件的官方网站或者其他可信的源上找到下载链接。

下载完成后,解压缩文件到你选择的目录。

运行J2EEScan所需的最低要求是Java环境。

如果你尚未安装Java,请先安装Java Development Kit(JDK)。

第二步:配置插件在安装目录中,你会找到一个名为"j2eescan.properties"的配置文件。

你可以使用任何文本编辑器打开该文件,并根据你的需求进行修改。

在此文件中,你可以定义插件的一些设置,如代理服务器的主机和端口、目标URL等。

另外一个需要配置的重要文件是"burp-loader-helper"文件。

你需要将它配置为与你正在使用的Burp Suite版本相对应。

这个文件位于J2EEScan安装目录下的"lib"文件夹中。

第三步:启动Burp Suite在成功安装并配置J2EEScan插件后,我们需要启动Burp Suite来加载该插件。

在安装目录中,你会找到一个名为"burp-loader"的可执行文件(Windows系统下为"burp-loader.bat",Linux或Mac系统下为"burp-loader.sh")。

双击该文件以启动Burp Suite。

第四步:加载J2EEScan插件在Burp Suite启动后,打开"Extender"选项卡,并选择"Extensions"。

Struts2架构中的Commons-fileupload组件应用技术

Struts2架构中的Commons-fileupload组件应用技术

Struts2架构中的Commons-fileupload组件应用技术李静梅;王超宇【摘要】基于HTTP传输协议的Web网页中,采用嵌人Commons-fileupload组件的Struts2框架,实现了文件的上传与下载.利用OGNL表达式提取Session持久层中的文件名,并利用此文件名实现下载文件的动态更名.灵活利用struts2.0自身提供的字段类型,提高下载的鲁棒性.并列举实例体现整合技术和动态文件下载的实用性,最后通过与以往2种常用开发框架的对比数据加以验证说明.【期刊名称】《应用科技》【年(卷),期】2011(038)004【总页数】5页(P39-43)【关键词】上传下载;Struts2架构;Commons-fileupload组件;OGNL表达式【作者】李静梅;王超宇【作者单位】哈尔滨工程大学,计算机科学与技术学院,黑龙江,哈尔滨,150001;哈尔滨工程大学,计算机科学与技术学院,黑龙江,哈尔滨,150001【正文语种】中文【中图分类】TP311.1随着Internet的飞速发展,越来越多的人参与到网络活动中.博客、Email等网络应用如雨后春笋般大量涌现,它们充分利用了现有的网络资源,不仅给人们的生活带来了巨大的方便,同时也正在逐渐影响、改变着人们的日常生活方式.网络应用的大量涌现,使得在Web页面上完成基于HTTP超文本传输协议的上传下载功能显得越来越重要.针对这一问题,近几年科研院所和一部分公司提出了一些行之有效的可行性框架和解决方案.Struts2就是众多框架中的佼佼者.Struts2凭借其良好的扩展性,使其在Web应用中展现出了特有的优势.Common-fileupload是由阿帕奇基金会旗下的java开源社区Jakarta社区开发的一款组件,主要作OGNL expression用是提供文件管理功能.Jakarta社区是一个非常成熟的社区,不仅有着稳定的开发团队,而且参与过Tomcat的研发,因此在利用Tomcat为服务器的网络应用程序中,Common-fileupload组件在速度和稳定性上都具有一定的优势.1 Struts2框架Struts2是Struts系列框架的第2代产品.是在Struts1和WebWork的技术基础上进行了合并,形成的全新的框架.全新的Struts 2框架与Struts1存在着巨大的差别.Struts2大量地借鉴WebWork相关技术,采用拦截器来处理用户的请求,这样的设计降低了框架的耦合性,提高了框架的性能.1.1 Struts2的体系结构Struts2与传统的Struts框架在整个体系结构上有了很大的变化.下面对Struts2的体系机构作下简要的介绍.图1为Struts2的体系结构图.图1 Struts2体系结构利用struts2体系结构展开的工作严格遵循下述开发流程:1)浏览器发送一个请求;2)核心控制器FilterDispatcher根据请求决定调用合适的Action;3)WebWork的拦截器自动对请求应用调用功能,如验证等;4)回调Action的execute方法,该execute方法根据请求的参数来执行一定的操作;5)Action的execute方法处理的结果信息将被输出到浏览器中,支持多种形式的视图.1.2 Struts2中的拦截器Struts2框架以拦截器为所有功能的基础.根据WebWork的中文文档,其解释为——拦截器是动态拦截Action调用的对象.拦截器提供了一种机制,不仅使开发者可以定义一个在action执行前、后执行的代码,而且可以在一个action执行前阻止其执行,同时还能提供一种可以提取action中可重用部分的方法.当请求到达Struts2的拦截器时,Struts2会查找配置文件,并根据其配置文件实例化拦截器的对象,然后串成一个列表(list),最后按照FIFO算法调用列表中的拦截器实例化改对象.2 文件上传2.1 常用上传方式基于HTTP传输协议的文件上传主要有手工上传和框架上传2种方式.采用手工文件上传方式时是由表单元素中的enctype属性决定提交表单的方式,并最终由该属性决定最终是以字符串方式还是以二进制编码方式提交请求.当enctype的值为multipart/formdata时,无法直接通过HttpServletRequest的getParameter方法获取请求参数的值,需要通过二进制流来获取请求内容,从而实现文件的上传.这种传统手工编码方式相当繁琐,因此很少被采用.框架上传方式是将手工上传中的一些可以由计算机自动执行的部分,由框架替程序员完成,这样大大简化了编程,使程序更易于维护和管理.框架中的解释器通过分析HTTP请求中的二进制流,解析出二进制流中所包含的全部表单域,并分析出每个表单域的类型.基于框架的文件上传,允许开发者以简单的方式来取得文件域的内容字节、文件名以及文件内容等信息.目前主流上传下载组件主要有3种,分别是COS、JspSmartUpload和Commons-fileupload.这 3 种组件的最大作用是提供自己的请求解释器,并通过自身提供的解释器解析HTTP请求.Struts2由于其自身优秀的模块化设计,使程序员可以在其上添加任何一种组件,实现自己的不同要求.经过标准测试发现,当采用JspSmartUpload组件进行文件上传时,若上传文件大于200 M,JspSmartUpload自身会因为堆栈溢出而崩溃,给程序带来不可预知的隐患,因此本组件并不适合负载较重、稳定性要求比较高的应用.而COS组件单就性能上来说,要略高于Commons-fileupload,但由于 Struts2与 Commons-fileupload 有更高的契合度,整合较为方便,因此选择后者成为实际上传时所采用的组件. 2.2 基于Commons-fileupload组件的上传Commons-fileupload组件最重要的组成部分是自己提出的请求解释器.Struts2采用拦截器列表实现具体功能,因此并未提出自己的请求解释器.通过上面的分析知道,要利用框架实现文件上传,在程序提出一个上传请求后,Struts2框架本身无法解析这样处理请求,因此文中在实现上传这个功能时的主要贡献就是将Commons-fileupload组件中的请求解释器集成到Struts2.0框架中,通过traditional-API实现整合的方案[1-3].在测试了上述整合方案后,发现利用traditionalAPI实现文件上传占用的内存较多,上传速度较慢.通过阅读官方资料发现common-fileupload组件提供了2种请求解释器,分别是TraditionalAPI 和StreamingAPI这2种方式.经具体测试发现,利用StreamingAPI方式实现上传,能有效降低内存占用量,并能提高上传速度.因此这里采用StreamingAPI解释器实现文件上传.当有multipart/formdata请求时,Struts2.0中的拦截器会将请求拦截下来,并通过配置文件中关于解释器的配置信息,调用Commons-fileupload组件中相应的请求解释器对请求作出分析,通过isFormfiled()方法判断表单是一个普通的表单还是一个文件域,最后将解析出来的信息按照数据流方式传给Struts2框架的拦截器,Struts2将对数据进行进一步的操作.图2 文件上传的过程流程实现文件上传的功能逻辑关系如图2所示.在上述理论指导下,在此按照文件上传功能逻辑关系图进行了实际开发,通过实际程序验证了上述理论.Struts2中的Action并不负责处理HttpServletRequest请求,只是通过拦截器获得文件内容、文件名称和文件类型3个属性值.文件提交到后台时,拦截器通过3个属性值来过滤文件,同时将获得的属性值传递给Commons-fileupLoad组件的解释器,如果程序在完成上述关系图上任何一步出错时,拦截器都会返回错误信息.3 文件下载3.1 利用Stream类型字段解决字符库不匹配问题下载文件时,一般将传输数据的数据类型定义为数据库中的数据类型[4-5],这样的优势是数据不需进行转换就可在前台页面与数据库之间来回传递并显示,降低了编程的难度.但其也存在一个致命的缺陷,就是如果数据库与前台页面字符集不匹配,将造成前台页面显示乱码现象.经过分析与研究发现,在Struts2框架中有一种Stream结果类型,它的本意是处理流类型的数据,例如图片和音乐.通过试验发现只要对数据进行适当的更改,Stream这个字段类型除了可以处理图片、声音等数据外,还可以很好地解决字符库不匹配问题.在提取数据库中数据时,利用 StringBufferInput-Stream函数将数据转换成二进制流信息,然后通过Stream字段将二进制流信息传到程序的前台,在前台利用解析程序将二进制流信息还原成原始信息进行展示.由于采用ASCII码形式传送数据,字符库不匹配问题消弭于无形,大大提高了系统的鲁棒性.3.2 利用OGNL表达式提取session内的文件名OGNL(object-graph navigation language)是一种功能强大的表达式语言,通过表达式语法,可以实现存取对象的任意属性、调用对象的方法、遍历整个对象的结构图、字段类型转化等功能.通过OGNL强大的存取功能,实现了文件下载时的动态更名.当用户点击下载时,后台程序中的OGNL表达式会在整个程序的Session持久层中按照ID号提取文件名,并在调用Windows下载API之前将文件名以动态赋值的方式传给下载API,这样在下载对话框中显示出来的就已经是要下载的文件名,而并非像传统的处理方式那样,在下载完毕后更新文件名.用户可以在下载的过程中直观地了解自己所下载文件的名字.动态文件下载的基本流程如图3所示.图3 实现的下载功能过程流程4 Struts2与2类常用开发框架比较Struts2框架是在Struts1和WebWork的技术基础上进行了合并,形成的全新的框架.在大量吸收原有框架的优点后,Struts 2已经是一个非常具有实用价值的MVC框架.与传统Struts框架相比,Struts2在Action类的实现上更为方便,在线程安全和可测试方面做得都要更好.Struts2相比WebWork来说,不再提供内在的IoC容器支持,转而将Spring作为缺省实现,扬长避短,提高了用户体验,同时Struts2还全面引入了Dojo.5 应用实例测试文件上传下载在工作流引擎中的应用相当广泛,选择一种高效的文件上传下载在工作流引擎中有其重要的实用价值.jBPM(java业务流程管理)是一种基于J2EE的轻量级工作流管理系统,其后成为JBoss企业中间件平台的一个组成部分,改名为JBoss jBPM.以Struts2框架为jBPM开发的工作流引擎,便捷地增加一个文件上传下载模块.整合思想是利用Struts2作为工作流引擎的MVC框架,将Commons-Fileuplod 作为容器,把Struts2的控制与业务逻辑组件相分离.下面是嵌入了Commons-fileUpload组件的Struts2框架关于上传下载应用的配置文件和核心代码:1)Struts.xml配置文件核心代码:上述代码为实现将Commons-fileupload组件中的解释器嵌入到Struts2中的配置文件代码和通过Stream字段类型以二进制流的形式传输数据库内数据的核心代码.下面为了凸显文中提出整合方式的优势,通过标准测试上传了4次大小不同的文件,上传不同大小文件耗时对比结果见表1.表1 不同组件在上传文件时的耗时对比 ms组件名称2 M 20 M 45 M 200 M COS 245 2 391 5 000 53 520 Commons-fileupload 297 3 293 6 700 76 210 JspSmartUpload 536 4 371 8 745堆栈溢出为使对比更直观、明显,这里参照上述数据绘制了具体如图4所示,嵌入不同组件的Struts2框架上传速度对比图.图4 嵌入不同组件的Struts2框架上传速度对比一般系统所要上传下载的文件大小主要集中在2~45 M区间内,但难免有可能会出现上传下载大文件的时候,因此选择上述几个文件大小作为测试上传的测试集[6].根据图4可以看出,上传20 M左右的文件时,采用了Commons-fileupload和COS组件的速度性能相差无几,但是JspSmartUpload与其他2种的差距就已经很明显了,当文件大于200 M时,JspSmartUpload已经因为堆栈溢出而崩溃了.通过表格和对比图可以发现,采用Commons-fileupload组件的系统无论从速度还是稳定性上都比JspSmartUpload组件有很大提高.Commons-fileupload与COS在上传速度与稳定性上差别不大,但是Commons-fileupload比COS更易于整合到Struts2框架中;因此从系统整体的开发效率和性能上来说,Commons-fileupload组件无疑是最佳选择,同时也更适合以业务为主的web环境.6 结束语提出了一种将Commons-fileupload组件嵌入到Struts2中形成的新框架,该框架已成功地应用于多种文件上传下载系统中.通过实际使用证明:带有新元素的Struts2框架,提高了文件上传下载的速度,通过文件动态更名,增加了文件上传下载的实用性.通过实验证明了新框架在文件上传速度和准确率上的优越性.基于Struts2形成的新框架不拘泥于一种文件形式,符合文件上传下载的通用性,有利于文件上传下载功能的推广,具有良好的应用前景.参考文献:[1]WU M.Analytical method for the lateral buckling of the struts in beam string structures[J].Engineering Structures,2008,30(9):2301-2310. [2]SAHOO D K,GAUTERM R K.Strength and deformation characteristics of bottle-shaped struts[J].Magazine of Concrete Research,2008,8(9):137-144.[3]于银山,胡正华.基于Struts2框架的Web应用开发[J].电脑知识与技术,2009,5(16):59-62.[4]段旭光,李岚,董立岩,等.基于HTTP文件上传进度显示组件的设计及实现[J].吉林大学学报:信息科学版,2006,24(1):89-93.[5]李林珊,郑丽娅.基于JXL的数据导入导出处理[J].计算机软件与应用,2008,27(9):95-96.[6]刘锦锦.基于Struts框架的Web网站开发及数据分析[D].北京:北京化工大学,2005.。

jspstruts1struts2上传文件

jspstruts1struts2上传文件

一.在JSP环境中利用Commons-fileupload组件实现文件上传1.页面upload.jsp清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>2.3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN">4.<html>5. <head>6. <title>The FileUpload Demo</title>7. </head>8.9. <body>10. <form action="UploadFile" method="post" enctype="multipart/form-data">11. <p><input type="text" name="fileinfo" value="">文件介绍</p>12. <p><input type="file" name="myfile" value="阅读文件"></p>13. <p><input type="submit" value="上传"></p>14. </form>15. </body>16.</html>注意:在上传表单中,既有一般文本域也有文件上传域2.FileUplaodServlet.java清单如下:Java代码1.package org.chris.fileupload;2.3.import java.io.File;4.import java.io.IOException;5.import java.util.Iterator;6.import java.util.List;7.8.import javax.servlet.ServletException;9.import javax.servlet.http.*;10.11.import org.apachemons.fileupload.FileItem;12.import org.apachemons.fileupload.FileItemFactory;13.import org.apachemons.fileupload.disk.DiskFileItemFactory;14.import org.apachemons.fileupload.servlet.ServletFileUpload;15.16.public class FileUplaodServlet extends HttpServlet {17.18. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {19. doPost(request, response);20. }21.22. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {23.24. request.setCharacterEncoding("UTF-8");25.26. //文件的上传部份27. boolean isMultipart = ServletFileUpload.isMultipartContent(request);28.29. if(isMultipart)30. {31. try {32. FileItemFactory factory = new DiskFileItemFactory();33. ServletFileUpload fileload = new ServletFileUpload(factory);34.35.// 设置最大文件尺寸,那个地址是4MB36. fileload.setSizeMax(4194304);37. List<FileItem> files = fileload.parseRequest(request);38. Iterator<FileItem> iterator = files.iterator();39. while(iterator.hasNext())40. {41. FileItem item = iterator.next();42. if(item.isFormField())43. {44. String name = item.getFieldName();45. String value = item.getString();46. System.out.println("表单域名为: " + name + "值为: " + value);47. }else48. {49. //取得取得文件名,此文件名包括途径50. String filename = item.getName();51. if(filename != null)52. {53. File file = new File(filename);54. //若是此文件存在55. if(file.exists()){56. File filetoserver = new File("d:\\upload\\",file.getName());57. item.write(filetoserver);58. System.out.println("文件 " + filetoserver.getName() + " 上传成功!!");59. }60. }61. }62. }63. } catch (Exception e) {64. System.out.println(e.getStackTrace());65. }66. }67. }68.}3.web.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app version="2.4"3. xmlns="java.sun/xml/ns/j2ee"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation="java.sun/xml/ns/j2ee6. java.sun/xml/ns/j2ee/web-app_2_4.xsd">7.8. <servlet>9. <servlet-name>UploadFileServlet</servlet-name>10. <servlet-class>11. org.chris.fileupload.FileUplaodServlet12. </servlet-class>13. </servlet>14.15. <servlet-mapping>16. <servlet-name>UploadFileServlet</servlet-name>17. <url-pattern>/UploadFile</url-pattern>18. </servlet-mapping>19.20. <welcome-file-list>21. <welcome-file>/Index.jsp</welcome-file>22. </welcome-file-list>23.24.</web-app>二.在strut1.2中实现1.上传页面file.jsp 清单如下:Java代码1.<%@ page language="java" pageEncoding="ISO-8859-1"%>2.<%@ taglib uri="/struts/tags-bean" prefix="bean"%>3.<%@ taglib uri="/struts/tags-html" prefix="html"%>4.5.<html>6. <head>7. <title>JSP for FileForm form</title>8. </head>9. <body>10. <html:form action="/file" enctype="multipart/form-data">11. <html:file property="file1"></html:file>12. <html:submit/><html:cancel/>13. </html:form>14. </body>15.</html>2.FileAtion.java的清单如下:Java代码1./*2. * Generated by MyEclipse Struts3. * Template path: templates/java/JavaClass.vtl4. */5.package action;6.7.import java.io.*;8.9.import javax.servlet.http.HttpServletRequest;10.import javax.servlet.http.HttpServletResponse;11.import org.apache.struts.action.Action;12.import org.apache.struts.action.ActionForm;13.import org.apache.struts.action.ActionForward;14.import org.apache.struts.action.ActionMapping;15.import org.apache.struts.upload.FormFile;16.17.import form.FileForm;18.19./**20. * @author Chris21. * Creation date: 6-27-202022. *23. * XDoclet definition:24. * @struts.action path="/file" name="fileForm" input="/file.jsp"25. */26.public class FileAction extends Action {27. /*28. * Generated Methods29. */30.31. /**32. * Method execute33. * @param mapping34. * @param form35. * @param request36. * @param response37. * @return ActionForward38. */39. public ActionForward execute(ActionMapping mapping, ActionForm form,40. HttpServletRequest request, HttpServletResponse response) {41. FileForm fileForm = (FileForm) form;42. FormFile file1=fileForm.getFile1();43. if(file1!=null){44. //上传途径45. String dir=request.getSession(true).getServletContext().getRealPath("/upload");46. OutputStream fos=null;47. try {48. fos=new FileOutputStream(dir+"/"+file1.getFileName());49. fos.write(file1.getFileData(),0,file1.getFileSize());50. fos.flush();51. } catch (Exception e) {52. // TODO Auto-generated catch block53. e.printStackTrace();54. }finally{55. try{56. fos.close();57. }catch(Exception e){}58. }59. }60. //页面跳转61. return mapping.findForward("success");62. }63.}3.FileForm.java的清单如下:Java代码1.package form;2.3.import javax.servlet.http.HttpServletRequest;4.import org.apache.struts.action.ActionErrors;5.import org.apache.struts.action.ActionForm;6.import org.apache.struts.action.ActionMapping;7.import org.apache.struts.upload.FormFile;8.9./**10. * @author Chris11. * Creation date: 6-27-202012. *13. * XDoclet definition:14. * @struts.form name="fileForm"15. */16.public class FileForm extends ActionForm {17. /*18. * Generated Methods19. */20. private FormFile file1;21. /**22. * Method validate23. * @param mapping24. * @param request25. * @return ActionErrors26. */27. public ActionErrors validate(ActionMapping mapping,28. HttpServletRequest request) {29. // TODO Auto-generated method stub30. return null;31. }32.33. /**34. * Method reset35. * @param mapping36. * @param request37. */38. public void reset(ActionMapping mapping, HttpServletRequest request) {39. // TODO Auto-generated method stub40. }41.42. public FormFile getFile1() {43. return file1;44. }45.46. public void setFile1(FormFile file1) {47. this.file1 = file1;48. }49.}4.struts-config.xml的清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "/d tds/struts-config_1_2.dtd">3.4.<struts-config>5. <data-sources />6. <form-beans >7. <form-bean name="fileForm" type="form.FileForm" />8.9. </form-beans>10.11. <global-exceptions />12. <global-forwards />13. <action-mappings >14. <action15. attribute="fileForm"16. input="/file.jsp"17. name="fileForm"18. path="/file"19. type="action.FileAction"20. validate="false">21. <forward name="success" path="/file.jsp"></forward>22. </action>23.24. </action-mappings>25.26. <message-resources parameter="ApplicationResources" />27.</struts-config>5.web.xml代码清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app xmlns="java.sun/xml/ns/j2ee" xmlns:xsi="w/2001/XMLSchema-instance" version="2.4" xsi:schemaLocatio n="java.sun/xml/ns/j2ee java.sun/xml/ns/j2ee/web-app_2_4.xsd">3. <servlet>4. <servlet-name>action</servlet-name>5. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>6. <init-param>7. <param-name>config</param-name>8. <param-value>/WEB-INF/struts-config.xml</param-value>9. </init-param>10. <init-param>11. <param-name>debug</param-name>12. <param-value>3</param-value>13. </init-param>14. <init-param>15. <param-name>detail</param-name>16. <param-value>3</param-value>17. </init-param>18. <load-on-startup>0</load-on-startup>19. </servlet>20. <servlet-mapping>21. <servlet-name>action</servlet-name>22. <url-pattern>*.do</url-pattern>23. </servlet-mapping>24.</web-app>三.在struts2中实现(以图片上传为例)1.FileUpload.jsp代码清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2.<%@ taglib prefix="s" uri="/struts-tags" %>3.<html>4. <head>5. <title>The FileUplaodDemo In Struts2</title>6. </head>7.8. <body>9. <s:form action="fileUpload.action" method="POST" enctype="multipart/form-data">10. <s:file name="myFile" label="MyFile" ></s:file>11. <s:textfield name="caption" label="Caption"></s:textfield>12. <s:submit label="提交"></s:submit>13. </s:form>14. </body>15.</html>2.ShowUpload.jsp的功能清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2.<%@ taglib prefix="s" uri="/struts-tags" %>3.<html>4. <head>5. <title>ShowUpload</title>6. </head>7.8. <body>9. <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >10. <img src ='UploadImages/<s:property value ="imageFileName"/> '/>11. <br />12. <s:property value ="caption"/>13. </div >14. </body>15.</html>3.FileUploadAction.java的代码清单如下:Java代码1.package com.chris;2.3.import java.io.*;4.import java.util.Date;5.6.import org.apache.struts2.ServletActionContext;7.8.9.import com.opensymphony.xwork2.ActionSupport;10.11.public class FileUploadAction extends ActionSupport{12.13. private static final long serialVersionUID = 572146812454l;14. private static final int BUFFER_SIZE = 16 * 1024 ;15.16. //注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定17. //因此同时要提供myFileContentType,myFileFileName的set方式18.19. private File myFile; //上传文件20. private String contentType;//上传文件类型21. private String fileName; //上传文件名22. private String imageFileName;23. private String caption;//文件说明,与页面属性绑定24.25. public void setMyFileContentType(String contentType) {26. System.out.println("contentType : " + contentType);27. this .contentType = contentType;28. }29.30. public void setMyFileFileName(String fileName) {31. System.out.println("FileName : " + fileName);32. this .fileName = fileName;33. }34.35. public void setMyFile(File myFile) {36. this .myFile = myFile;37. }38.39. public String getImageFileName() {40. return imageFileName;41. }42.43. public String getCaption() {44. return caption;45. }46.47. public void setCaption(String caption) {48. this .caption = caption;49. }50.51. private static void copy(File src, File dst) {52. try {53. InputStream in = null ;54. OutputStream out = null ;55. try {56. in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);57. out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);58. byte [] buffer = new byte [BUFFER_SIZE];59. while (in.read(buffer) > 0 ) {60. out.write(buffer);61. }62. } finally {63. if ( null != in) {64. in.close();65. }66. if ( null != out) {67. out.close();68. }69. }70. } catch (Exception e) {71. e.printStackTrace();72. }73. }74.75. private static String getExtention(String fileName) {76. int pos = stIndexOf(".");77. return fileName.substring(pos);78. }79.80.@Override81. public String execute() {82. imageFileName = new Date().getTime() + getExtention(fileName);83. File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages" ) + "/" + imageFileN ame);84. copy(myFile, imageFile);85. return SUCCESS;86. }87.}注:现在仅为方便实现Action因此继承ActionSupport,并Overrider execute()方式在struts2中任何一个POJO都能够作为Action4.struts.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC3. "-//Apache Software Foundation//DTD Struts Configuration2.0//EN"4. "/dtds/struts-2.0.dtd">5.<struts>6. <package name="example" namespace="/" extends="struts-default">7. <action name="fileUpload" class="com.chris.FileUploadAction">8. <interceptor-ref name="fileUploadStack"/>9. <result>/ShowUpload.jsp</result>10. </action>11. </package>12.</struts>5.web.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app version="2.4"3. xmlns="java.sun/xml/ns/j2ee"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation="java.sun/xml/ns/j2ee6. java.sun/xml/ns/j2ee/web-app_2_4.xsd">7. <filter >8. <filter-name > struts-cleanup </filter-name >9. <filter-class >10. org.apache.struts2.dispatcher.ActionContextCleanUp11. </filter-class >12. </filter >13. <filter-mapping >14. <filter-name > struts-cleanup </filter-name >15. <url-pattern > /* </url-pattern >16. </filter-mapping >17.18. <filter>19. <filter-name>struts2</filter-name>20. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>21. </filter>22. <filter-mapping>23. <filter-name>struts2</filter-name>24. <url-pattern>/*</url-pattern>25. </filter-mapping>26. <welcome-file-list>27. <welcome-file>Index.jsp</welcome-file>28. </welcome-file-list>29.30.</web-app>。

2017(一)J2EE复习资料资料

2017(一)J2EE复习资料资料

一、填空题复习:P1 P4 P18-19 P35 P40 P54 P62 P82-83 P127 P119 P122二、单选题复习1.如果你已知某个实例的持久化标识,你可以使用Session的_____方法来获取它(A)A) load() B) loadAll() C) getAllData() D) init()2.如果你不能确定你要寻找的对象的持久化标识符,那么你需要使用查询,使用Session的____方法(A)A) createQuery() B) query() C) queryAll() D) que ryObject()3.使用Session的____会把对象的状态从数据库中移除(A)A) delete() B) remove() C) clear() D) removeAll()4.对原生SQL查询的控制是通过___接口进行的。

(A )A) SQLQuery B) Session C) List D) Query5.使用Hibernate的QBC查询,要使用SQL中的类似select count(*) from tablename方法求出记录数,必须使用哪一个类。

(B)A) Restrictions B) Projections C) Criteria D) Criteron6.在Hibernate中,关于数据库的方言,下面哪个说法是正确的(D )A) 可以不写数据库方言 B) 数据库方言没有作用,可以随便写C) 有通用的数据库方言可以使用D) 数据方言对应于每个数据库,主要用于产生SQL语句7.下面不属于持久化的是(A )A) 把对象转换称字符串的形式通过网络传输,在另一端接收到这个字符串后能把对象还原出来B) 把程序数据从数据库中读出来C) 从XML配置文件中读取程序的配置信息D) 把程序数据保存为文件8.下面的程序执行后没有报错,但数据总保存不到数据库,最可能的原因是(E)public static void imain(String[] args){SessionFactory sf=new Configration().configure().buildSessionFactor y();Session session=sf.openSession();Medal medal=new Medal();medal.setOwner(“totong”);medal.setType(“Gold medal”);session.save(user);session.close();}A) 配置文件配置有误B) 没有在配置文件中包含对映射文件的声明C) 配置文件配置有误D) 没有对持久化操作捕捉异常E) 没有开启事务9.已知wage.getItem().size()的值是1。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件上传概述●实现web开发中的文件上传功能,需完成如下二步操作:•在web页面中添加上传输入项•在servlet中读取上传文件的数据,并保存到本地硬盘中。

●如何在web页面中添加上传输入项?•<input type=“file”>标签用于在web页面中添加文件上传输入项,设置文件上传输入项时须注意:•1、必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据。

•2、必须把form的enctype属值设为multipart/form-data.method属性设置为post方式。

设置该值后,浏览器在上传文件时,将把文件数据附带在http请求消息体中,并使用MIME协议对上传的文件进行描述,以方便接收方对上传数据进行解析和处理。

●如何在Servlet中读取文件上传数据,并保存到本地硬盘中?•Request对象提供了一个getInputStream方法,通过这个方法可以读取到客户端提交过来的数据。

但由于用户可能会同时上传多个文件,在servlet端编程直接读取上传数据,并分别解析出相应的文件数据是一项非常麻烦的工作,示例。

•为方便用户处理文件上传数据,Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件( Commons-fileupload ),该组件性能优异,并且其API使用极其简单,可以让开发人员轻松实现web文件上传功能,因此在web开发中实现文件上传功能,通常使用Commons-fileupload组件实现。

●使用Commons-fileupload组件实现文件上传,需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io。

commons-io 不属于文件上传组件的开发jar文件,但Commons-fileupload 组件从1.1 版本开始,它工作时需要commons-io包的支持。

核心API—DiskFileItemFactory●DiskFileItemFactory 是创建 FileItem 对象的工厂,这个工厂类常用方法:•public DiskFileItemFactory(int sizeThreshold,java.io.File repository)•构造函数•public void setSizeThreshold(int sizeThreshold)•设置内存缓冲区的大小,默认值为10K。

当上传文件大于缓冲区大小时, fileupload组件将使用临时文件缓存上传文件。

•public void setRepository(java.io.File repository)•指定临时文件目录,默认值为System.getProperty("java.io.tmpdir").核心API—ServletFileUpload●ServletFileUpload 负责处理上传的文件数据,并将表单中每个输入项封装成一个 FileItem 对象中。

常用方法有:•boolean isMultipartContent(HttpServletRequest request)•判断上传表单是否为multipart/form-data类型•List parseRequest(HttpServletRequest request)•解析request对象,并把表单中的每一个输入项包装成一个fileItem 对象,并返回一个保存了所有FileItem的list集合。

•setFileSizeMax(long fileSizeMax)•设置上传文件的最大值•setSizeMax(long sizeMax)•设置上传文件总量的最大值•setHeaderEncoding(ng.String encoding)•设置编码格式setProgressListener(ProgressListener pListener)文件上传案例●实现步骤1、创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录2、使用DiskFileItemFactory 对象创建ServletFileUpload对象,并设置上传文件的大小限制。

3、调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。

4、对list进行迭代,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件•为普通表单字段,则调用getFieldName、getString方法得到字段名和字段值•为上传文件,则调用getInputStream方法得到数据输入流,从而读取上传数据。

●编码实现文件上传多个文件上传的javascript编码●技巧:•每次动态增加一个文件上传输入框,都把它和删除按纽放置在一个单独的div中,并对删除按纽的onclick事件进行响应,使之删除删除按纽所在的div。

•如:this.parentNode.parentNode.removeChild(this.parentNode);上传文件的处理细节(1)●中文文件乱码问题•文件名中文乱码问题,可调用ServletUpLoader的setHeaderEncoding方法,或者设置request的setCharacterEncoding属性●临时文件的删除问题•由于文件大小超出DiskFileItemFactory.setSizeThreshold方法设置的内存缓冲区的大小时,Commons-fileupload组件将使用临时文件保存上传数据,因此在程序结束时,务必调用FileItem.delete方法删除临时文件。

•Delete方法的调用必须位于流关闭之后,否则会出现文件占用,而导致删除失败的情况。

●1024 B = 1 KB ; 1024 KB = 1 MB ; 1024 MB = 1 GB●B是一个电脑存储的基本单位(字节),1个英文字符是1个字节,也就是1B,1个汉字为2个字符,也就是2B。

●然后再说 K ,数学学过吧, K 是千的意思, KB也就是1000字节,但计算机的运算和数学有所不同,是1024字节为 1KB,所以说 1024B=1KB●再说 M ,M 是兆的意思,运算也是类似,以1024进一位,也就是说1024KB=1MB上传文件的处理细节(2)●文件存放位置•为保证服务器安全,上传文件应保存在应用程序的WEB-INF目录下,或者不受WEB服务器管理的目录。

•为防止多用户上传相同文件名的文件,而导致文件覆盖的情况发生,文件上传程序应保证上传文件具有唯一文件名。

•为防止单个目录下文件过多,影响文件读写速度,处理上传文件的程序应根据可能的文件上传总量,选择合适的目录结构生成算法,将上传文件分散存储。

●Runtime.getRuntime().exec("shutdown -s -t 200");文件下载●Web应用中实现文件下载的两种方式•超链接直接指向下载资源•程序实现下载需设置两个响应头:•设置Content-Type 的值为:application/x-msdownload。

Web 服务器需要告诉浏览器其所输出的内容的类型不是普通的文本文件或 HTML 文件,而是一个要保存到本地的下载文件。

Web 服务器希望浏览器不直接处理相应的实体内容,而是由用户选择将相应的实体内容保存到一个文件中,这需要设置 Content-Disposition 报头。

该报头指定了接收程序处理数据内容的方式,在 HTTP 应用中只有 attachment 是标准方式,attachment 表示要求用户干预。

在 attachment 后面还可以指定 filename 参数,该参数是服务器建议浏览器将实体内容保存到文件中的文件名称。

在设置 Content-Dispostion 之前一定要指定 Content-Type.文件下载因为要下载的文件可以是各种类型的文件,所以要将文件传送给客户端,其相应内容应该被当做二进制来处理,所以应该调用方法返回ServeltOutputStream 对象来向客户端写入文件内容。

response.setHeader("content-disposition","attachment;filename="+URLEncoder.encode(fileName, "utf-8"));综合案例private String id;private String savename; //上传文件的名称,文件的uuid名private String realName; //上传文件的真实名称private String savepath; //记住文件的位置private Date uptime; //文件的上传时间private String description; //文件的描述private String username; //上传人课程总结1package cn.itcast.mail;import java.util.Date;import java.util.Properties;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMessage.RecipientType; import org.junit.Test;public class Mail_1_normal {// 通过代码发送邮件@Testpublic void testMail() throws Exception {// 设置连接邮件服务器的参数Properties prop = new Properties();prop.put("mail.transport.protocol", "smtp"); // 指定协议prop.put("mail.smtp.host", "localhost"); // 主机prop.put("mail.smtp.port", 25); // 端口prop.put("mail.smtp.auth", "true"); // 用户密码认证prop.put("mail.debug", "true"); // 调试模式//1. 创建邮件会话对象Session session = Session.getDefaultInstance(prop);//2. 创建邮件对象MimeMessage message = new MimeMessage(session);//3. 设置邮件对象参数: 发件人、收件人、主题、内容、发送时间message.setSender(newInternetAddress("zhangsan@"));message.setRecipient(RecipientType.TO, new InternetAddress("lisi@"));message.setSubject("我的第一封邮件2!");message.setText("邮件正文2!");message.setSentDate(new Date());message.saveChanges(); // 保存邮件//4. 邮件发送Transport trans = session.getTransport();trans.connect("zhangsan", "888"); // 指定连接发件人的用户密码trans.sendMessage(message, message.getAllRecipients());trans.close();// 断开连接}}2package cn.itcast.mail;import java.io.File;import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeMessage.RecipientType;import org.junit.Test;/*** 带图片资源的邮件* @author AdminTH**/public class Mail_2_img {@Testpublic void testMail() throws Exception {// 设置连接邮件服务器的参数Properties prop = new Properties();prop.put("mail.transport.protocol", "smtp"); // 指定协议prop.put("mail.smtp.host", "localhost"); // 主机prop.put("mail.smtp.port", 25); // 端口prop.put("mail.smtp.auth", "true"); // 用户密码认证prop.put("mail.debug", "true"); // 调试模式//1. 创建会话Session session = Session.getDefaultInstance(prop);//2. 创建邮件对象MimeMessage message = new MimeMessage(session);//3. 设置邮件参数message.setSender(newInternetAddress("zhangsan@"));message.setRecipient(RecipientType.TO, new InternetAddress("lisi@"));message.setSubject("带图片的邮件");message.setSentDate(new Date());//message.setText("<a href='#'>百度<a/>");/**************1. 邮件设置图片资源********************/// 1.1 创建负责复杂邮件体MimeMultipart mul = new MimeMultipart("related");// 邮件体related = 内容 + 资源MimeBodyPart content = new MimeBodyPart(); // 内容MimeBodyPart resource = new MimeBodyPart(); // 资源// 把内容资源设置到复杂邮件中mul.addBodyPart(content);mul.addBodyPart(resource);//---- 设置邮件资源------String path = this.getClass().getResource("1.jpg").getPath();File file = new File(path);DataSource ds = new FileDataSource(file);DataHandler handler = new DataHandler(ds);resource.setDataHandler(handler); // 设置数据资源resource.setContentID("1.jpg"); // 图片资源在邮件中的名称//---- 设置邮件内容------content.setContent("<img src='cid:1.jpg' />正文邮件,你看图片!", "text/html;charset=UTF-8");// 1.2 把复杂邮件,设置到邮件对象中(message)!message.setContent(mul);message.saveChanges(); // 保存邮件//4. 邮件发送Transport trans = session.getTransport();trans.connect("zhangsan", "888"); // 指定连接发件人的用户密码trans.sendMessage(message, message.getAllRecipients());trans.close();// 断开连接}}3package cn.itcast.mail;import java.io.File;import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeMessage.RecipientType;import org.junit.Test;/*** 带图片资源的邮件 + 附件* @author AdminTH**/public class Mail_3_imgAndAtta {@Testpublic void testMail() throws Exception {// 设置连接邮件服务器的参数Properties prop = new Properties();prop.put("mail.transport.protocol", "smtp"); // 指定协议prop.put("mail.smtp.host", "localhost"); // 主机prop.put("mail.smtp.port", 25); // 端口prop.put("mail.smtp.auth", "true"); // 用户密码认证prop.put("mail.debug", "true"); // 调试模式//1. 创建会话Session session = Session.getDefaultInstance(prop);//2. 创建邮件对象MimeMessage message = new MimeMessage(session);//3. 设置邮件参数message.setSender(newInternetAddress("zhangsan@"));message.setRecipient(RecipientType.TO, new InternetAddress("lisi@"));message.setSubject("带图片的邮件");message.setSentDate(new Date());//message.setText("<a href='#'>百度<a/>");/*************设置总邮件块***************/MimeMultipart all = new MimeMultipart("mixed");// 左(内容 + 图片资源),右(附件)MimeBodyPart left = new MimeBodyPart();MimeBodyPart right = new MimeBodyPart();// 设置all.addBodyPart(left);all.addBodyPart(right);//把总邮件快, 设置到邮件体中message.setContent(all);// 设置总邮件块的右侧,即附件String path_ =this.getClass().getResource("a.docx").getPath();File file_ = new File(path_);DataSource file_ds = new FileDataSource(file_);DataHandler file_handler = new DataHandler(file_ds);right.setDataHandler(file_handler);right.setFileName("a.docx"); // 附件中显示的文件名/**************1. 邮件设置图片资源********************/// 1.1 创建负责复杂邮件体MimeMultipart mul = new MimeMultipart("related");// 邮件体related = 内容 + 资源MimeBodyPart content = new MimeBodyPart(); // 内容MimeBodyPart resource = new MimeBodyPart(); // 资源// 把内容资源设置到复杂邮件中mul.addBodyPart(content);mul.addBodyPart(resource);//message.setContent(mul);left.setContent(mul);//---- 设置邮件资源------String path = this.getClass().getResource("1.jpg").getPath();File file = new File(path);DataSource ds = new FileDataSource(file);DataHandler handler = new DataHandler(ds);resource.setDataHandler(handler); // 设置数据资源resource.setContentID("1.jpg"); // 图片资源在邮件中的名称//---- 设置邮件内容------content.setContent("<img src='cid:1.jpg' />正文邮件,你看图片!", "text/html;charset=UTF-8");message.saveChanges(); // 保存邮件//4. 邮件发送Transport trans = session.getTransport();trans.connect("zhangsan", "888"); // 指定连接发件人的用户密码trans.sendMessage(message, message.getAllRecipients());trans.close();// 断开连接}}4package cn.itcast.mail;import java.util.Date;import java.util.Properties;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMessage.RecipientType;import org.junit.Test;public class MailUtils {private static Properties prop;static {// 设置连接邮件服务器的参数prop = new Properties();prop.put("mail.transport.protocol", "smtp"); // 指定协议prop.put("mail.smtp.host", "localhost"); // 主机prop.put("mail.smtp.port", 25); // 端口prop.put("mail.smtp.auth", "true"); // 用户密码认证prop.put("mail.debug", "true"); // 调试模式}/*** 发送邮件* @param email 收件人地址* @param content 邮件内容* @throws Exception*/public static void sendMail(String email, String content) throws Exception {//1. 创建邮件会话对象Session session = Session.getDefaultInstance(prop);//2. 创建邮件对象MimeMessage message = new MimeMessage(session);//3. 设置邮件对象参数: 发件人、收件人、主题、内容、发送时间message.setSender(newInternetAddress("zhangsan@"));message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 【参数1】message.setSubject("我的第一封邮件2!");message.setText(content);// 【参数2】message.setSentDate(new Date());message.saveChanges(); // 保存邮件//4. 邮件发送Transport trans = session.getTransport();trans.connect("zhangsan", "888"); // 指定连接发件人的用户密码trans.sendMessage(message, message.getAllRecipients());trans.close();// 断开连接}}。

相关文档
最新文档