ssh技术之struts2.1.6实战课件精解2_第1页
ssh技术之struts2.1.6实战课件精解2_第2页
ssh技术之struts2.1.6实战课件精解2_第3页
ssh技术之struts2.1.6实战课件精解2_第4页
ssh技术之struts2.1.6实战课件精解2_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SHH实战系列教程STRUTS21实战教程课件编写人徐桥第二天5为应用指定多个配置文件6动态方法调用和使用通配符定义ACTION6请求参数接收6采用基本类型接受请求参数(GET/POST)7采用复合类型接受请求参数7案例步骤8第一步8第二步8第三步9第四步11第五步12关于STRUTS216接受中文请求参数乱码问题13类型转换器13自定义局部类型转换器13日期例题中问题的提出例题步骤如下13第一步13第二步13第三步14第四步15第五步15自定义日期转换器16案例步骤如下16第一步16第二步19第三步20对自定义类型转化器的总结20自定义全局类型转换器21访问或添加几个属性REQUEST/SESSION/APPLICATION21案例分析22第一步22第二步23第三步24第四步25第五步26文件上传及下载27文件上传27上传案例,步骤如下27第一步27第二步281)新建过滤器类282)新一个处理单个文件上传的类28第三步29第四步30进行多文件上传33案例步骤33第一步33第二步341)新建过滤器类342)新一个处理多个文件上传的类34第三步36新建STRUTSXML和STRUTSFILESXML36其中STRUTSXML代码如下36其中STRUTSFILESXML代码36第四步37新建两个JSP,INDEXJSP、MESSAGEJSP37INDEXJSP代码如下37MESSAGEJSP37读写ORACLE10G大字段类型数据操作38购物网站信息增加读取大字段类型38经典案例步骤38第一步(创所需建数据库的对象)38第二步(配置JNDI)401修改TOMCAT6的安装目录下的/CONF目录下的SERVERXML文件402覆盖TOMCAT6的安装目录下的/CONF目录下的CONTEXTXML内容413将OJDBC14JAR文件拷贝到TOMCAT6的安装目录下的/LIB目录下414新建工程其工程名为SHOPPING在该工程下新建一个JAVA文件其代码如下415新建一JSP文件,名字为JNDITESTJSP426在把项目导入到TOMCAT下,在浏览器上敲入地址进行测试42第三步创建公共组件、业务层及DAO层代码431新建公共一个日期转换的类432新建读取一个EXCEL文件443新建一个BEAN文件464新建一个DAO接口485新建一个实现DAO接口类48第四步(创建控制层)531)STRUTS启动配置WEBXML和导入包以及创建过滤器532)配置STRUTSXML等配置文件543)创建ACTION类55第五步视图层571导入图片及CSS572新建目录来保存JSP文件,并且新建该目录下的JSP文件57其中PRODUCTMANAGERJSP代码如下57其中ADDPRODUCTJSP代码如下653新建一个公共错误处理页面67利用JXL读取EXCEL文件68JXL介绍68JXL和POI技术比较69读取EXCEL主要方法介绍69上传导入EXCEL及批量操作综合及调用分页存储过程(商品信息表),项目步骤如下69第一步(创建数据库对象)69创建序列69创建表70第二步(配置JNDI)731修改TOMCAT6的安装目录下的/CONF目录下的SERVERXML文件732覆盖TOMCAT6的安装目录下的/CONF目录下的CONTEXTXML内容744创建JNDI访问的方法及类74第三步(创建工程并且创建公用的组件)77创建工程77新建日期处理类77新建读取EXCEL类78新建所需要的表的映射JAVABEAN80商品信息表80商品类型表84第四步持久层DAO层85新建DAO接口85DAO接口(商品资料)85DAO接口(商品类型树)86新建DAO接口的实现类86DAO接口的实现类(商品信息处理实现类)86DAO接口的实现类(商品类型处理实现类)95第五步业务逻辑层98新建业务逻辑层(SERVICE层)接口99新建业务逻辑层实现类99第六步控制层103ACTION代码(导入EXCEL)103ACTION代码(调用存储过程分页)105STRUTSXML配置及属性文件106STRUTSXML106STRUTSEXCELXML107STRUTSGOODSXML107STRUTSPROPERTIES108第七步视图层108主页面INDEXJSP108导入商品信息页面IMPORTEXCELTOGOODSJSP110导入商品信息和商品类型页面IMPORTEXCELINFOJSP113显示分页(GOODSMANGERJSP,改存储过程后的分页)117显示分页(GOODSMANGERLISTJSP,改存储过程后的分页)119处理异常页面ERRORMESSAGEJSP122第八步配置启动项目123文件上传总结123综上所述123文件下载125第二天内容介绍上节回顾为应用指定多个配置文件动态方法调用和使用通配符定义ACTION请求参数接收自定义类型转换器全局类型转换器访问或添加几个属性文件上传购物网站信息增加(图片上传及数据批量)上传图片,读取数据进行ORACLE10G大字段类型数据操作进行多文件上传运用STRUTS进行文件下载期望的目标能熟练掌握多个配置文件技术熟练掌握请求参数的接受熟练文件上传及下载理解全局类型转换理解访问或添加几个属性为应用指定多个配置文件在实际应用中,随着应用规模的增加,系统中的ACTION的数量的的增多,需要把ACTION的配置根据表或者业务逻辑进行分类,显然一个STRUTSXML配置是不可能满足应用的需求(即便有的小项目把所有的配置配置在STRUTSXML一个文件中,可读性和,逻辑性显然不很清晰),所以在STRUTS2中可以将以STRTUSXML配置文件分解成多个配置文件,然后再STRUTSXML文件中包含其他配置文件。下面我们通过元素指定STRUTSXML包含多个配置文件动态方法调用和使用通配符定义ACTION在上节课的时候我们默认的方法都是EXECUTE,但是在现实项目中却基本不用默认的方法,因为实际项目中,方法的名字基本要跟方法想要做什么事相匹配,所以我们在这里详细介绍一下如何在ACTION中调用非EXECUTE方的调用。我们调用时使用的方法名调用指定方法假设访问上面的ACTION的URL路径为/HY_0506/TEST_METHODACTION如是想访问OTHERMETHOD()方法,我们可以这样去调用/HY_0506/TEST_METHODOTHERMETHODACTION请求参数接收前面我们例题中只看到了如何在ACTION类中指定一个值,然后我们把值输出来,显然要做项目必须能够接受前台请求传来的值及给前台请求返回值(SERVLET中的REQUEST及RESPONSE对象折可以负责这样的工作),而现在我们在ACTION类中却没有REQUEST及RESPONSE对象,那我们如何做到得到值和返回值的呢,前面我们看到了,返回值前台标签只要名称跟ACTION类中全局变量名字相同就会去对应的调用该全局变量中的GET方法。采用基本类型接受请求参数(GET/POST)在ACTION类中定义与请求参数同名的属性,STRUTS2便能自动接受请求参数并赋予同名属性。例如请求路径HTTP/LOCALHOST8080/HY0506_STRUTS_DEMO7/TEST/VIEWACTIONID78PUBLICCLASSPRODUCTACTIONPRIVATEINTEGERIDPUBLICVOIDSETIDINTEGERIDTHISIDID/STRUTS2通过反射技术调用与请求参数同名的属性的SETTER方法来获取请求参数值PUBLICVOIDGETIDRETURNID采用复合类型接受请求参数请求路径HTTP/LOCALHOST8080/HY0506_STRUTS_DEMO7/TEST/VIEWACTIONPRODUCTID78PACKAGECOMHYACTIONIMPORTCOMHYBEANPRODUCTPUBLICCLASSPRODUCTACTIONPUBLICPRODUCTPRODUCTPUBLICPRODUCTGETPRODUCTRETURNPRODUCTPUBLICVOIDSETPRODUCTPRODUCTPRODUCTTHISPRODUCTPRODUCTPUBLICSTRINGEXECUTETHROWSEXCEPTIONRETURN“SUCCESS“STRUTS2首先通过反射技术调用PRODUCT的默认构造器创建PRODUCT对象,然后再通过反射技术调用PRODUCT中与请求参数同名的属性的SETTER方法来获取请求参数值。案例步骤第一步新建工程名HY0506_STRUTS_DEMO7,配置好启动STRUTS2的配置(在WEBXML文件下加入过滤器),并且把6个STRUTS6个必要包导入到项目的LIB目录下第二步新建配置文件STRUTSXML其配置如下STRUTSUSERXML配置如下/USERMANGERJSPSTRUTSPRODUCTXML配置如下/PRODUCTJSP第三步新建三个JAVA文件其两个包名分别为COMHYACTION和COMHYBEAN其代码如下PACKAGECOMHYACTIONIMPORTCOMHYBEANPRODUCTPUBLICCLASSPRODUCTACTIONPUBLICPRODUCTPRODUCTPUBLICPRODUCTGETPRODUCTRETURNPRODUCTPUBLICVOIDSETPRODUCTPRODUCTPRODUCTTHISPRODUCTPRODUCTPUBLICSTRINGEXECUTETHROWSEXCEPTIONRETURN“SUCCESS“PACKAGECOMHYACTIONPUBLICCLASSUSERACTIONPRIVATESTRINGUSERNAMEPRIVATESTRINGPWDPRIVATESTRINGSEXPUBLICSTRINGGETUSERNAMERETURNUSERNAMEPUBLICVOIDSETUSERNAMESTRINGUSERNAMETHISUSERNAMEUSERNAMEPUBLICSTRINGGETPWDRETURNPWDPUBLICVOIDSETPWDSTRINGPWDTHISPWDPWDPUBLICSTRINGGETSEXRETURNSEXPUBLICVOIDSETSEXSTRINGSEXTHISSEXSEXPUBLICSTRINGPRINTUSERINFOTHROWSEXCEPTIONSYSTEMOUTPRINT“用户名“USERNAME“密码“PWD“性别“SEX“RETURN“SUCCESS“PACKAGECOMHYBEANPUBLICCLASSPRODUCTPRIVATELONGIDPRIVATESTRINGPNAMEPUBLICLONGGETIDRETURNIDPUBLICVOIDSETIDLONGIDTHISIDIDPUBLICSTRINGGETPNAMERETURNPNAMEPUBLICVOIDSETPNAMESTRINGPNAMETHISPNAMEPNAMEPUBLICSTRINGGETPNUMBERRETURNPNUMBERPUBLICVOIDSETPNUMBERSTRINGPNUMBERTHISPNUMBERPNUMBERPRIVATESTRINGPNUMBER第四步新建两个JSP文件(USERMANGERJSP和PRODUCTJSP)USERMANGERJSP代码如下“MYJSPUSERMANGERJSPSTARTINGPAGEUSERNAMEPWDSEXPRODUCTJSP代码如下“MYJSPPRODUCTJSPSTARTINGPAGEPRODUCTID第五步访问路径1采用基本类型接受请求参数访问路径HTTP/LOCALHOST8888/HY0506_STRUTS_DEMO7/HY_0506/ACTION_TESTUSERNAMEXUQIAO1REQUESTSETCHARACTERENCONDING“UTF8”FILERCHAINDOFILTERREQ,RES类型转换器在STRUTS2中有两种类型转换器,一种是局部类型转化器,一种是全局类型转化器局部类型转化器只对某一个ACTION类型的某种参数类型或多种类型进行转化;全局类型转化器对所有ACTION中的某种参数类型或多种类型进行转化;自定义局部类型转换器当我们解决了基本类型参数的接受和复合类型参数的接受,我们发现还有些特殊参数接受需要格式化,例如日期类型参数的接受。日期例题中问题的提出例题步骤如下第一步新建工程名HY0506_STRUTS_DEMO8,配置好启动STRUTS2的配置(在WEBXML文件下加入过滤器),并且把6个STRUTS6个必要包导入到项目的LIB目录下;第二步新建配置文件STRUTSXML其配置如下STRUTSDATETESTXML配置如下/DATEVALUETESTJSP第三步新建一个BEAN文件其代码如下PACKAGECOMHYACTIONIMPORTJAVAUTILDATEPUBLICCLASSDATETESTACTIONPUBLICDATEGETBIRTHDATERETURNBIRTHDATEPUBLICVOIDSETBIRTHDATEDATEBIRTHDATETHISBIRTHDATEBIRTHDATEPRIVATEDATEBIRTHDATEPUBLICSTRINGADDDATETHROWSEXCEPTIONRETURN“SUCCESS“第四步新建一个DATEVALUETESTJSP文件其代码如下“BIRTHDATEBIRTHDATE第五步在地址栏上输入地址为HTTP/LOCALHOST8888/HY0506_STRUTS_DEMO8/HY_0506/DATE_TESTACTIONBIRTHDATE20100715其效果如下当我们在地址栏上敲入如下地址HTTP/LOCALHOST8888/HY0506_STRUTS_DEMO8/HY_0506/DATE_TESTACTIONBIRTHDATE20100715前台其效果如下后台效果如下为了解决,各种日期格式我们希望自己能定义一个类型转换器自定义日期转换器案例步骤如下第一步在HY0506_STRUTS_DEMO8项目中,新建一个类型转换器类包名为COMHYCONVERTER类名为DATETYPECONVERTER新建如下图所示点击BROWSE并弹出窗口够输入类名为DEFAULTTYPECONVERTER如下图所示选择第一个包下面的类其实第一包下面的类和第二包下面的都可以实现自定义的类型转换器。类的代码如下PACKAGECOMHYCONVERTERIMPORTJAVATEXTPARSEEXCEPTIONIMPORTJAVATEXTSIMPLEDATEFORMATIMPORTJAVAUTILDATEIMPORTJAVAUTILMAPIMPORTCOMOPENSYMPHONYXWORK2CONVERSIONIMPLDEFAULTTYPECONVERTERPUBLICCLASSDATETYPECONVERTEREXTENDSDEFAULTTYPECONVERTEROVERRIDEPUBLICOBJECTCONVERTVALUEMAPCONTEXT,OBJECTVALUE,CLASSTOTYPESIMPLEDATEFORMATDATEFORMATNEWSIMPLEDATEFORMAT“YYYYMMDD“TRYIFTOTYPEDATECLASS/当字符串向DATE类型转换时STRINGPARAMSSTRINGVALUE/REQUESTGETPARAMETERVALUESRETURNDATEFORMATPARSEPARAMS0ELSEIFTOTYPESTRINGCLASS/当DATE转换成字符串时DATEDATEDATEVALUERETURNDATEFORMATFORMATDATECATCHPARSEEXCEPTIONERETURNNULL注MAPCONTEXT为是OGNL表达式的上下问,在讲解OGNL我会详细讲解OBJECTVALUE为传入过来的值CLASSTOTYPE为传入过来的值的类型,也就是需要转化的类型我们对类进行解释首先我们确定好需要转化的类型(TOTYPEDATECLASS)其次,我们发现VALUE仍然是把SERVLET类给封装后好了(STRINGPARAMSSTRINGVALUE/REQUESTGETPARAMETERVALUES),对于SERVLET来说是用REQUESTGETPARAMETERVALUES得到该值的最后我们对症下药,对其类型进行转换,因为是局部的转化器所以只能对一个ACTION类产生作用,所以我们需要配置好转化器。第二步配置好转化器,让转化器在指定的ACTION类中发挥作用在COMHYACTION目录(因为是局部转化器所以必须在COMHYACTION目录)新建一个DATETESTACTIONCONVERSIONPROPERTIES文件(注意文件名必须为DATETESTACTIONCONVERSION,前面是需要转化类型的ACTION类的名字,因为这样我们才可以把转换器注入到ACTION类中去),其配置如下BIRTHDATECOMHYCONVERTERDATETYPECONVERTER需要转化的变量转换器的全路径第三步在浏览中浏览效果在IE中敲入地址为HTTP/LOCALHOST8888/HY0506_STRUTS_DEMO8/HY_0506/DATE_TESTACTIONBIRTHDATE20100715其效果如下对自定义类型转化器的总结PUBLICCLASSDATETYPECONVERTEREXTENDSDEFAULTTYPECONVERTEROVERRIDEPUBLICOBJECTCONVERTVALUEMAPCONTEXT,OBJECTVALUE,CLASSTOTYPESIMPLEDATEFORMATDATEFORMATNEWSIMPLEDATEFORMAT“YYYYMMDD“TRYIFTOTYPEDATECLASS/当字符串向DATE类型转换时STRINGPARAMSSTRINGVALUE/REQUESTGETPARAMETERVALUESRETURNDATEFORMATPARSEPARAMS0ELSEIFTOTYPESTRINGCLASS/当DATE转换成字符串时DATEDATEDATEVALUERETURNDATEFORMATFORMATDATECATCHPARSEEXCEPTIONERETURNNULL将上面的类型转换器注册为局部类型转换器在ACTION类中所有在的包放置ACTIONCLASSNAMECONVERSIONPROPERTIES文件,ACTIONCLASSNAME是ACTION的类名,后面的CONVERSIONPROPERTIES是固定写法,对于本例而言,文件的名称为DATETESTACTIONCONVERSIONPROPERTIES。在PROPERTIES文件中的内容为属性名称类型转化器的全类名对于本例而言,DATETESTACTIONCONVERSIONPROPERTIES文件中的内容为BIRTHDATECOMHYCONVERTERDATETYPECONVERTER自定义全局类型转换器拷贝HY0506_STRUTS_DEMO8项目全部代码,新建项目为HY0506_STRUTS_DEMO9(在拷贝同时注意项目在IE上的访问路径也改写为HY0506_STRUTS_DEMO9,其改写步骤为选中项目右键选中PROPERTIES点击MYECLIPSE点击WEB把WEBCONTEXTROOT该成HY0506_STRUTS_DEMO9),我们来建立全局的类型转换器,我们在自定义局部类型转化器后,我们发现局部的类型转化器不只能对一个ACTION类型进行类型转换。其实我们只需要将上面的局部类型转化器转,修改注册方式,其注册方式为全局类型转换器在SRC下新建一个XWORKCONVERSIONPROPERTIES文件。在PROPERTIES文件中的内容为待转换的类型类型转换器的全类名对于本例而言,XWORKCONVERSIONPROPERTIES文件中的内容为JAVAUTILDATECOMHYCONVERTERDATETYPECONVERTER为了测试准确,我们把在COMHYACTION下的DATETESTACTIONCONVERSIONPROPERTIES文件删除,在IE地址栏上敲入HTTP/LOCALHOST8888/HY0506_STRUTS_DEMO9/HY_0506/DATE_TESTACTIONBIRTHDATE20100715其效果如下访问或添加几个属性REQUEST/SESSION/APPLICATIONSTRUTS2不能像SERVLET那样直接调用了REQUEST/SESSION/APPLICATION属性(其实STRUTS2是基于MVC框架的一个框架,自然底层中去得到值和返回值仍然是REQUEST和RESPONSE在最其工作,只是我们在讲STRUTS2原理的时候我们就知道STRUTS2对其进行封转,并且加入了AOP设计思想,动态代理模式等技术),而是对其进行封装,那我们如何才能得到这几个WEB常用的属性呢PUBLICSTRINGEXECUTEACTIONCONTEXTCTXACTIONCONTEXTGETCONTEXTCTXGETAPPLICATIONPUT“APP“,“应用范围“/往SERVLETCONTEXT里放入APPCTXGETSESSIONPUT“SES“,“SESSION范围“/往SESSION里放入SESCTXPUT“REQ“,“REQUEST范围“/往REQUEST里放入REQCTXPUT“NAMES“,ARRAYSASLIST“老张“,“老黎“,“老方“RETURN“MESSAGE“案例分析第一步新建工程名HY0506_STRUTS_DEMO10,配置好启动STRUTS2的配置(在WEBXML文件下加入过滤器),并且把6个STRUTS6个必要包导入到项目的LIB目录下WEBXML配置如下ENCODEINGFILTERCOMHYFILTERENCODEINGFILTERENCODEINGFILTER/STRUTS2ORGAPACHESTRUTS2DISPATCHERNGFILTERSTRUTSPREPAREANDEXECUTEFILTERSTRUTS2/INDEXJSP第二步新建配置文件STRUTSXML其配置如下新建配置文件STRUTSTESTSERVLETXML其配置如下/SERVLET_TEST_1JSP/DATEVALUETESTJSP第三步新建两个BEAN文件其包名分别为COMHYACTION和COMHYFILTER其代码如下PACKAGECOMHYACTIONIMPORTJAVAUTILARRAYSIMPORTJAVAXSERVLETSERVLETCONTEXTIMPORTJAVAXSERVLETHTTPHTTPSERVLETREQUESTIMPORTORGAPACHESTRUTS2SERVLETACTIONCONTEXTIMPORTCOMOPENSYMPHONYXWORK2ACTIONCONTEXTPUBLICCLASSLOGINSERVLETACTRIONPUBLICSTRINGEXECUTEACTIONCONTEXTCTXACTIONCONTEXTGETCONTEXTCTXGETAPPLICATIONPUT“APP“,“应用范围“/往SERVLETCONTEXT里放入APPCTXGETSESSIONPUT“SES“,“SESSION范围“/往SESSION里放入SESCTXPUT“REQ“,“REQUEST范围“/往REQUEST里放入REQCTXPUT“NAMES“,ARRAYSASLIST“老张“,“老黎“,“老方“RETURN“MESSAGE“PUBLICSTRINGRSATHROWSEXCEPTIONHTTPSERVLETREQUESTREQUESTSERVLETACTIONCONTEXTGETREQUESTSERVLETCONTEXTSERVLETCONTEXTSERVLETACTIONCONTEXTGETSERVLETCONTEXTREQUESTSETATTRIBUTE“REQ“,“请求范围属性“REQUESTGETSESSIONSETATTRIBUTE“SES“,“会话范围属性“SERVLETCONTEXTSETATTRIBUTE“APP“,“应用范围属性“/HTTPSERVLETRESPONSERESPONSESERVLETACTIONCONTEXTGETRESPONSERETURN“MESSAGE“PACKAGECOMHYFILTERIMPORTJAVAIOIOEXCEPTIONIMPORTJAVAXSERVLETFILTERIMPORTJAVAXSERVLETFILTERCHAINIMPORTJAVAXSERVLETFILTERCONFIGIMPORTJAVAXSERVLETSERVLETEXCEPTIONIMPORTJAVAXSERVLETSERVLETREQUESTIMPORTJAVAXSERVLETSERVLETRESPONSEIMPORTJAVAXSERVLETHTTPHTTPSERVLETREQUESTPUBLICCLASSENCODEINGFILTERIMPLEMENTSFILTERPUBLICVOIDDESTROYPUBLICVOIDDOFILTERSERVLETREQUESTREQ,SERVLETRESPONSERES,FILTERCHAINCHAINTHROWSIOEXCEPTION,SERVLETEXCEPTIONHTTPSERVLETREQUESTREQUESTHTTPSERVLETREQUESTREQREQUESTSETCHARACTERENCODING“UTF8“CHAINDOFILTERREQ,RESPUBLICVOIDINITFILTERCONFIGARG0THROWSSERVLETEXCEPTION第四步新建两个JSP文件(INDEXJSP和SERVLET_TEST_1JSP)INDEXJSP代码如下“SERVLET_TEST_1姓名SERVLET_TEST_1JSPSTRUTS2APPLICATIONSCOPEAPPSESSIONSCOPESESREQUESTSCOPEREQNAME第五步在IE浏览上敲入如下地址HTTP/LOCALHOST8888/HY0506_STRUTS_DEMO10文件上传及下载之前我们在JSP中,都是运用第三方组件UPLOADFILE去实现上传下载功能,发现上传的时候REQUEST对象会丢失,现在我们运用STRUTS2很简单、方便、安全性能高、代码量少许就可以实现文件上传及下载了。文件上传上传必须引入COMMONSFILEUPLOAD121JAR和COMMONSIO132JAR包。上传案例,步骤如下第一步新建工程名HY0506_STRUTS_DEMO_11,配置好启动STRUTS2的配置(在WEBXML文件下加入过滤器),并且把上传文件必要的7个包前面STRUTS2必要的6个包COMMONSIO132JAR导入到项目的LIB目录下其中WEBXML文件的配置如下ENCODEINGFILTERCOMHYFILTERENCODEINGFILTERENCODEINGFILTER/STRUTS2ORGAPACHESTRUTS2DISPATCHERNGFILTERSTRUTSPREPAREANDEXECUTEFILTERSTRUTS2/INDEXJSP第二步1)新建过滤器类其代码如下PACKAGECOMHYFILTERIMPORTJAVAIOIOEXCEPTIONIMPORTJAVAXSERVLETFILTERIMPORTJAVAXSERVLETFILTERCHAINIMPORTJAVAXSERVLETFILTERCONFIGIMPORTJAVAXSERVLETSERVLETEXCEPTIONIMPORTJAVAXSERVLETSERVLETREQUESTIMPORTJAVAXSERVLETSERVLETRESPONSEIMPORTJAVAXSERVLETHTTPHTTPSERVLETREQUESTPUBLICCLASSENCODEINGFILTERIMPLEMENTSFILTERPUBLICVOIDDESTROYPUBLICVOIDDOFILTERSERVLETREQUESTREQ,SERVLETRESPONSERES,FILTERCHAINCHAINTHROWSIOEXCEPTION,SERVLETEXCEPTIONHTTPSERVLETREQUESTREQUESTHTTPSERVLETREQUESTREQREQUESTSETCHARACTERENCODING“UTF8“CHAINDOFILTERREQ,RESPUBLICVOIDINITFILTERCONFIGARG0THROWSSERVLETEXCEPTION2)新一个处理单个文件上传的类PACKAGECOMHYACTIONIMPORTJAVAIOFILEIMPORTJAVAXSERVLETSERVLETCONTEXTIMPORTORGAPACHECOMMONSIOFILEUTILSIMPORTORGAPACHESTRUTS2SERVLETACTIONCONTEXTIMPORTCOMOPENSYMPHONYXWORK2ACTIONCONTEXTIMPORTCOMOPENSYMPHONYXWORK2ACTIONSUPPORTPUBLICCLASSUPLOADFILEACTIONEXTENDSACTIONSUPPORTPRIVATEFILEUPLOADIMAGE/文件上传的名称PRIVATESTRINGUPLOADIMAGEFILENAME/文件所需存放的路径PUBLICSTRINGGETUPLOADIMAGEFILENAMERETURNUPLOADIMAGEFILENAMEPUBLICVOIDSETUPLOADIMAGEFILENAMESTRINGUPLOADIMAGEFILENAMETHISUPLOADIMAGEFILENAMEUPLOADIMAGEFILENAMEPUBLICFILEGETUPLOADIMAGERETURNUPLOADIMAGEPUBLICVOIDSETUPLOADIMAGEFILEUPLOADIMAGETHISUPLOADIMAGEUPLOADIMAGEPUBLICSTRINGFILEUPLOADMETHODTRYSERVLETCONTEXTSCSERVLETACTIONCONTEXTGETSERVLETCONTEXTSTRINGIMAGEPATHSCGETREALPATH“/IMAGE“SYSTEMOUTPRINTLNUPLOADIMAGEFILENAMEIFUPLOADIMAGENULLFILESAVEFILENEWFILENEWFILEIMAGEPATH,UPLOADIMAGEFILENAMEIFSAVEFILEGETPARENTFILEEXISTSSAVEFILEGETPARENTFILEMKDIRSFILEUTILSCOPYFILEUPLOADIMAGE,SAVEFILEACTIONCONTEXTGETCONTEXTPUT“MESSAGE“,“上传成功“CATCHEXCEPTIONEEPRINTSTACKTRACERETURN“ERROR“RETURN“SUCCESS“第三步新建STRUTSXML和STRUTSFILEXML其中STRUTSXML代码如下其中STRUTSFILEXML代码/SUCCESSMESSAGEJSP/ERRORMESSAGEJSP第四步新建三个JSP,INDEXJSP、ERRORMESSAGEJSP、SUCCESSMESSAGEJSPINDEXJSP代码如下“MYJSPINDEXJSPSTARTINGPAGE/HY_0506/UPLOAD_FILEACTION“ENCTYPE“MULTIPART/FORMDATA“METHOD“POST“文件ERRORMESSAGEJSP代码如下“MYJSPERRORMESSAGEJSPSTARTINGPAGE出错了SUCCESSMESSAGEJSP代码如下“MYJSPSUCCESSMESSAGEJSPSTARTINGPAGEMESSAGE进行多文件上传案例步骤第一步新建工程名HY0506_STRUTS_DEMO_12,配置好启动STRUTS2的配置(在WEBXML文件下加入过滤器),并且把上传文件必要的7个包前面STRUTS2必要的6个包COMMONSIO132JAR导入到项目的LIB目录下其中WEBXML文件的配置如下ENCODEINGFILTERCOMHYFILTERENCODEINGFILTERENCODEINGFILTER/STRUTS2ORGAPACHESTRUTS2DISPATCHERNGFILTERSTRUTSPREPAREANDEXECUTEFILTERSTRUTS2/INDEXJSP第二步1)新建过滤器类其代码如下PACKAGECOMHYFILTERIMPORTJAVAIOIOEXCEPTIONIMPORTJAVAXSERVLETFILTERIMPORTJAVAXSERVLETFILTERCHAINIMPORTJAVAXSERVLETFILTERCONFIGIMPORTJAVAXSERVLETSERVLETEXCEPTIONIMPORTJAVAXSERVLETSERVLETREQUESTIMPORTJAVAXSERVLETSERVLETRESPONSEIMPORTJAVAXSERVLETHTTPHTTPSERVLETREQUESTPUBLICCLASSENCODEINGFILTERIMPLEMENTSFILTERPUBLICVOIDDESTROYPUBLICVOIDDOFILTERSERVLETREQUESTREQ,SERVLETRESPONSERES,FILTERCHAINCHAINTHROWSIOEXCEPTION,SERVLETEXCEPTIONHTTPSERVLETREQUESTREQUESTHTTPSERVLETREQUESTREQREQUESTSETCHARACTERENCODING“UTF8“CHAINDOFILTERREQ,RESPUBLICVOIDINITFILTERCONFIGARG0THROWSSERVLETEXCEPTION2)新一个处理多个文件上传的类PACKAGECOMHYACTIONIMPORTJAVAIOFILEIMPORTORGAPACHECOMMONSIOFILEUTILS/COMMONSIO132JAR中的APIIMPORTORGAPACHESTRUTS2SERVLETACTIONCONTEXTIMPORTCOMOPENSYMPHONYXWORK2ACTIONCONTEXTPUBLICCLASSFILESUPLOADACTIONPRIVATEFILEIMAGEPRIVATESTRINGIMAGEFILENAMEPUBLICFILEGETIMAGERETURNIMAGEPUBLICVOIDSETIMAGEFILEIMAGETHISIMAGEIMAGEPUBLICSTRINGGETIMAGEFILENAMERETURNIMAGEFILENAMEPUBLICVOIDSETIMAGEFILENAMESTRINGIMAGEFILENAMETHISIMAGEFILENAMEIMAGEFILENAMEPUBLICSTRINGADDUIRETURN“SUCCESS“PUBLICSTRINGEXECUTETHROWSEXCEPTIONSTRINGREALPATHSERVLETACTIONCONTEXTGETSERVLETCONTEXTGETREALPATH“/IMAGES“IFIMAGENULLFILESAVEDIRNEWFILEREALPATHIFSAVEDIREXISTSSAVEDIRMKDIRSFORINTI0I其中STRUTSFILESXML代码/MESSAGEJSP第四步新建两个JSP,INDEXJSP、MESSAGEJSPINDEXJSP代码如下MYJSPEMPLOYEEADDJSPSTARTINGPAGE文件1文件2文件3MESSAGEJSPMYJSPMESSAGEJSPSTARTINGPAGEMESSAGE读写ORACLE10G大字段类型数据操作字符类LONG可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列二进制类LONGRAW可变长二进制数据,最长2G大对象类CLOB用来存储单字节的字符数据NCLOB用来存储多字节的字符数据BLOB用于存储二进制数据BFILE存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。CLOB,NCLOB,BLOB都是内部的LOB类型,最长4G,不像LONG只能有一列的限制我要保存图片、文本文件、WORD文件各自最好用哪种数据类型的呀BLOB最好,LONGRAW也不错。购物网站信息增加读取大字段类型经典案例步骤第一步(创所需建数据库的对象)在ORACLE创建表和序列的SQL语句如下CREATETABLECREATETABLEPRODUCTIDNUMBER,P_NAMEVARCHAR2200,P_PRICENUMBER15,2,P_NUMBERNUMBER,P_DOCVARCHAR22000,PTYPE_IDVARCHAR230,T_PRICENUMBER15,2,P_MOLDEVARCHAR2100,J_DATEDATE,C_MANUFACTURERVARCHAR2200,S_DATEDATE,SPECTALNUMBER2,C_PRICENUMBER15,2,P_NONUMBER,IMGLONGRAWTABLESPACEUSERSPCTFREE10INITRANS1MAXTRANS255STORAGEINITIAL64MINEXTENTS1MAXEXTENTSUNLIMITEDADDCOMMENTSTOTHECOLUMNSCOMMENTONCOLUMNPRODUCTIDIS主键COMMENTONCOLUMNPRODUCTP_NAMEIS商品名称COMMENTONCOLUMNPRODUCTP_PRICEIS商品价格COMMENTONCOLUMNPRODUCTP_NUMBERIS商品库存数量COMMENTONCOLUMNPRODUCTP_DOCIS商品描述COMMENTONCOLUMNPRODUCTPTYPE_IDIS商品类型IDCOMMENTONCOLUMNPRODUCTT_PRICEIS商品特价COMMENTONCOLUMNPRODUCTP_MOLDEIS商品型号COMMENTONCOLUMNPRODUCTJ_DATEIS商品进货日期COMMENTONCOLUMNPRODUCTC_MANUFACTURERIS商品生产厂家COMMENTONCOLUMNPRODUCTS_DATEIS商品生产日期COMMENTONCOLUMNPRODUCTSPECTALIS有无特价(0无,1有)COMMENTONCOLUMNPRODUCTC_PRICEIS商品进货价格COMMENTONCOLUMNPRODUCTP_NOIS商品编号COMMENTONCOLUMNPRODUCTIMGIS图片CREATESEQUENCECREATESEQUENCEPRODUCT_IDMINVALUE1MAXVALUE999999999999999999999999999STARTWITH21INCREMENTBY1CACHE20第二步(配置JNDI)1修改TOMCAT6的安装目录下的/CONF目录下的SERVERXML文件(例如CAPACHETOMCAT6016CONF目录下的SERVERXML文件下的中间的内容详细如下)注棕红色部分是我们需要添加的内容,加粗字体根据自己的需要书写参数2覆盖TOMCAT6的安装目录下的/CONF目录下的CONTEXTXML内容将如下内容覆盖原来文件内容WEBINF/WEBXML注加粗部分对应SERVERXML文件的NAME“HY_ORCALE“3将OJDBC14JAR文件拷贝到TOMCAT6的安装目录下的/LIB目录下4新建工程其工程名为SHOPPING在该工程下新建一个JAVA文件其代码如下PACKAGECOMHYDBIMPORTJAVAIOFILEIMPORTJAVAIOFILEINPUTSTREAMIMPORTJAVAIOFILENOTFOUNDEXCEPTIONIMPORTJAVAIOIOEXCEPTIONIMPORTJAVASQLCONNECTIONIMPORTJAVASQLDRIVERMANAGERIMPORTJAVASQLPREPAREDSTATEMENTIMPORTJAVASQLSQLEXCEPTIONIMPORTJAVASQLSTATEMENTIMPORTJAVAXNAMINGINITIALCONTEXTIMPORTJAVAXSQLDATASOURCEPUBLICCLASSDBMANAGERPUBLICSTATICCONNECTIONGETJNDICONNECTIONCONNECTIONCONNNULLDATASOURCEDSNULLTRYINITIALCONTEXTCTXNEWINITIALCONTEXTDSDATASOURCECTXLOOKUP“JAVACOMP/ENV/HY_ORCALE“CONNDSGETCONNECTIONSTATEMENTSTMTCONNCREATESTATEMENTCATCHEXCEPTIONEEPRINTSTACKTRACERETURNCONN5新建一JSP文件,名字为JNDITESTJSP6在把项目导入到TOMCAT下,在浏览器上敲入地址进行测试在地址栏上敲入HTTP/LOCALHOST8888/SHOPPING/JNDITESTJSP其效果如下第三步创建公共组件、业务层及DAO层代码1新建公共一个日期转换的类其包名为COMHYUTIL,类名为MYDATE其具体代码如下PACKAGECOMHYUTILIMPORTJAVATEXTSIMPLEDATEFORMATIMPORTJAVAUTILDATEPUBLICCLASSMYDATEPUBLICSTATIC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论