struts2应用技术层,拦截器,struts2标签

拦截器和过滤器的区别



拦截器:
只能拦截action

过滤器:过滤器理论上可以任意内容,比如html,jsp,servlet ,图片内容

servlet action 区别

servlet 默认第一次访问时候创建,创建一次,单实例对象

action 每次访问时候创建,创建多次,多实例对象。     

在 struts2里面有很多拦截器, 这些拦截器是struts2封装的功能
但是在实际开发中  struts2 里面的拦截器中可以没有使用的功能
这个时候就需要自己定义拦截器


拦截器结构
1) 参看拦截器的内部结构
继承类

class ModelDrivenInterceptor extends AbstractInterceptor

class AbstractInterceptor implements  Interceptor

void init()
void destory()

String interceptor(ActionInvocation invocation)


开发中
建议使用另外一种方式
写类,继承MethodFilterInterceptor类实现
让action 里面某个方法不进行拦截

让拦截器和action有关系

不是在action调用拦截器的方法,而是通过配置文件方式让建立关系


自定义登录拦截器
   
       需求分析:在项目中,有很多的action的超链接,实现只有登录的状态
才可以点击action的超链接实现功能,如果不是登录状态,点击action超链接
返回到登陆页面


登录状态,使用session域对象实现
1))登录成功之后,把数据放到session里面
2))判断 session时候有值,可以知道是否是登录状态。


3  先实现登录基本功能

1) 查询数据库判断用户名和密码

2)  登录的方法

 //属性封装
 public String login(){
      //得到request对象
      HttpServletRequest request=ServletActionContext.getRequest();
      String username=request.getParameter("username");
      String password=request.getParameter("password");
      //作业:查询数据库判断用户名和密码
      if("admin".equals(username )&&"250".equals(password)){
       //成功, 向session里面放值
       request.getSession().setAttribute("username",username);
       
       return "loginsuccess";
       
     }else{
       //失败
       return "login";
     }
      return "login";
 }


//添加登录拦截器功能
1)  判断是否登录, 判断session里面是否有名称有username的值
2) 拦截器实现过程

第一步: 创建类, 继承MethodFilterInterceptor 类

第二步:重新MethodFilterInterceptor 类里面的方法写拦截器逻辑

第三步:配置action和拦截器关系(拦截器关系)


public class LoginInterceptor extends MethodFilterInterceptor{
   protected String doInterceptor(ActionInvocation invocation) throws
   Exception{
      //判断session里面是否有名称有username的值
      //得到session
      HttpServletRequest request=ServletActionContext.getRequest();
      Object obj=request.getSession().getAttribute("username");
      //判断
      if(obj!=null){
             //登录状态,
             //做类似于放行操作,执行action方法
              return invocation.invoke();
        
      }else{
               //不是登录状态,
               //不到登录,不执行action方法,返回登录页面      
               //到result标签里面找到名称是login的值,到配置路径里面
               return "login";
      }
      
   }
}


第三步: 配置action和拦截器关系(注册拦截器)
1) :在要拦截的action标签所在的package标签里面声明拦截器

    定义拦截器  (定义action外面)
2):<interceptors>
      <interceptor name="loginintercept" class="cn.itcast.interceptor.loginInterceptor">
      </interceptor>
    </interceptors>

<action>
   使用自定义拦截器 在action里面调用)
   <interceptor-ref name="logininterceptor></interceptor-ref>

</action>
备注=====配置拦截器,对action的里面所有的方法都进行拦截

3) 把默认拦截器执行一次
   <interceptor-ref name="defaultStack"></interceptor-ref>




在action里面有login 方法 这个方法被拦截不能进行登录

解决: 让login不进行拦截

通过配置方式让action里面某些方法不进行拦截


配置:
<interceptor-ref name="logininterceptor">
   <!--  excludeMethods 值, action不拦截方法名称   -->
   <param name="excludeMethods">login</param>
</interceptor-ref>


如果登录状态, 直接到登陆页面, 如果不是登录显示登录页面
登录之后出现小问题

实现方法:设置表单的属性 target="_parent">  解决该问题



struts2 标签库
   1.s:property  和ognl表达式在jsp页面获取值占数据
   2.s:iterator 遍历list集合
   3.s:debug

   html表单标签
    1) form : action  method enctype

    2) 输入项
     大部分在input 里面封装type="值"
     text  普通输入项
     password 密码输入项
     radio 单选输入项
     checkbox 复选输入项
     file 文件上传项
     hidden  隐藏域
     button  普通按钮
     submit  提交按钮
     image 图片提交
     reset:重置

     select 下拉输入项
     textarea 文本域

<!--form标签-->
<s:form theme="simple">
    <!--1.普通输入项-->
    <s:textfiled name="username" label="username"></s:textfield>
    <s:password name="password" label="password"></s:password>
    <!--单选输入项  value和显示的值一样-->
    <s:radio list="{'男','女'}"  name="sex" label="性别"></s:radio>
    <s:radio list="#{'nv':'女','nan':'男'}" name="sex1" label="性别"></s:radio>

    <s:checkboxlist list="{'吃饭','睡觉','敲代码'} name="love" label="爱好">
    </s:checkboxlist>

    <s:select list="{'幼儿园','破时候','教授'}" name="college" label="学历"></s:select>

    <s:file name="file"  label="上传文件"></s:file>
    <s:hidden name="hid" value="abcd"></s:hidden>
    <s:textarea rows="10" cols="3" name="wenb"></s:textarea>
    <s:submit value="提交"></s:submit>
     
    <s:reset value="重置"></s:reset>
</s:form>
   

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值