`
long_yu2
  • 浏览: 310070 次
社区版块
存档分类
最新评论

深入浅出学习Struts框架(三):彻底去掉TestServlet中的字符串和if-else语句块

 
阅读更多

在《深入浅出学习Struts框架(一):一个简单mvc模式代码示例开始》和《深入浅出学习Struts框架(二):重构MVC模式代码中跳转路径和业务逻辑》文章中已经说了分层和mvc模式的区别,和一些为了去掉mvc模式代码中的TestServlet类中的if-else。因为if-else在程序代码中是相对不稳定的,所以通过去掉if-else来引入对struts框架的学习。


在《深入浅出学习Struts框架(二):重构MVC模式代码中跳转路径和业务逻辑》中我们已经抽象出来了一个接口和四个实现类,主要封装了业务处理和页面跳转路径字符串放回,以便利用多肽来重构了TestServlet代码(具体见博客)。

在上两篇博客我们遗留了两个问题,一是if-else,二是字符串太多。今天这篇博客就要解决这两个问题。


上一篇TestServlet重构后的代码:



解决字符串问题,当然就要用到配置文件了,用到配置文件就要有用来读取配置文件的相关的类和方法,这里就用dom4j中的类来读取配置文件,这里的配置文件的书写是有点逻辑上的难度的。

我们来看TestServlet中的代码,我们要在这个testservlet中实现读取配置文件和path比较,还有利用多肽实例化相应的实现类,最后通过实例化的实现类的方法来返回跳转路径,最终跳转到相应的页面。


所以我们的配置文件就要不仅配上testservlet中出现的字符串,还要配置相应的Action接口的实现类(我们可以利用反射来实例化该类的对象,进而使用这个类的所有属性和方法),另外还有跳转路径字符串。这样我们的配置文件就变成了如下代码所示:



我们有了配置文件之后就要想法通过相关类读取,并且实现相应的功能。所以这里用dom4j来读取完成。其实如果能把这个逻辑捋顺之后就能发现,其实懂我们利用dom4j读取完配置文件的时候,我们是取得的是一个配套的匹配路径字符串、相应业务逻辑类还有处理业务逻辑之后跳转页面路径字符串。这样我们就能直截了当的去掉了if-else。(这里可能逻辑上会出现一些困难,但是看到下面的重构之后的testservlet中的代码和读取配置文件之后的代码就会一目了然)。

现在等待解决的问题就是我们要把从配置文件取得的一整套内容放到那里,当然这是毋庸置疑的要放到类中。所以我们就建立一个ActionMapping类来放我们的那一整套内容。

ActionMapping中的代码如下:



现在ActionMapping类已经有了,剩下的工作就是要利用dom4j来读取配置文件类,具体代码如下:



我们通过返回ActionMapping来动态创建出action相应的实现类,进而完成业务逻辑和页面跳转,重构之后的TestServlet代码如下:


我们可以清晰的看到if-else已经没有了,字符串也已经没有了。通过这篇文章对if-else还有字符串问题的解决,又一次重构了testservlet代码,程序相对灵活许多。通过这一次的重构,我们已经看到了struts框架的雏形,下一篇文章就真正开始了struts框架的学习。

下一篇引子:

其实框架就是对程序的高度封装,我们经历了这三篇文章之后,一步一步重构,一步一步封装,逐步向框架靠拢,其实框架没有什么难的,其实没有学习框架之前感觉挺神秘,其实如果一步一步来研究之后发现框架就是封装的高度化,分层的高度化。

下一篇文章深入浅出学习struts框架(四):从MVC模式代码认识struts框架就借助刚刚完成的实例来简单认识struts框架,看看真正的struts框架和我们这个mvc小实例有什么相同和相异之处。

分享到:
评论

相关推荐

    TestServlet.zip

    JavaWeb的servlet项目:包括数据库sql文件有建库插入数据,用网页表单实现数据库的增加删除显示数据

    JavaWeb基础学习中处理中文乱码(踩过的坑)

    JavaWeb学习中处理中文乱码 在JavaWeb学习当中,常常会遇到中文乱码问题,为了正常显示我们所需要的内容,我们必须要对他进行转码处理。 在web环境中,我们的get请求编码是ISO-8859-1,我们的中文字符编码是UTF-8,若...

    TestServlet_师生交流系统_

    学生用户功能:学生登录之后可以对教学资料和新闻查询(可分页),教学视频播放和下载、试题下载。 2、教师用户功能:教师登录本系统可以上传教学资料、视频以及试题,另外可以对这些资料进行增删改查,以及管理学生...

    servlettest

    测试工具Junit与httpunit框架配合使用测试servlet的基本思路和方法

    JavaWeb中的 请求转发 和 重定向.docx

    请求转发:在最终的 servlet (TestServlet) 中,request和中转的那个servlet(ForwardServlet)中的request对象是同一个对象 重定向:在最终的 servlet (TestServlet) 中,request和中转的那个servlet(SendServlet...

    12test(jsp+servlet+javaBean+sql_server).rar_TestServlet.java sql

    首先,系统会列出所有满足该生系别以及该生还未选报的课程,或者其预修课为“public”的课程。如果该生选报了未满足预修课要求的课程,系统会有相关的错误提示。 其次,学生可以查看自己的成绩,包括该生已选课程的...

    ClockSimpleJEE4 0.98测试案例集自动数据库链接回收版

    用于Java,mysql学习。 所有程序在GPLv3条款下开源,关于GPLv3相关pdf已放置在doc子目录下。 数据库脚本在sql子目录下。请恢复名为clock的产品库和名为clock_test的测试库。 clock_test是用于单元测试的JUnit套件...

    JQuery+Ajax通用分页导航(任意表)

    通过ajax调用后端Servlet,(调后端的Servlet名叫testservlet 可以在wzjpage.js第27行处修改。)返回一个JSON对象,要求:jSON对象中必须有 // datarows columns pageCount这3个对象。 //数据格式必须为: List[]>...

    pushlet实例(java服务端推送消息)

    实现多个客户端连接到web服务器,由服务端推送消息至客户端(或指定id的客户端),代码中没有用官网的jar文件,而是用的源码,做了一定的修改,实现了每个客户端都可以自定义id,然后服务端可以向指定id客户端推送消息...

    Java开源例程ClockSimpleJEE4 0.96全面改善更新版

    6)全面支持java7和Tomcat7 7)欢迎使用与测试 8)任何问题请联系作者jerry_shen_sjf@qq.com 9)请用如下用户登录:用户EMPID:160208密码:jerry 10)请修改数据库配置文件dbconfig.xml 11)数据库脚本全面更新 12)...

    Java开源例程ClockSimpleJEE4 0.97 安全增强和架构整理版

    Java开源例程ClockSimpleJEE4 0.97 安全增强和架构整理版 以下是readme和release note ClockSimpleJEE4是开源例程企业考勤系统 用于Java,mysql学习。 所有程序在GPLv3条款下开源,关于GPLv3相关pdf已放置在doc...

    servelet实现http接口小例子

    servelet实现http接口小例子,访问url:http://localhost:port/test/TestServlet,然后用postmanGET请求测试

    Java WEB(MVC)环境搭建实例2

    本代码只针对Java初学者,在MyEclipse环境下搭建MVC环境 M层: SelectAction,实现通过... TestServlet,调用模型和视图去完成用户的需求,返回结果集 V层: index.jsp,用户请求页面 result.jsp,返回结果集显示页面

    Java WEB(MVC)环境搭建实例

    本代码只针对Java初学者,在MyEclipse环境下搭建MVC环境 M层: SelectAction,实现通过... TestServlet,调用模型和视图去完成用户的需求,返回结果集 V层: index.jsp,用户请求页面 result.jsp,返回结果集显示页面

    浅谈Servlet转发到JSP页面的路径问题(必看)

    在Servlet转发到JSP页面时,此时浏览器地址栏上显示的是Servlet的路径,而若JSP页面的超链接还是相对于该JSP页面的地址且该Servlet和该JSP页面不在同一个文件夹下时,则会出现路径混乱问题。 2. 绝对路径概念 相对于...

    CustomizedLoginModule-POC:使用自定义主体创建自定义登录模块

    geronimo 上添加用户 = user1 和密码 = 1111 的用户制作定制的LoginModule并将其部署到服务器存储库使部署成为战争(/CustomizedLogin) 访问“http://..../CustomizedLogin/testServlet” 登录表单页面将出现使用 ...

    TestNGEE:在 servlet 容器内运行 TestNG 测试。 非常适合集成测试-开源

    在我们的项目中,我们已经在回归测试期间检测到由应用于我们的 Websphere Application Server 的修复程序引起的问题(在一个版本中,类加载器以一种方式工作,它们改变了!)。 要使用它,请创建一个 Web 项目并将...

    codemucker-testserver:码头周围的薄包装,以更好地嵌入

    //如果没有设置随机一个 server.addServlet("/hello", new TestServlet() { @Override protected void service(final HttpServletRequest req,final HttpServletResponse resp) throws ServletException,IOException...

    Java Web简单例程——MyWebProject

    本例程包含一个TestServlet,用于接收POST请求,访问本地MySQL数据并返回对应消息。

    FrameworkServlet:点对点的servlet控制跳转

    导入frameworkServlet.jar包到自己的工程中2.编写TestServlet类继承FrameworkServlet.使用servlet3.0的注解配置servlet,在界面上只需要传入action=test1,则调用test1方法来处理请求。package room.mgang.test;...

Global site tag (gtag.js) - Google Analytics