版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章MVC和Struts2基本原理本课教学内容MVC模式Struts2简介Struts2的基本原理Struts2的基本使用方法其他问题MVC和Strut2s基本原理MVC模式 MVC(Model、View、Controller),是软件开发过程中比较流行的设计思想。在了解MVC之前,首先要明确一点,MVC是一种设计模式(设计思想),不是一种编程技术MVC模式MVC思想:
编写JSP,负责输入查询代码,提交到Servlet,Servlet进行安全验证,调用Dao来访问数据库,得到结果,跳转到JSP显示MVC思想MVC思想如图MVC思想工作步骤为:用户在表单中输入,表单提交给Servlet,Servlet验证输入,然后实例化JavaBeanJavaBean查询数据库,查询结果暂存在JavaBean中Servlet跳转到JSP,JSP使用JavaBean,得到它里面的查询结果,并显示出来Struts2简介因为要对MVC模式来进行标准化,让程序员在某个标准下进行开发。很多人致力于这个工作,并且发布了一些框架,Struts就是这样一个框架,在使用的过程中,受到了广泛的承认。可以说,Struts是为了规范MVC开发而发布的一个框架。大多数框架的版本改进,一般是在原有的基础上增加功能或者进行优化,而Struts2不单如此。Struts2简介Struts2是Struts的下一代框架,并不是新发布的新框架,但是它是另一个非常流行的框架:WebWork基础上发展起来的。可以说,Struts2和WebWork非常类似。并且Struts2吸收了Struts1和WebWork两者的优势,因此也是一个非常优秀的框架Struts2简介Struts2和Struts1具有一些不同点,主要集中在以下方面:1. Action类的编写:在Struts1中,Action类一般继承基类org.apache.struts.action.Action。而在Struts2中,Action类可以实现一个Action接口,也可实现其他接口,也可以继承ActionSupport基类,甚至不需要实现任何接口,只编写execute函数即可Struts2简介2.Action的运行模式:Struts1中,Action是单态的,系统实例化一个对象来处理多个请求,为每个请求分配一个线程,在该线程中运行execute函数。因此,在开发时需要特别小心,Action资源必须是线程安全的或同步的。但是,Struts2中,Action为每一个请求产生一个实例,不会产生线程安全问题。但是,系统又能够及时回收垃圾资源,不会有废弃空间的问题Struts2简介3.
对Web容器的依赖:Struts1中,Action的execute函数内,传入了ServletAPI:HttpServletRequest和HttpServletResponse,使得测试必须依赖于Web容器。但是,在Struts2中,可以不传入HttpServletRequest和HttpServletResponse,但是也可以访问它们,因此,Action不依赖于容器,允许Action脱离容器单独被测试Struts2简介4.对表单数据的封装:Struts1中,使用ActionForm来封装表单数据,所有的ActionForm必须继承org.apache.strtus.action.ActionForm,有可能造成ActionForm类和VO类重复编码。但是,Struts2中,直接在Action中编写表单数据相对应的属性,可以不用编写ActionForm,而这些属性又可以通过Web页面上的标签访问Struts2的基本原理环境配置要编写基于Struts2的应用,需要导入一些支持的包,也就是Struts2开发包。这些开发包可以到网上去下载。下载地址为:/Struts2的基本原理在Struts2中,常用的的组件有:FilterDispatcher过滤器、JSP、Action、JavaBean、配置文件等。对于一个动作,其执行步骤为:1.用户输入,JSP表单的请求被FilterDispatcher截获Struts2的基本原理2.FilterDispatcher将表单信息转交给Action,并封装在Action内3.Action来调用JavaBean(DAO)4.Action返回要跳转到的JSP页面逻辑名称给框架5.框架根据逻辑名称找到相应的网页地址,进行跳转,结果在JSP上显示Struts2的基本使用方法
该部分内容使用实际案例进行讲解。在学生管理系统中,用户输入账号密码进行登录,如果登录成功,就跳转到成功页面,否则跳转到失败页面。为了简便起
见,认为账号密码相等就登录成功。Struts2的基本使用方法导入Struts2
将右边几个包拷贝到项目中WEB-INF中的lib目录下:然后配置web.xml文件编写JSP*具体代码示例详见课本编写并配置ActionForm在Struts1.x中,必须要单独建立一个ActionForm类,而在Struts2中ActionForm和Action已经合二为一了。因此,只需要将和表单元素同名的属性编写到Action内。编写并配置ActionFormLoginAction没有继承任何类,它有属性account和password,与login.jsp中的表单元素account与password必须同名编写并配置ActionStruts2中,既然Action和ActionForm合二为一,Action是负责业务逻辑的,所以必须编写业务逻辑代码。下面来加强Action的功能。要能够处理业务逻辑,必须要满足一个规范,那就是:编写execute方法来处理业务逻辑。注意,不是重写,是编写。并且该方法不需要有任何的参数编写并配置Action编写execute方法,是因为Action接收数据后,由框架自动调用它的execute方法,该方法的运行,在底层通过反射机制进行。execute的格式为:
publicStringexecute(){}该函数返回一个字符串,表示的是目标页面的虚拟名称编写并配置Action配置文件<struts><packagename="struts2"extends="struts-default"> <actionname="login"class="prj14.LoginAction"> <resultname="success">/loginSuccess.jsp</result> <resultname="fail">/loginFail.jsp</result> </action> </package> </struts>编写并配置Action从以上配置可以看出,在<struts>标签中可以有多个<package>,名称任意,但不要重名;extends属性表示继承一个默认的配置文件"struts-default",一般都继承于它,可以不用修改。<action>标签中的name属性表示Action被提交时的路径,class指定动作类路径测试*具体代码测试效果图见课本其他问题程序运行流程 login.jsp中的表单提交到的地址为"/Prj14/login.action",被org.apache.struts2.dispatcher.FilterDispatcher截获,框架把提交的地址的项目名称和扩展名".action"去掉,变为"/login",读取配置文件其他问题在配置文件中,根据"/login",找到配置文件中的action对应的类,从而得到要提交到的类LoginAction;在LoginAction中,实例化对象,将account和password封装进去其他问题框架调用LoginAction的execute方法,处理后返回一个字符串框架根据字符串内容,在配置文件中找到相应的页面,并跳转其他问题Action生命周期框架先实例化LoginAction对象,然后调用LoginAction的setAccount函数,封装表单数据,然后调用execute函数,进行处理在第二次提交时,LoginAction会重新实例化,说明每一个LoginAction对象都服务一个请求,这和Servlet的原理是不一样的其他问题在Action中访问Web对象获得request对象的方法是:
importorg.apache.struts2.ServletActionContext; publicStringexecute()throwsException{
HttpServletRequestrequest=ServletActionContext.getRequest(); //使用request
}其他问题在Action中访问Web对象获得response对象的方法是:
importorg.apache.struts2.ServletActionContext; publicStringexecute()throwsException{ HttpServletResponseresponse=ServletActionContext.getResponse(); //使用response }
其他问题在Action中访问Web对象获得application对象的方法是: importorg.apache.struts2.ServletActionContext; publicStringexecute()throwsException{ ServletContextapplication=ServletActionContext.getServletContext(); //使用application}
其他问题在Action中访问Web对象获得session对象的方法是: importcom.opensymphony.xwork2.ActionContext; publicStringexecute()throwsException{ Mapsession=ActionContext.getContext().getSession(); //使用session}其他问题可以发现这里的session是个Map对象。在Struts2中,底层的session被封装成了Map类型,我们可以直接操作这个map进行对session的写入和读取操作,而不用去直接操作HttpSession对象本章结束本章总结
MVC的基本思想Struts2的基本思想Struts2的结构和基本使用Struts2下用例的开发方法课后习题第15章Web网站安全本课教学内容URL操作攻击Web跨站脚本攻击SQL注入密码保护与验证URL操作攻击URL操作攻击介绍例子中,该订单从数据库获取数据的URL为:http://IP:端口/目录/display.jsp?orderno=10034562因为第一个订单的编号为10034562,所以,从客户端源代码上讲,第一个订单右边的"查看明细"链接看起来是这样的:URL操作攻击URL操作攻击介绍
<ahref="http://IP:端口/目录/display.jsp?orderno=10034562">查看明细</a>
该URL非常直观,可以从中看到是获取订单号为10034562的数据,因此,给了攻击者机会。URL操作攻击URL操作攻击介绍攻击者可以很容易地尝试将如下URL输入到地址栏中http://IP:端口/目录/display.jsp?orderno=10034563表示命令数据库查询订单号为10034563的明细信息。因为该订单明细在数据库表的T_ORDERITEM中存在,这里就造成了一个不安全的现象:用户可以查询不是他购买的鲜花订单信息。URL操作攻击还有更加严重的情况,如果网站足够不安全的话,攻击者可以不用登录,直接输入上面格式的URL(如http://IP:端口/目录/display.jsp?orderno=10034585),将信息显示出来。这样,上面的Web程序导致该鲜花订购系统网站为URL操作攻击敞开了大门解决方法要解决以上URL操作攻击,需要程序员进行非常周全的考虑。程序员在编写Web应用的时候,可以从以下两个方面加以注意:1.为了避免非登录用户进行访问,对于每一个只有登录成功才能访问的页面,应该进行session的检查(session检查的内容已经在前面章节提到)2.为限制用户访问未被授权的资源,可在查询时将登录用户的用户名也考虑进去。如用户名为guokehua,所以guokehua
的每一个订单后面的"查看明细"链接可以设计为这样:<ahref="http://IP:端口/目录/display.jsp?orderno=10034563&account=guokehua"> 查看明细 </a>解决方法解决方法 这样,用于该订单从数据库获取数据的URL为: http://ip:端口/目录/display.jsp?orderno=10034563&account=guokehua在向数据库查询时,就可以首先检查"guokehua"是否在登录状态,然后根据订单号(10034563)和用户名(guokehua)综合进行查询。这样,攻击者单独输入订单号,或者输入订单号和未登录的用户名,都无法显示结果Web跨站脚本攻击跨站脚本攻击的原理跨站脚本在英文中称为Cross-SiteScripting,缩写为CSS。但是,由于层叠样式表(CascadingStyleSheets)的缩写也为CSS,为不与其混淆,特将跨站脚本缩写为XSSWeb跨站脚本攻击跨站脚本攻击的原理
跨站脚本,顾名思义,就是恶意攻击者利用网站漏洞往Web页面里插入恶意代码。跨站脚本攻击,一般需要以下几个条件:Web跨站脚本攻击跨站脚本攻击条件:客户端访问的网站是一个有漏洞的网站,但是他没有意识到攻击者在这个网站中,通过一些手段放入一段可以执行的代码,吸引客户执行(如通过鼠标点击等)客户点击后,代码执行,可以达到攻击目的Web跨站脚本攻击具体代码示例见课本Web跨站脚本攻击在实际项目中,攻击过程稍微复杂一些。如前所述,攻击者为了得到客户的隐秘信息,一般会在网站中通过一些手段放入一段可以执行的代码,吸引客户执行(通过鼠标点击等);客户点击后,代码执行,可以达到攻击目的。Web跨站脚本攻击以下这些程序模拟了一个通过站内点击链接的攻击过程。login.jsp、loginResult.jsp、mailList.jsp、attackPage.asp具体代码示例见课本跨站脚本攻击的危害XSS攻击的主要危害包括:盗取用户的各类敏感信息,如账号密码等读取、篡改、添加、删除企业敏感数据读取企业重要的具有商业价值的资料控制受害者机器向其他网站发起攻击防范方法对于XSS攻击的防范,主要从网站开发者角度和用户角度来阐述从网站开发者角度,对XSS最佳的防护主要体现在以下两个方面:1.对于任意的输入数据应该进行验证,以有效检测攻击防范方法2.对于任意的输出数据,要进行适当的编码,防止任何已成功注入的脚本在浏览器端运行;数据输出前,确保用户提交的数据已被正确进行编码;可在代码中明确指定输出的编码方式(如ISO-8859-1),而不是让攻击者发送一个由他自己编码的脚本给用户防范方法以下具体阐述一种实现方法:XSS攻击的一个来源在于,用户登录时,可以让那些特殊的字符也输入进去。因此可在表单提交的过程中,利用一定手段来进行限制。例如,可以限制输入的字符数,来阻止那些较长的script的输入。另外可以Javascript来对字符进行过滤,将一些如%、<、>、[、]、{、}、;、&、+、-、"、(、)的字符过滤掉。防范方法从网站用户角度1.作为网站用户,打开一些Email或附件、浏览论坛帖子时,做操作时一定要特别谨慎,否则有可能导致恶意脚本执行。不过,也可以在浏览器设置中关闭JavaScript2.如果是IE的,可以点击"工具"——"Internet选项"——"安全"——"自定义级别"进行设置SQL注入SQL注入的原理
SQL注入在英文中称为SQLInjection,是黑客对Web数据库进行攻击的常用手段之一。在这种攻击方式中,恶意代码被插入到查询字符串中,然后将该字符串传递到数据库服务器进行执行,根
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年内蒙古科技大学教师招聘考试参考试题及答案解析
- 2026江西赣州定南县总医院社会招聘编制外合同制人员7人笔试备考试题及答案解析
- (新)急诊医学主治医师考试试题和参考答案泌尿系统疾病
- 公司年度计划与总结手册
- 信息管理智能化系统建设与实施方案
- 健康习惯及规则履行承诺函5篇
- 家庭亲子游乐园安全管控承诺书范文9篇
- 企业战略合作伙伴关系建立商洽函(6篇)范文
- 关于2026年营销活动预算执行情况反馈回复函6篇范文
- 客服中心客户投诉处理流程手册
- 2025-2026年物业管理的智能化发展
- 汽车泵地基承载力验算
- 中华财险2025年校园招聘行测笔试
- DB11 642-2009 预拌混凝土生产管理规程
- 2025解题觉醒邓诚数学(名师大招册)
- 《中国特色大国外交》课件
- 监狱新干警培训课件
- 《糖尿病饮食》课件
- 药材采购合同范本
- 2024年全国中学生生物学联赛试题含答案
- 有机磷农药中毒的急救与护理
评论
0/150
提交评论