




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java项目开发实验教学大纲1、Java程序设计、数据库原理与应用基本知识由学生自己复习;2、Struts2基本知识2.1 Struts2入门(Hello Someone)(1)新建一个Web Project项目Struts2Demo,J2EE规范采用Java EE 5.0其目录结构如下:(2)修改web.xml文件将原来的web.xml文件内容清空,将下载到的Struts-2.1.6-all.zip解压,在app目录下找到struts2-blank-2.1.6.war,解压该文件,将其WEB-INF目录下的web.xml文件内容复制到Strust2Demo的web.xml中,内容如下: Struts Blank struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* index.jsp (3)导入struts2支持所需要的包将struts2-blank-2.1.6.war中的WEB-INF/lib目录下的所有Jar文件,复制到Struts2Demo相应文件夹下。如上图所示,其计9个文件。(4)新建struts.xml文件在Struts2Demo的src文件夹下,新建一个struts.xml文件,并将struts2-blank-2.1.6.war中的WEB-INF/classes目录下的struts.xml文件的内容全部复制到新建的struts.xml文件中,并修改,修改后内容如下: (5)将Struts2Demo布置到Tomcat服务器上,启动服务器,应能正常启动。(6)在Struts2Demo的index.jsp中的标签中加入以下代码: 注意:此的name属性的值必须与HelloAction.java中属性名称一致。(7)编写HelloAction.java文件在项目的src目录下,新建一个com.nanshan.action包,在该包在新建一个HelloAction类文件,继承ActionSupport类,并写入以下代码:package com.nanshan.actioni;import com.opensymphony.xwork2.ActionSupport;public class HelloAction extends ActionSupport private String userName;Overridepublic String execute() throws Exception userName = Hello + userName;return SUCCESS;/getter,setter(8)编写输出页面在项目的Web目录下新建一个welcome.jsp页面,写入以下内容: 注意:此页面的value值与HelloAction.java中的属性名称一致。(9)修改struts.xml文件修改后的内容如下: /welcome.jsp 注意:action的name属性名称必须与请求页面index.jsp中的action属性名一致。(10)运行程序将项目布置到Tomcat并启动服务器,在浏览器地址内输入:http:/localhost:8080/Struts2Demo/index.jsp,并显示如下页面。输入姓名,单击提交按钮,会得到如下结果。注意:该项目不能支持中文。2.2 数据类型转换(1)写一个JSP页面 point为Point类类型,age为整数类型,userName为字符串类型,birthDay为Java日期类型。(2)在src目录下新建一个包:com.nanshan.pojo,在该包在新建一个类Point.java,作为自定义类型,内容如下:package com.nanshan.pojo;public class Point private int x,y;/getter,setter(3)编写Action代码package com.nanshan.action;import java.util.Date;import com.nanshan.pojo.Point;import com.opensymphony.xwork2.ActionSupport;public class ConvertAction extends ActionSupport private Point point;private String userName;private int age;private Date birthDay;Overridepublic String execute() throws Exception return SUCCESS;/getters,setters(4)写一个转换类在src目录下新建一个包:com.nanshan.logic,在其中新建一个类Converter.java,此类要继承StrutsTypeConverter类,重写它的convertFromString()和convertToString()抽象方法,内容如下:package com.nanshan.logic;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.nanshan.pojo.Point;public class Converter extends StrutsTypeConverter Overridepublic Object convertFromString(Map map, String src, Class toType) Point point = new Point();String srcStr = src0.split(,);point.setX(Integer.valueOf(srcStr0);point.setY(Integer.valueOf(srcStr1);return point;Overridepublic String convertToString(Map map, Object src) Point point = (Point)src;StringBuilder sb = new StringBuilder();sb.append(+point.getX()+,+point.getY()+);return sb.toString();(5)指定转换文件 局部类型转换在ConvertAction所在包下,新建一个ConverAperties(内容:类名- perties)文件,内容如下:point=com.nanshan.logic.Converter注意:properties文件的命名规则:Action类名-perties,位置与Action在同一个包下。 全局类型转换在src目录下新建一个perties文件,内容如下:com.nanshan.pojo.Point=com.nanshan.logic.Converter注意:此properties文件命名固定,不能更改,位置也不能更改。注意:局部类型和全局类型转换属性文件只有一个即可,若两个都存在,则先调用局部类型转换文件,再调用全局类型转换文件。(6)配置struts.xml文件增加一个配置项,如下: /convertResult.jsp(7)在项目的Web目录下,新建一个convertResult.jsp,内容如下:(8)运行程序重新布置项目,并重启服务器。输入页面如下:结果输出如下:注意:以下几处属性应该匹配,即必须一致,否则程序不能正确(成功)运行。 JSP页面中的属性必须与所请求的Action中的属性名一致; 中action属性值必须与struts.xml中name属性一致;(9)批量数据类型转换(转换成List)JSP页面代码如下: Converter.java转换类改写如下:public class Converter extends StrutsTypeConverter Overridepublic Object convertFromString(Map map, String src, Class toType)List point = new ArrayList();Point p = null;for (String str : src)p = new Point();String tStr = str.split(,);p.setX(Integer.valueOf(tStr0);p.setY(Integer.valueOf(tStr1);point.add(p);return point;Overridepublic String convertToString(Map map, Object src) List point = (List)src;StringBuilder sb = new StringBuilder();sb.append();for (Point p : point)sb.append(+p.getX()+,+p.getY()+);sb.append();return sb.toString();ConvertAction.java只把point属性由Point类型更改为List类型,并产生相应的gettert和setter方法即可。转换属性配置文件,在此情况下只能用局部类型转换,即ConvertAperties文件,不作任何修改,即可。运行程序:结果如下:2.3 数据校验2.3.1 编写validate()方法在ConvertAction.java中重载父类的validate()方法,内容如下:public void validate() if (null = userName | .equals(userName)this.addFieldError(userName,用户名必须填写);注意:addFieldError()方法中的第1个参数为与请求该Action的JSp中对应的标签名字,即标签的name属性值。如userName,有与之对应。重新布置,并重启服务器,运行结果如下:结果为:注意:由于要校验的ConvertAction中含有自定义类型转换,所以即使在Point,Point1两处文本框输入是正确的前提下,仍提示有错误出现,这是因为Struts2在进行类型转换时,遇到List point;类型,它不知道如何进行转换(此时还没有调用到我们写的Converter.java转换类),因此把它看作一个错误。这说明Struts2是把所有数据校验都完成(即把相关Action中的属性都验证一遍)以后,才会调用我们自定义的转换函数。若在这种情况下(即要验证的Action中含有自定义转换类型,比如我们的point属性),必须在自定义类型转换函数中加入判断语句:public Object convertFromString(Map map, String src, Class toType)if (src=null)return ;/具体转换部分return point;Overridepublic String convertToString(Map map, Object src) if (null=src)return null;/具体转换部分return sb.toString();否则提示以下错误,这是由于struts2.1.6的bug所致!type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Class: ponents.template.TemplateEngineManagerFile: TemplateEngineManager.javaMethod: getTemplateEngineLine: 102 - org/apache/struts2/components/template/TemplateEngineManager.java:102:-1org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:435)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)2.3.2 编写xml验证文件验证文件的命名规则:类名-validation.xml,位置必须与要验证的Action在同一个包下。ConvertAction-validation.xml验证文件内容如下:trueUser name must not be empty620The user name must between $minLength and $maxLength The Birth day must not be empty!2001-01-012010-12-31The birthd day must between $min and $max注意:以上type属性可以出现的值全部定义在com.opensymphony.xwork2.validator.validators包中的default.xml文件中,每个可以出现的中的name属性定义在type类型对应的类中,如在default.xml中有在IntRangeFieldValidator类中定义了两个属性max和min,则在验证文件中可以写: 8018用户年龄必须在$min和$max之间说明:在/xwork/download.action下载xwork-2.1.2,并将类与源代码相关联,可直接看到相应类的源代码。关联方法选择“Attach Source”按钮,按提示操作即可。另外一种验证方式: age/指定要验证的属性名 80/验证器中定义的参数 18 用户年龄必须在$min和$max之间 说明:(1)和不能同时出现。(2)如果同时写validate()方法和xml验证文件,则xml验证文件优先;2.4 拦截器拦截器是struts2的核心,struts2的所有功能都由拦截器实现。1、拦截器的位置和功能如下图所示。2、自定义拦截器必须实现erceptor包下的Interceptor接口package erceptor;import com.opensymphony.xwork2.ActionInvocation;import erceptor.Interceptor;public class MyInterceptor implements Interceptor private String paraName;public void destroy() System.out.println(My interceptor is destroyed!);public void init() System.out.println(My interceptor is initializing.);System.out.println(Our paraName is +paraName);public String intercept(ActionInvocation invocation) throws Exception /The logic executed before actionSystem.out.println(Before action execute);/The interceptor invoked recursivelyString result = invocation.invoke();/The logic executed after actionSystem.out.println(After action execute);return result;/paraName getter, setter使用自定义拦截器在struts.xml文件中作如下定义: Im in the struts.xml file! /convertResult.jsp /dataConvert.jsp 说明:(1)自定义拦截器也可以继承erceptor.AbstractInterceptor抽象类来实现;(2)还可以继承erceptor.MethodFilterInterceptor来实现方法拦截器。(3)当某个Action引用了自定义拦截器以后,必须显示引用struts2默认的拦截器(栈),否则默认的拦截器不起作用,struts2提供的核心功能不能实现。(4)拦截器与拦截器栈作用等同,不同之处是拦截器栈可以包含多个拦截器。2.5 文件上传与下载1、文件上传(1)upload.jsp 注意:中必须指定enctype=” multipart/form-data”。(2)UploadAction.javapackage com.nanshan.action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.List;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport private List photo;private List photoFileName;private List photoFileContentType;Overridepublic String execute() throws Exception for (int i=0;i0)os.write(buffer);is.close();os.close();return SUCCESS;/getters,setters注意:文件上传必须在Action中包含3个属性: 表示文件的属性,在此为photo; 表示文件名的属性,在此为photoFileName;此属性命名规则为“表示文件的属性名”+“FileName”; 表示文件内容类型的属性,在此为:photoFileContentType;此属性命名规则为:“表示文件的属性名”+“FileContentType”;(3)结果输出页面uploadResult.jsp(4)struts.xml配置 4096000 text/plain,application/msword /uploadResult.jsp /upload.jsp注意: fileUpload拦截器参数在struts2-core-2.1.6.jar包中打开struts-default.xml文件,找到fileUpload拦截器的定义,并找到FileUploadInterceptor类,打开观察其源代码。找到protected Long maximumSize; protected Set allowedTypesSet = Collections.emptySet();protected Set allowedExtensionsSet = Collections.emptySet();这3个属性分别控制文件上传的最大限制,单位为字节(B),允许上传的文件类型(MIME类型)和文件上传的扩展名。 文件类型和扩展名可以在TOMCAT_HOMEconfweb.xml文件中找到各种文件类型和扩展名的定义。 doc/扩展名 application/msword/文件类型 必须在配置中显示指定fileUpload拦截器,否则不能实现上传,而且指定该拦截器以后,还必须显示指定struts2的默认拦截器栈defaultStack,否则也不能实现文件上传。(5)运行测试结果文件将上传到TOMCAT_HOMEwebappsStruts2Demoupload目录下。2、文件下载(1)download.jsp文件下载(2)DownloadAction.javapackage com.nanshan.action;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class DownloadAction extends ActionSupport public InputStream getFile()return ServletActionContext.getServletContext().getResourceAsStream(/upload/report.doc);Overridepublic String execute() throws Exception return SUCCESS;注意:实现文件下载的Action必须包含一个返回值为InputStream类型的方法,页面进行下载时,就是以该方法返回的InputStream为输入流进行文件传送的。(3)struts.xml配置 application/msword filename=report.doc,attachment=inline file 说明: 在struts2-core-2.1.6.jar包中找到struts-default.xml文件,找到,并找到对应的实现类StreamResult,打开找到其属性:protected String contentType = text/plain; protected String contentLength; protected String contentDisposition = inline; protected String inputName = inputStream; protected InputStream inputStream; protected int bufferSize = 1024;protected boolean allowCaching = true;其中,常用的有contentType:下载文件的类型;contentDisposition:文件处理方式;inputName:页面中InputStream输入流的名字。其中,contentType若为文本文件类型,可以不加设置;inputName默认值也可采用默认值,但实现下载的Action中返回InputStream类型的方法名称必须为getInputStream(); 若要实现动态文件下载,则必动态指定要下载文件的实际路径。若下载时要指定文件名,还必须同时动态指定配置文件中的中的filename属性。2.6 Struts2的国际化用java下的native2ascii工具将文件转换成中文1、国际化资源文件的命名格式: baseName_language_perties说明:baseName:Java合法的标识符,命名任意language:必须按照Java规范命名;country:必须按照Java规范命名。技巧:可通过IE(或其它浏览器)的“工具”internet选项语言添加弹出的对话框中查找。 2、资源文件的指定(1)在struts.xml中以元素指定:/ globalMessages是baseName技巧:指定资源文件的constants名字定义在org.apache.struts2包下的per
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中思想政治读本课件
- 高三地球在宇宙中课件
- 高三二轮光电效应课件
- 高一物理摩擦力课件
- 《离婚谈判策略解析:三策略离婚调解协议书》
- 物业服务合同中物业服务企业责任与义务界定
- 矿业股份及矿山开采权转让与综合开发管理协议
- 行政合同在数字经济时代的创新与实践
- 离婚双方财产分配与子女抚养责任移交协议模板
- 广告创意迭代代理执行合同
- 【轻质减负】第2课《中国人首次进入自己的空间站》情境化教学课件
- 心电图课件教学
- 浮吊安全知识培训课件
- 2025年边境巡逻机群无人机协同战术应用
- 后勤人员消防知识培训课件
- 中药饮片养护技术
- 八上必背文言文解析(全册)
- 2025年高等教育法学类自考-00859警察组织行为学历年参考题库含答案解析(5套典型考题)
- 2025年大队委选拔笔试题目及答案
- 2025年广东省中学生天文知识竞赛试题(及答案)
- 2025年秋期部编版五年级上册小学语文教学计划+教学进度表
评论
0/150
提交评论