学习笔记----了解传统模式servlet的优缺点及struts入门1

struts2:入门
   1、概念:mvc


   2、servlet的缺点

      
       1、配置一个servlet,在web.xml中需要些很多行代码,这样的写法在团队的合作中不可取
     
       2、在servlet中,doGet和doPost方法有两个参数:request,response,这两个参数具有严重的容器依赖性,所以不便于测试
      
       3、在一个servlet中写很多方法,怎么样去调用
      
       4、在servlet中完成所有的逻辑,结构不好,例如用户注册的例子:
      
        用户注册:
                 1、获取表单的数据
                 2、完成图片的上传
                 3、完成校验
                 4、完成验证码
                 5、保存用户
      
      5、request获取页面表单的数据太麻烦了

      6、url处理起来比较费劲


处理的方法:可以参照之前写过的用注解的形式反射,来实现配置一个过滤器拦截所有请求,
    根据uri的参数来反射调用相应的方法的形式来解决。
    

   对servlet进行重构:
    1、在web.xml中写一个过滤器
        
     1、利用java的反射机制调用所有的service
        
     2、把request,response的参数传递到service层
        
     3、response过程
   
    2、在servlet中利用java的反射机制动态的调用service层的方法
   
    3、对错误处理机制进行重构

例:在web服务器启动时,扫描所有的action 加载进一个容器中。
这时:当客户端反问http://localhost:8080/itheima_servlet/userService.add

 过滤器对请求进行拦截:
       ServletFileter{

       doPost(){
           1.获得url中的userService
       2.获取url中的方法名称add
       3.把userService所在的类的全名取出来
       4.method.invoke(userService,res,req)将service对象和请求响应对象以参数的形式带过去。
       进入自己编写的action中实现业务逻辑。


重构servlet的总结:
      1、service的方法做到了动态的调用

  

       2、因为所有的service方法都在一个filter中动态的调用,所以只要service的方法中出现错误,就可以错误统一

            的处理

 

       3、在web.xml中声明了一个总控的过滤器,使得在web.xml中的配置大量减少了


              以上的只是解决了一部分的问题,只是方便对于struts2的理解。



struts2:

      运行原理图:


                  




1.struts的配置:
    struts2的核心是用一个过滤器拦截所有的请求:
    
    在web.xml中
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>

    

         <filter-mapping>

            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>



    
    3、导入jar 包。
    
    4、 在src folder的根目录下创建::: struts.xml。

     *  根元素为struts

        <package name="user" namespace="/" extends="struts-default">

        

                   <action name="userAction" method="add" class="cn.itheima03.struts2.action.UserAction">

            
                                  <result name="index">index.jsp</result>
          
                   </action>
         
         </package>


            说明:
               1、struts2的配置文件是以包的形式进行管理的,包和包之间可以继承,来实现拦截器等功能。
            继承的根包必须是继承struts-default的
            。
               2、package中的name是包的唯一的标示,与id特性一样,不可以有重复。

               3、namespace 命名空间:一般情况下默认为web工程根目录:
           
               4、extends 继承: 一定要填写struts-default。

           5、<action>标签定义的就是action的注册信息。
        <action name="userAction" method="add" class="cn.itheima03.struts2.action.UserAction">
        这里一一对应的是:
            name=userAction::定义方法的访问名称:
            例:http://loacalhost:8080/itheima03/userAction.action   这里的工程目录下的userAction和name的属性必须保持一致。
            method=add:定义访问该action的方法名称。
            class该类的完整名称,用其反射。

           6、result代表结果集: name="就是action中的方法的返回值,必须一致。"

           result中间的index.jsp意义是:当返回此结果时跳转到index.jsp页面。

           需要注意的是:这里的跳转是转发而不是重定向。

      5、创建一个bean,为UserAction
        * UserAction的方法必须返回一个字符串(该方法可以继承actionSupport等或实现某些接口复写execute()方法等操作。默认什么也不继承也可以操作)


整个的执行流程:
    客户端访问http://loacalhost:8080/itheima03/userAction.action
    服务器端进行过滤器拦截:解析配置文件,寻找userAction 反射出该类实例。调用add方法,完成业务逻辑,该方法返回一个字符串。
    在配置文件中的result结果集中寻找与方法返回的字符串相同的name属性,然后根据其配置的标签体index.jsp将之返回给客户端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值