黑马程序员郑州中心编著黑马程序员:三大框架Struts2-day03笔记第1章Struts2文件上传1.1文件上传介绍浏览器端注意事项:表单提交方式method=post表单中必须有一个inputtype=”file”组件表单中必须设置enctype=”multipart/form-data”服务器端Commons-fileupoad.jar包完成。Struts2框架本身支持文件上传问题:struts2框架如何完成文件上传?Struts2框架使用一个fileupload的interceptor来完成文件上传,而我们要使用它在action中我们可以提供类似以下的操作就能完成文件上传操作在execute方法中将文件copy就可以完成文件上传。1.2文件上传快速入门第一步:创建一个upload.jsp页面黑马程序员郑州中心编著第二步:创建action1.3文件上传注意事项文件上传时出现了问题现在的问题是我们的action中没有设置input视图在页面上可以通过黑马程序员郑州中心编著在default.properties中struts.multipart.maxSize=2097152(2m)它是描述文件上传时允许的最大值只需要在struts.xml文件中我们还可以查看FileuploadInterceptor如果我们上传时,允许上传多个文件如何操作?Action如何处理?也可以使用ListFileListString来控制属性在方法中黑马程序员郑州中心编著第2章Struts2框架Ajax开发2.1JSON介绍JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。2.1.1JSON结构json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。1、对象:对象在js中表示为“{}”括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。黑马程序员郑州中心编著2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为[java,javascript,vb,...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。经过对象、数组2种结构就可以组合成复杂的数据结构了。2.1.2Java中json工具介绍2.1.2.1Fastjson简单使用介绍1.导入jar包2.对于User对象3.对于ListUser如果对Date类型进行格式化输出关于属性是否生成在json串中设置黑马程序员郑州中心编著2.1.2.2Jackson简单使用介绍Springmvc它的底层使用的就是jackson1.导入jar包2.使用黑马程序员郑州中心编著处理日期类型过滤属性编码方案实现需要在类上添加一个注解2.2Strtus2框架如果处理ajax请求2.2.1可以使用HttpServletResponse响应数据在struts2框架中可以获取HttpServletResponse对象,就可以通过response来完成将数据(json)响应到浏览器过程黑马程序员郑州中心编著2.2.1.1浏览器端需要使用onblure失去焦点事务来处理文本框,向服务器发送ajax请求(jquery完成)2.2.1.2服务器端数据响应没有问题,处理中文乱码黑马程序员郑州中心编著2.2.1.3在浏览器端处理服务器响应的数据2.2.2使用strtus2框架的json插件来完成ajax操作首先要导入插件包我们怎样使用struts2提供的json插件?1.将我们自己配置文件中的packageextends=”json-default”.2.Action的返回视图resultname=””type=”json”3.因为我们配置了上面两步,那么struts2框架就会将valueStack中的栈顶元素转换成json响应到浏览器黑马程序员郑州中心编著2.2.3案例---查找商品信息2.2.3.1浏览器端操作黑马程序员郑州中心编著2.2.3.2服务器端关于响应的json处理:1.怎样忽略属性黑马程序员郑州中心编著上面这种方案有弊端在org.apache.struts2.json.JSONResult类中有两个属性它们可以设置响应的数据中是否包含或不包含属性2.设置root没有设置root前返回的json结构ps:[{},{}]设置root它的根为ps后的返回的json[{},{}]黑马程序员郑州中心编著2.2.3.3处理服务器响应数据到浏览器展示第3章Struts2注解开发注意:要想使用struts2的注解,我们必须单独在导入一个jar包。它是在strtus2的2.1版本后引入packagename=””namespace=””extedns=”actionname=””class=””methodresultname=””type=””黑马程序员郑州中心编著3.1快速入门@Namespace来代替packagenamespace=””@ParentPackage来代替packageextends=””@Action来描述关于action配置value属性actionname=””使用@Action的results来描述关于结果类型的配置resultresultname=””type=””@Action(results={@Result(name=””,type=””,location=””)})3.2其它注解:@Actions作用:可以通过多个映射来访问同一个action黑马程序员郑州中心编著@Results类似于全局的结果视图@InterceptorRef它是用于处理拦截器的问题:我们在action类中定义了注解,strtus2框架怎样识别它们?原因:我们必须查看插件包中的配置是在action,actions,struts,struts2这样的包下扫描注解3.3案例-使用注解来完成登录与显示商品3.3.1搭建环境3.3.1.1创建库与表DROPDATABASEexam;CREATEDATABASEexam;USEexam;黑马程序员郑州中心编著CREATETABLEUSER(idINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(20),PASSWORDVARCHAR(20));INSERTINTOUSERVALUES(NULL,'tom','123');INSERTINTOUSERVALUES(NULL,'fox','456');CREATETABLEproduct(idINTPRIMARYKEYAUTO_INCREMENT,NAMEVARCHAR(20),COUNTINT,priceDOUBLE);INSERTINTOproductVALUES(NULL,'电视机',100,1200);INSERTINTOproductVALUES(NULL,'洗衣机',800,2200);INSERTINTOproductVALUES(NULL,'空调机',10,3200);3.3.1.2导入jar包Struts2框架的jar包基本jar包插件包黑马程序员郑州中心编著C3p0连接池jar包mysql驱动jarDbutilsJquery的js文件3.3.1.3配置文件Web.xml文件中配置StrutsPrepareAndExecuteFilterSrc/struts.xmlSrc/c3p0.properties3.3.1.4创建package黑马程序员郑州中心编著3.3.2登录操作3.3.2.1login.jsp3.3.2.2UserAction3.3.2.3UserService黑马程序员郑州中心编著3.3.2.4UserDao3.3.2.5product.jsp3.3.3商品显示3.3.3.1product.jsp页面完成部分功能黑马程序员郑州中心编著3.3.3.2Action3.3.3.3Service3.3.3.4dao黑马程序员郑州中心编著3.3.3.5在product.jsp页面上处理服务器响应json并展示3.3.3.6控制用户登录后可以访问商品展示Interceptor步骤1.创建一个类来实现Interceptor接口或继承MethodFilterInterceptor2.在struts.xml文件中声明3.在action的配置中引用我们将所有响应到浏览器的数据都封装到Result类中黑马程序员郑州中心编著正确情况下响应的数据错误情况下数据