Java项目实训大纲.pdf

上传人:ylj18****70940 文档编号:80894776 上传时间:2023-03-23 格式:PDF 页数:29 大小:1.60MB
返回 下载 相关 举报
Java项目实训大纲.pdf_第1页
第1页 / 共29页
Java项目实训大纲.pdf_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《Java项目实训大纲.pdf》由会员分享,可在线阅读,更多相关《Java项目实训大纲.pdf(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、项目开发实训大纲一、性质和目的 本实训是中创班 Java 方向的实践性环节。通过本次实训,可以系统掌握 Java 语言程序设计、数据库原理级应用、Struts2 企业级应用、Spring 和 Hibernate 开源框架的使用,并锻炼学生的实践动手能力。整个实训要求及环境,全面模拟企业实际开发环境以及项目管理规范和流程,使学生在实训中掌握企业开发的实际运作流程,提高学生进入企业的适应能力。二、实训基本要求(1)掌握 Java 编程基本知识的实际运用;(2)掌握 MySQL 数据库的设计与操作,备份与恢复;(3)掌握 Struts2 的数据类型转换、数据校验、国际化、OGNL 表达式、拦截器、文

2、件上传与下载以及 Struts2 集成 Spring 等;(4)掌握 Spring IOC 的配置与运用、Hibernate ORM 的配置与运用;将上述知识运用到具体项目中,以学生熟悉的“学生选课系统”为实训项目,由学生自己理解需求,业务逻辑,完成系统的需求分析、概要设计、详细设计、编码、测试等工作,并提交需求分析报告、系统可运行代码以及数据库设计备份文件(.sql 文件)并由此评定成绩。三、实训内容与学时分配(90 学时)1、Java 程序设计、数据库原理与应用基本知识由学生自己复习;2、Struts2 基本知识 2.1 Struts2 入门(Hello Someone)(1)新建一个 W

3、eb 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.StrutsPrepareA

4、ndExecuteFilter 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、文件中,并修改,修改后内容如下:(5)将 Struts2Demo 布置到 Tomcat 服务器上,启动服务器,应能正常启动。(6)在 Struts2Demo 的 index.jsp 中的标签中加入以下代码:注意:此的 name 属性的值必须与 HelloAction.java 中属性名称一致。(7)编写 HelloAction.java 文件 在项目的 src 目录下,新建一个 com.nanshan.action 包,在该包在新建一个 HelloAction 类文件,继承 ActionSupport 类,并写入以下代码:package com.nanshan.actioni;import c

6、om.opensymphony.xwork2.ActionSupport;public class HelloAction extends ActionSupport private String userName;Override public String execute()throws Exception userName=Hello +userName;return SUCCESS;/getter,setter (8)编写输出页面 在项目的 Web 目录下新建一个 welcome.jsp 页面,写入以下内容:注意:此页面的 value 值与 HelloAction.java 中的属性名

7、称一致。(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

8、 为字符串类型,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.A

9、ctionSupport;public class ConvertAction extends ActionSupport private Point point;private String userName;private int age;private Date birthDay;Override public String execute()throws Exception return SUCCESS;/getters,setters (4)写一个转换类 在 src 目录下新建一个包:com.nanshan.logic,在其中新建一个类 Converter.java,此类要继承 St

10、rutsTypeConverter 类,重写它的 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 Override public Object convertFromString(Map map

11、,String src,Class toType)Point point=new Point();String srcStr=src0.split(,);point.setX(Integer.valueOf(srcStr0);point.setY(Integer.valueOf(srcStr1);return point;Override public String convertToString(Map map,Object src)Point point=(Point)src;StringBuilder sb=new StringBuilder();sb.append(+point.get

12、X()+,+point.getY()+);return sb.toString();(5)指定转换文件 局部类型转换 在 ConvertAction 所在包下,新建一个 ConverAction-conversion.properties(内容:类名-conversion.properties)文件,内容如下:point=com.nanshan.logic.Converter 注意:properties 文件的命名规则:Action 类名-conversion.properties,位置与 Action 在同一个包下。全局类型转换 在 src 目录下新建一个 xwork-conversion.

13、properties 文件,内容如下:com.nanshan.pojo.Point=com.nanshan.logic.Converter 注意:此 properties 文件命名固定,不能更改,位置也不能更改。注意:局部类型和全局类型转换属性文件只有一个即可,若两个都存在,则先调用局部类型转换文件,再调用全局类型转换文件。(6)配置 struts.xml 文件 增加一个配置项,如下:/convertResult.jsp (7)在项目的 Web 目录下,新建一个 convertResult.jsp,内容如下:(8)运行程序 重新布置项目,并重启服务器。输入页面如下:结果输出如下:注意:以下几处

14、属性应该匹配,即必须一致,否则程序不能正确(成功)运行。JSP 页面中的属性必须与所请求的 Action 中的属性名一致;中 action 属性值必须与 struts.xml 中name 属性一致;(9)批量数据类型转换(转换成 List)JSP 页面代码如下:Converter.java 转换类改写如下:public class Converter extends StrutsTypeConverter Override public Object convertFromString(Map map,String src,Class toType)List point=new ArrayLi

15、st();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;Override public String convertToString(Map map,Object src)List point=(List)src;StringBuilder sb=new StringBuilder();sb.append();for(Point

16、p:point)sb.append(+p.getX()+,+p.getY()+);sb.append();return sb.toString();ConvertAction.java只把 point 属性由 Point 类型更改为 List类型,并产生相应的gettert 和 setter 方法即可。转 换 属 性 配 置 文 件,在 此 情 况 下 只 能 用 局 部 类 型 转 换,即ConvertAction-conversion.properties 文件,不作任何修改,即可。运行程序:结果如下:2.3 数据校验 2.3.1 编写 validate()方法 在 ConvertActi

17、on.java 中重载父类的 validate()方法,内容如下:public void validate()if(null=userName|.equals(userName)this.addFieldError(userName,用户名必须填写);注意:addFieldError()方法中的第 1 个参数为与请求该 Action 的 JSp 中对应的标签名字,即标签的 name 属性值。如 userName,有与之对应。重新布置,并重启服务器,运行结果如下:结果为:注意:由于要校验的 ConvertAction 中含有自定义类型转换,所以即使在 Point,Point1 两处文本框输入是正

18、确的前提下,仍提示有错误出现,这是因为 Struts2 在进行类型转换时,遇到List point;类型,它不知道如何进行转换(此时还没有调用到我们写的 Converter.java转换类),因此把它看作一个错误。这说明 Struts2 是把所有数据校验都完成(即把相关 Action中的属性都验证一遍)以后,才会调用我们自定义的转换函数。若在这种情况下(即要验证的 Action 中含有自定义转换类型,比如我们的 point 属性),必须在自定义类型转换函数中加入判断语句:public Object convertFromString(Map map,String src,Class toTyp

19、e)if(src=null)return;/具体转换部分 return point;Override public String convertToString(Map map,Object src)if(null=src)return null;/具体转换部分 return sb.toString();否则提示以下错误,这是由于 struts2.1.6 的 bug 所致!type Exception report message description The server encountered an internal error()that prevented it from fulfi

20、lling this request.exception org.apache.jasper.JasperException:Class:ponents.template.TemplateEngineManager File:TemplateEngineManager.java Method:getTemplateEngine Line:102-org/apache/struts2/components/template/TemplateEngineManager.java:102:-1 org.apache.jasper.servlet.JspServletWrapper.handleJsp

21、Exception(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 验证文件内容如下:true

22、 User name must not be empty 6 20 The user name must between$minLength and$maxLength The Birth day must not be empty!2001-01-01 2010-12-31 The birthd day must between$min and$max 注 意:以 上 type属 性 可 以 出 现 的 值 全 部 定 义 在com.opensymphony.xwork2.validator.validators 包中的 default.xml 文件中,每个 可以出现的中的 name 属性定

23、义在 type类型对应的类中,如在 default.xml 中有 在 IntRangeFieldValidator 类中定义了两个属性 max 和 min,则在验证文件中可以写:80 18 用户年龄必须在$min和$max之间 说明:在 http:/ 下载 xwork-2.1.2,并将类与源代码相关联,可直接看到相应类的源代码。关联方法 选择“Attach Source”按钮,按提示操作即可。另外一种验证方式:age/指定要验证的属性名 80/验证器中定义的参数 18 用户年龄必须在$min和$max之间 说明:(1)和不能同时出现。(2)如果同时写 validate()方法和 xml 验证文

24、件,则 xml 验证文件优先;2.4 拦截器 拦截器是 struts2 的核心,struts2 的所有功能都由拦截器实现。1、拦截器的位置和功能如下图所示。2、自定义拦截器 必须实现 com.opensymphony.xwork2.interceptor 包下的 Interceptor 接口 package com.nanshan.interceptor;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;public class MyInt

25、erceptor 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

26、Exception /The logic executed before action System.out.println(Before action execute);/The interceptor invoked recursively String result=invocation.invoke();/The logic executed after action System.out.println(After action execute);return result;/paraName getter,setter 使用自定义拦截器 在 struts.xml 文件中作如下定义:

27、Im in the struts.xml file!/convertResult.jsp /dataConvert.jsp 说明:(1)自定义拦截器也可以继承 com.opensymphony.xwork2.interceptor.AbstractInterceptor抽象类来实现;(2)还可以继承 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor 来实现方法拦截器。(3)当某个 Action 引用了自定义拦截器以后,必须显示引用 struts2 默认的拦截器(栈),否则默认的拦截器不起作用,struts2 提供的核心功能不

28、能实现。(4)拦截器与拦截器栈作用等同,不同之处是拦截器栈可以包含多个拦截器。2.5 文件上传与下载 1、文件上传(1)upload.jsp 注意:中必须指定 enctype=”multipart/form-data”。(2)UploadAction.java package com.nanshan.action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;impo

29、rt 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;Override public String execute()throws Exception for(int i=0;i

30、0)os.write(buffer);is.close();os.close();return SUCCESS;/getters,setters 注意:文件上传必须在 Action 中包含 3 个属性:表示文件的属性,在此为 photo;表示文件名的属性,在此为 photoFileName;此属性命名规则为“表示文件的属性名”+“FileName”;表示文件内容类型的属性,在此为:photoFileContentType;此属性命名规则为:“表示文件的属性名”+“FileContentType”;(3)结果输出页面 uploadResult.jsp (4)struts.xml 配置 40960

31、00 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 allowedExt

32、ensionsSet=Collections.emptySet();这 3 个属性分别控制文件上传的最大限制,单位为字节(B),允许上传的文件类型(MIME 类型)和文件上传的扩展名。文件类型和扩展名 可以在 TOMCAT_HOMEconfweb.xml 文件中找到各种文件类型和扩展名的定义。doc/扩展名 application/msword/文件类型 必须在配置中显示指定 fileUpload 拦截器,否则不能实现上传,而且指定该拦截器以后,还必须显示指定 struts2 的默认拦截器栈 defaultStack,否则也不能实现文件上传。(5)运行测试结果 文件将上传到 TOMCAT_HO

33、MEwebappsStruts2Demoupload 目录下。2、文件下载(1)download.jsp 文件下载(2)DownloadAction.java package com.nanshan.action;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class DownloadAction extends ActionSupport public InputStream getFi

34、le()return ServletActionContext.getServletContext().getResourceAsStream(/upload/report.doc);Override public String execute()throws Exception return SUCCESS;注意:实现文件下载的 Action 必须包含一个返回值为 InputStream 类型的方法,页面进行下载时,就是以该方法返回的 InputStream 为输入流进行文件传送的。(3)struts.xml 配置 application/msword filename=report.doc

35、,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;

36、protected int bufferSize=1024;protected boolean allowCaching=true;其中,常用的有 contentType:下载文件的类型;contentDisposition:文件处理方式;inputName:页面中 InputStream 输入流的名字。其中,contentType 若为文本文件类型,可以不加设置;inputName 默认值也可采用默认值,但实现下载的 Action 中返回 InputStream 类型的方法名称必须为 getInputStream();若要实现动态文件下载,则必动态指定要下载文件的实际路径。若下载时要指定文件

37、名,还必须同时动态指定配置文件中的中的 filename属性。2.6 Struts2 的国际化 用 java 下的 native2ascii 工具将文件转换成中文 1、国际化资源文件的命名 格式:baseName_language_country.properties 说明:baseName:Java 合法的标识符,命名任意 language:必须按照 Java 规范命名;country:必须按照 Java 规范命名。技巧:可通过 IE(或其它浏览器)的“工具”internet 选项语言添加弹出的对话框中查找。2、资源文件的指定(1)在 struts.xml 中以元素指定:/globalMes

38、sages 是 baseName 技巧:指定资源文件的 constants 名字定义在 org.apache.struts2 包下的 default.properties 文件中,记不住可以直接查找。(2)在 struts.properties 中直接覆盖 struts.custom.i18n.resources 的值:struts.custom.i18n.resources=globalMessages 注意:此处指定的是资源文件的 baseName。3、中文资源文件生成方法 由于含有中文字符的资源文件无法保存,只能将其转换成为 Unicode 字符编码,转换方法如下:首先写一个包含资源文件

39、内容的 txt 文件,然后打开控制台窗口,定位到该文本文件所在的目录,输入以下命令:native2ascii globalMessage.txt globalMessages.properties 即可完成中文资源文件的转换。4、资源文件的位置 应该在项目编译后的 classes 目录下,也就是说,应该在项目的 src 目录下。5、Struts2 国际化的实现(1)建立主资源文件 globalMessages.properties,内容如下:Point=Point Point1=Point1 UserName=User Name Birthday=Birthday Age=Age Submit

40、=Submit userName.error=The user name must not be empty age.error=The age must between$min and$max(2)建立中文中国资源文件 新建一个 globalMessages.txt 文件,内容如下:Point=坐标 Point1=坐标 1 UserName=用户名 Birthday=出生日期 Age=年龄 Submit=提交 userName.error=用户名不能为空 age.error=用户年龄必须在$min和$max之间 调用以下命令:native2ascii globalMessages.txt g

41、lobalMessages_zh_CN.properties 将生成的 globalMessages_zh_CN.properties 文件拷贝到项目的 src 目录下。(3)页面国际化/记住/记住 (4)validate()验证国际化 this.addFieldError(userName,this.getText(userName.error);(5)xml 验证国际化 age 80 18 (6)国际化的作用范围 全局国际化、包级别国际化和类级别的,3 种资源文件的写法:全局资源文件名命名法见上面;包级别资源文件命名法:package_zh_CN.properties,其中 package

42、 固定不变,表示包级别的资源文件,后面的 language 和 country 可根据需要变化。类级别资源文件命名法:类名_language_country.properties;2.7 Struts2 高级主题/获得Request对象 HttpServletRequest request=ServletActionContext.getRequest();/获得Response对象 HttpServletResponse response=ServletActionContext.getResponse();/获得Session对象,并把用户名保存在Session对象中 Map sessio

43、n=ActionContext.getContext().getSession();session.put(userName,userName);2.8 OGNL 表达式(1)ognlExe.jsp 访问Action上下文 request.userName:session.userName:列出所有Users 序号姓名密码年龄 input type=checkbox value=/列出年龄小于40的Users s:iterator value=users.?#this.age 年龄是:列出姓名为wangzhen的年龄 wangzhen的年龄是:Map构造 键名cjh是:注意:一定要掌握本 JS

44、P 页面中所写的 OGNL 表达式的使用,它是以后项目操作的基础。(2)OgnlExeAction.java package com.nanshan.action;import java.util.LinkedList;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.nanshan.pojo.User;import co

45、m.opensymphony.xwork2.ActionSupport;public class OgnlExeAction extends ActionSupport private HttpServletRequest request;private HttpSession session;private List users;public String execute()throws Exception request=ServletActionContext.getRequest();session=request.getSession();request.setAttribute(u

46、serName,Cjh from request);session.setAttribute(userName,Cjh from session);users=new LinkedList();users.add(new User(cjh,123456,20);users.add(new User(jgy,789456,38);users.add(new User(wangzhen,333333,40);return SUCCESS;/getters and setters (3)struts.xml /ognlExe.jsp (4)测试 在浏览器地址栏内键入:http:/localhost:

47、8080/Struts2Demo/ognlExe.action 回车测试。2.9 未涉及的 Struts2 知识 1、模型驱动、阻止表单重复提交、动态方法调用、通配符、异常处理机制。请参阅 Apache官方网站:http:/struts.apache.org。3、Struts2 集成 Spring 与 Hibernate 3.1 SSH 所用的版本 由于该框架使用的版本对于集成有很大影响,该集成过程只针对 Struts2.1.6、Spring2.0和 Hibernate3.2。3.2 集成过程 3.2.1 集成步骤(1)首先加入 Hibernate 支持 图 1 加入 Hibernate(3.

48、2)支持第一步 其中,Enable Hibernate Annotations Support 选项为本人自己添加。第二步,采用默认值 第三步,由于不需要 Hibernate 管理数据库连接,而是用 Spring 进行管理,所以不选“Specify database connection details?”选项。第四步,由于采用 Spring 管理 SessionFactory 类,所在也不选“Create SessionFactory class?”选项。(2)加入 Spring 支持 第一步,加入 Spring 配置 第二步,注意 applicationContext.xml 文件默认位置

49、在 WEB-INF 目录下,可以修改这个位置,但必须在 WEB-INF 目录下,可以为 WEB-INF/config 下等。第三步,注意:此步截图为教程所截,本人配置时,将“Enable Hibernate Annotations support(Hibernate 3.2 only)”也选中(此项选中,是以“Create Spring SessionFactory that references”为前提的)。(3)加入 struts2 支持 拷贝所需要的 JAR 包到项目的 WebWEB-INFlib 目录下。这些 JAR 包可从下载到的 Struts2压缩包的 apps 目录下的 stru

50、ts2-blank-2.1.6.war 包中得到。此图为 struts2 2.1.6 版本的 Blank 应用程序的 JAR 包。(4)关键配置文件 web.xml struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /*index.jsp org.springframework.web.context.ContextLoaderListener 此文件也要拷贝 Struts2 压缩包中的 Blank 应用程序的 web.xml 文件,然后加上 Spring 的listene

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁