STRUTS2 实验报告
- 格式:pdf
- 大小:472.35 KB
- 文档页数:10
广东海洋大学学生实验报告书(学生用表)实验名称实验二.软件需求分析课程名称软件工程课程号32342206 学院(系) 数学与计算机学院专业计算机科学与技术班级计科1171学生姓名李明海学号201711621116 实验地点科技楼423实验日期2019年10月23日一、实验目的(1)熟悉并掌握StarUML工具的用法;(2)理解和掌握StarUML工具用于需求分析的用法;(3)掌握面向对象分析、设计的方法二、实验任务完成实验指导上实验1、实验2、实验3的实验任务。
三、实验仪器设备和材料安装有StarUML工具的PC机。
四、实验内容和步骤任务1:完成下张幻灯片中顺序图的绘制GDOU-B-11-112任务2:请完成教学管理系统中“设置开设课程”的顺序图任务3:图书管理系统功能性需求说明如下。
图书管理系统能够为一定数量的借阅者提供服务。
每个借阅者能够拥有唯一标识其存在的编号。
图书馆向每一个借阅者发放图书证,其中包含每一个借阅者的编号和个人信息。
提供的服务包括提供查询图书信息、查询个人信息服务和预订图书服务等。
当借阅者需要借阅图书、归还书籍时,需要通过图书管理员进行,即借阅者不直接与系统交互,而是通过图书管理员充当借阅者的代理和系统交互。
系统管理员主要负责系统的管理维护工作,包括对图书、数目、借阅者的添加、删除和修改,并且能够查询借阅者、图书和图书管理员的信息。
可以通过图书的名称或图书的ISBN/ISSN号对图书进行查找。
回答下面问题:(1)该系统中有哪些参与者?(2)画出语境“借阅者预订图书”的顺序图。
答:(1)该系统中有借阅者、图书管理员、系统管理员参与者。
(2)“借阅者预订图书”的顺序图:成绩指导教师日期2019年10月28日注:请用A4纸书写,不够另附纸。
第页,共页。
Struts2校验器类型详解一、Struts2内建校验器位于xwork-2.0.4.jar压缩包中(com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。
default.xml文件定义了常用的校验器类型。
首先搞清楚:struts2字段校验器与非字段校验器的区别字段校验器配置格式:<field name="被校验的字段"><field-validator type="校验器名"><!--此处需要为不同校验器指定数量不等的校验规则--><param name="参数名">参数值</param>....................<!--校验失败后的提示信息,其中key指定国际化信息的key--><message key="I18Nkey">校验失败后的提示信息</message><!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--></field-vallidator><!-- 如果校验字段满足多个规则,下面可以配置多个校验器--></field>非字段校验器配置格式:<validator type="校验器名"><param name="fieldName">需要被校验的字段</param><!--此处需要为不同校验器指定数量不等的校验规则--><param name="参数名">参数值</param><!--校验失败后的提示信息,其中key指定国际化信息的key--><message key="I18Nkey">校验失败后的提示信息</message><!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--></validator>非字段校验:先指定校验器:由谁来校验,来校验谁!字段校验器:先指定校验的属性:我来校验谁,由谁来校验!下面是对应在包中的类:<validators><validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/><validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/><validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/><validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/><validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/><validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/><validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/><validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/><validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/><validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/><validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/><validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/><validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/><validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/><validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/><validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/></validators>二、各种类型校验器1、类型转换检验器:(1)非字段校验:<validator type="conversion"><param name="fieldName">myField</param><message>类型转换错误</message><param name ="repopulateField">true</param></validator>(2)字段校验:<field name="myField"><field-validator type="conversion"><message>类型转换错误</message><param name ="repopulateField">true</param></field-validator></field>fieldName:该参数指定检查是否存在转换异常的字段名称,如果是字段校验,则不用指定该参数。
struts2中使⽤注解配置Action⽅法详解使⽤注解来配置Action可以实现零配置,零配置将从基于纯XML的配置转化为基于注解的配置。
使⽤注解,可以在⼤多数情况下避免使⽤struts.xml⽂件来进⾏配置。
struts2框架提供了四个与Action相关的注解类型,分别为ParentPackage、Namespace、Result和Action。
ParentPackage:ParentPackage注解⽤于指定Action所在的包要继承的⽗包。
该注解只有⼀个value参数。
⽤于指定要继承的⽗包。
⽰例:使⽤ParentPackage注解,其value值为mypackage,表⽰所在的Action需要继承mypackage包,@ParentPackage(value="mypackage")public class UserAction extends ActionSupport{}如果注解中只有⼀个value参数值,或者其他参数值都使⽤默认值时,则可以对value参数设置进⾏简写,⽐如上述的代码:@ParentPackage("mypackage")public class UserAction extends ActionSupport{}把struts2-convention-pligin-2.x.x.jar包导⼊到web应⽤中,才能在Action类中使⽤注解。
Namespace:Namespace注解⽤于指定Action所在的包的命名空间。
该注解只有⼀个value参数,⽤于指定ACtion所属于的命名空间。
当使⽤Namespace注解时,在为命名空间取名需要使⽤斜杠(/)开头。
使⽤Namespace注解,指定其Action所在的包的命名空间为/user:@Namespace("/user")public class UserAction extends ActionSupport{}Result:Result注解⽤于定义⼀个Result映射,该注解包含四个参数,1)name:可选参数,⽤于指定Result的逻辑名,默认值为success2)location:必选参数,⽤于指定Result对应资源的URL3)type:可选参数,⽤于指定Result的类型,默认值为NullResult.class4)params:可选参数,⽤于为Result指定要传递的参数,格式为:{key1,value1,key2,value2,...}如果type参数的值为NullResult.class,那么struts2框架在解析Result配置时,会使⽤默认的结果类型(即ServletDispatcherResult)来替换NullResult。
《软件开发架构平台技术》课程实验报告报告人:班级:指导老师:实验一XML与DOM实例编程一、实验目的熟悉XML技术,使用CSS技术和XSLT对XML文档进行格式化,熟练使用DOM技术来对XML进行解析。
二、实验内容写上孔老师要求作的内容三、实验步骤写上各自完成实验的步骤四、实验源代码及输出实验二JDBC实例开发一、实验目的熟悉JDBC常用类,复习SQL语句,使用SQL语句和JDBC来实现对数据库进行增删改查等操作。
二、实验内容JDBC实例开发。
使用SQL语句和JDBC来实现对数据库进行增删改查等操作。
把金老师发的实验内容整理好补充到这里三、实验要求1.熟练安装MyEclipse;2.熟练使用JDBC常用类;3.使用JDBC和SQL语句熟练进行数据库的查询和更新操作。
四、实验步骤1.安装MyEclipse;2.JDBC常用类、SQL语句对数据库进行查询和更新操作;3.编写测试驱动类,检查数据库连接和操作。
五、实验源代码及输出实验三Servlet和JSP实例开发一、实验目的熟悉Servlet和JSP技术,熟练使用Servlet和JSP开发动态交互式的应用,并与数据库技术结合,实现前台界面和后台数据库的交互开发。
二、实验内容使用Servlet和JSP开发动态交互式的应用,结合JDBC技术实现前台界面和后台数据库的交互开发。
任务一:实现对用户的增删改查三、实验要求1.熟练使用Servlet开发动态交互式网站;2.熟练使用JSP技术开发动态交互式网站;3.理解MVC架构;四、实验步骤1、创建任务所要求的数据库相关表,并添加相应的测试数据;2、开发Servlet代码实现任务一,对所实现功能进行测试;五、实验源代码及输出实验四Struts+Spring+Hibernate实例开发一、实验目的理解多层J2EE应用的设计思想,使用Struts、Spring和Hibernate三个框架构建多层J2EE 应用系统,熟悉表示层、业务逻辑层和数据访问层的设计原理,并利用框架技术开发一个简单的多层J2EE应用。
Struts2入门初步需掌握1.struts2概述2.struts2环境搭建(第一个struts2的应用程序)3.struts.xml文件配置详解4.struts2请求的URL的搜索路径的顺序概述5.struts2工作原理概述6.struts2指定多个配置文件7.struts2动态方法调用8.使用通配符定义action一:简介Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
二:环境搭建搭建Struts2环境时,我们一般需要做以下几个步骤的工作:1.找到开发Struts2应用需要使用到的jar文件.下载官网:/download.cgi#struts221解压后:开始学习使用依赖的最基本的jar 包2:编写Struts2的配置文件解压其中一个案例在此目录下找到struts.xml 文件先拷贝到项目的src 下。
再对起进行修改。
删除剩余如下代码:[html]01.<?xml version ="1.0"encoding ="UTF-8" ?> 02.<!DOCTYPE struts PUBLIC 03."-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN" 04."/dtds/struts-2.3.dtd"> 05.06.<struts> 07.08. </struts>无法加载插件。
struts2 error处理Struts2错误处理可以通过以下几种方式进行处理:1. 全局异常处理器(Global Exception Handler):可以通过实现`com.opensymphony.xwork2.Action`接口,并定义`execute()`方法来处理所有的异常。
在struts.xml配置文件中添加如下内容:```xml<global-exception-mappings><exception-mapping exception="ng.Exception"result="error" /></global-exception-mappings>```2. Action级别的异常处理器:每个Action类可以通过实现`com.opensymphony.xwork2.Action`接口,并定义`execute()`方法来处理特定的异常。
在struts.xml配置文件中,为每个使用自定义处理器的Action配置异常处理器:```xml<action name="example" class="com.example.ExampleAction"> <exception-mapping exception="ng.Exception"result="error" /><result name="error">/error.jsp</result><result>/example.jsp</result></action>```3. 拦截器异常处理器:Struts2中的拦截器可以捕获并处理Action方法中的异常。
可以通过自定义拦截器来实现异常处理,然后在struts.xml配置文件中使用:```xml<action name="example" class="com.example.ExampleAction"><interceptor-ref name="exceptionInterceptor" /><result>/example.jsp</result></action>```以上是Struts2错误处理的几种典型方法,可以根据具体需求选择适合的方式进行处理。
一、实验背景随着软件工程的不断发展,软件结构的合理设计对于软件的质量、可维护性和可扩展性至关重要。
本实验旨在通过实践操作,加深对软件结构设计理论和方法的理解,提高实际应用能力。
二、实验目的1. 理解软件结构设计的基本概念和原则;2. 掌握常用软件结构设计模式和方法;3. 提高软件设计能力,培养团队协作意识。
三、实验内容1. 软件结构设计概述- 软件结构的定义及作用- 软件结构设计的基本原则- 软件结构设计的方法2. 常用软件结构设计模式- 简单工厂模式- 工厂方法模式- 抽象工厂模式- 建造者模式- 适配器模式- 装饰者模式- 代理模式- 命令模式- 观察者模式- 状态模式3. 软件结构设计实践- 设计一个简单的图书管理系统- 分析现有软件的结构,并提出改进方案四、实验步骤1. 阅读实验指导书,了解实验目的、内容和方法;2. 分析实验案例,理解软件结构设计的基本原理;3. 实践设计一个简单的图书管理系统,包括用户界面、业务逻辑和数据访问层;4. 分析现有软件的结构,找出存在的问题,并提出改进方案;5. 撰写实验报告,总结实验心得。
五、实验结果与分析1. 实验结果- 成功设计并实现了图书管理系统;- 分析了现有软件的结构,提出了改进方案。
2. 实验分析- 通过实验,加深了对软件结构设计理论和方法的理解;- 掌握了常用软件结构设计模式,提高了设计能力;- 培养了团队协作意识,学会了与他人沟通和协作。
六、实验心得1. 软件结构设计的重要性- 软件结构设计是软件工程的核心内容之一,直接影响软件的质量、可维护性和可扩展性;- 优秀的软件结构设计可以降低开发成本,提高开发效率。
2. 软件结构设计的方法- 在设计软件结构时,要遵循一定的原则,如模块化、抽象化、封装化等;- 常用软件结构设计模式可以帮助我们更好地进行设计,提高设计质量。
3. 团队协作- 软件结构设计是一个团队协作的过程,需要团队成员之间的沟通和协作;- 学会与他人沟通和协作,可以提高团队的整体效率。
Sturuts2第一节、Struts2介绍Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
Struts2对Struts1进行了巨大的改进。
主要表现在如下几个方面: 在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个POJO。
线程模型方面:Struts1的Action是单实例的,一个Action的实例处理所有的请求。
Struts2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题。
Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。
这使程序难于测试。
Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。
封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。
Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。
绑定值到视图技术:Struts1使用标准的JSP,Struts2使用"ValueStack"技术。
Struts 2的基本流程Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。
在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。
2.核心控制器:FilterDispatcherFilterDispatcher是Struts 2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。
如果用户请求以action结尾,该请求将被转入Struts 2框架处理。
Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts 2调用名为login的Action来处理该请求。
Struts 2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action时,定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户请求,而class属性决定了该Action的实现类。
Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。
而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。
显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。
图3.19显示了这种处理模型。
图3.19 Struts 2的拦截器和Action从图3.19中可以看出,用户实现的Action类仅仅是Struts 2的Action代理的代理目标。
struts2 漏洞原理Struts2 是一种开放源代码的 Java Web 应用框架,被广泛应用于构建 Web 应用程序。
然而,Struts2 框架的一个漏洞却给许多应用程序带来了安全隐患。
本文将解释Struts2 漏洞的原理,并提供对于修复漏洞的一些方法。
Struts2 框架漏洞的原理Struts2 框架漏洞源于框架自身的设计缺陷。
设计缺陷使得攻击者可以利用恶意的输入来欺骗 Struts2 框架,从而在应用程序中执行任意的代码。
这种攻击就被称为“远程代码执行攻击”( Remote Code ExecutionAttack )。
Struts2 框架的漏洞主要是由于以下两点原因所导致的:· Struts2 使用了 OGNL (Object-Graph Navigation Language) 来解析 EL (Expression Language) 表达式,但没有正确地对表达式进行过滤,这使得恶意行为成为可能。
· Struts2 框架中的相当一部分功能是通过拦截器来实现的。
攻击者可以利用 Struts2 框架中的拦截器漏洞,绕过应用程序的权限控制来访问关键数据或者执行任意代码。
这两点都是 Struts2 框架漏洞的主因。
攻击者可以利用这两个漏洞来构建恶意的请求,并欺骗 Struts2 框架来执行恶意代码。
导致 Struts2 漏洞的例子为了更好地理解 Struts2 漏洞,可以通过一些例子来说明。
以下是一些可能导致 Struts2 框架漏洞的例子:· 未正确过滤用户输入。
比如在 Struts2 编译以数据表格为基础的应用程序时,如果没有过滤 script 标记,那么攻击者就可以通过执行JavaScript来远程控制代码,这就是远程代码执行攻击。
· XML SSI 漏洞。
攻击者可以通过将恶意代码嵌入到XML 消息中来利用该漏洞。
此漏洞允许攻击者利用Struts2 使用 XML 包含的注入布局中的初始资源解析器来绕过安全检查并完成任意文件读取/写入操作。
继续框架的学习:Struts2:MVC ←→SpringMVC (不要打架)Oracle:DB ←→MySQL (一些语法还是有差异的,不要打架) Hiberante:DAO ←→MyBatis (都是实现持久化的,不要打架)SSH整合的一个简单的CRUD案例!SSH: spring struts2 hibernate1,Struts2框架是一个MVC框架M(javabean) V(view) C(前端(核心)控制器,业务控制器)2,阐述Struts2的框架原理请求到达前端(核心)控制器从ActionMapper对象中查找ActionMapping对象获得ActionInvoker对象并执行Action返回视图3,在编写Struts2代码之前再介绍一个框架(了解)Struts2是Struts1的一个”延伸”(其实两个框架没有关系)其实Struts2的前身并不是struts1,它其实来自另一框架:webworkStruts1这个框架的控制器是Servlet,这个框架与servlet是严重耦合的!(ActionServlet)Struts1中的控制器是单例的!Struts2跟Servlet无关!Struts2中的控制器是多例的!4,开发Struts2的项目(学框架就是用别人的东西,学别人定义的规则)1)引入JAR包commons-fileupload-*.*.jar : 实现文件上传commons-logging-*.*.jar : apache下提供的一个日志包freemarker-*.*.jar : 提供视图解析的ognl-*.*.jar: struts2中的一个新特性,提供对象图导航语言struts2-core-*.*.jar :struts2的核心包xwork-core-*.*.jar : webwork的核心包2)在开发之前介绍几个文件:在struts2-core-*.*.jar中文件:struts-default.xml满足约束:文件中定义了组件:<bean> : 是struts2中要使用的bean对象<result-type> : 定义了struts2中视图的响应方式<interceptor>: 定义拦截器在struts2-core-*.*.jar中的org.apache.struts2包中文件:default.properties文件中定义开发的语言环境以及url的默认扩展名3)开发31)配置核心控制器(是一个过滤器) 在web.xmlorg.apache.struts2.dispatcher.FilterDispatcher (过时)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter (使用)32)View –> JSP编写自己的配置文件:在src下struts.xml满足33)编写ActionAction可以是一个普通的javabean,不需要实现任何接口或者继承任何类!(当然也可以去实现Action接口或者继承ActionSupport类)视图传值给Action:规则是视图组件的name必须和action中的属性名保持一致!!(注:方法的执行顺序Setter –> execute)5,如果在Action中要使用request,response,session,application对象,struts2框架提供了如下机制:去实现XxxAware接口6,如果在struts.xml中希望有多个action的name相同,可以使用不同package进行管理。