servlet002:MVC设计模式,el表达式,过滤器的应用

  • MVC是一种设计模式
    MVC是观察者模式(Observer), 策略模式(Strategy)和组合模式(Composite)三个设计模式的演变,MVC是模式的组合,是一种编程架构
  • 其中M表示 model 模型, com.z.User 就是一个model ,模型专门用来传送数据。可以跨越多层。
  • 其中V表示 view 视图, /WEB-INF/jsp/所有jsp页面,都是视图,视图有2个作用,1收集用户数据(form),2 显示数据。(table div)
  • 其中C表示controller 控制器,com.xaeduask.web.servlet中的所有类,都是控制器,负责处理用户数据,并根据处理结构,跳转到不同的view(视图)
    在这里插入图片描述
  • el表达式
    EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

2、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
u s e r . M y − N a m e 应 当 改 为 { user. My-Name}应当改为 user.MyName{user[“My-Name”]}
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量

	<%
   				Dog d1=new Dog("哈巴狗","黑色",19);
   				Dog d2=new Dog("拉布拉多","黄色",3);
   				Dog d3=new Dog("金毛","金色",6);
   				Dog d4=new Dog("藏獒","白色",8);
   				Map map=new HashMap();
   				map.put("a", d1);
   				map.put("b", d2);
   				map.put(2, d3);
   				map.put("1", d4);
   				pageContext.setAttribute("a",map);
   				
   			 %>		
   			 ${1<2?'a':'b'}

Jsp三大利器:servlet 过滤器 监听器

  • 过滤器
    过滤器也是一个java类,只不过他实现了Filter接口。它在服务器开启的时候就开始执行,没访问一次调用一次,项目从服务器上卸载之后就执行关闭
    在这里插入图片描述
  • 过滤器配置
    在这里插入图片描述
    这里的*表示只要访问filter下的所有项目,都会执行过滤器,都会被过滤器拦截下来。
    在这里插入图片描述
  • chain.doFilter后面的代码,会在目标资源执行完毕之后才执行!
    在这里插入图片描述
    现在过滤器没有任何条件就放行了,可以访问到也面了。过滤器不拦截了。其实过滤器拦截下来之后先进行中文乱码处理,屏蔽敏感字,管理员与游客登录权限设置等操作之后再放行,这样才能发挥过滤器的作用。
  • 解决中文乱码:
    在这里插入图片描述
  • 设置表单提交方式
    在这里插入图片描述
  • 我们可以学过滤器连,可以有多个过滤器拦截请求,按filter-mapping配置顺序来拦截!(顺序就是在配置文件中,谁的位置在前,哪个过滤器就先执行,这样可以让一个过滤器只执行一个拦截要求,多个过滤器搭配使用,实现程序运行。它可以在过滤器放行之前来处理请求信息,拦截部分请求,也可以在过滤器放行之后来处理服务器响应的数据,给客户端部分响应)
    在这里插入图片描述

过滤器应用
1:可以在filter中根据条件决定是否放行(设置用户黑名单)
2:在目标资源执行之前对request,response做预处理,再放行!(解决中文乱码,替换敏感字符)
3:在目标资源执行之后,可以捕获目标资源的执行结果!(关闭数据库链接)

  • 过滤器生命周期:
    1.在服务器启动时,自动创建过滤器的对象,创建时,直接调用init方法。
    2.每当过滤器拦截到请求,则自动调用doFilter方法!
    3.在卸载web应用时,会自动销毁过滤器对象,在销毁时,自动调用destory方法。
  • 在web.xml中配置全局属性和局部属性
    设置的属性可以在过滤器中使用,在过滤器开启也就是服务器开启后,开始加载web.xml的属性值,然后当客户端访问服务器经过过滤器时,把参数传进去,然后让客户端带着参数去访问服务器。
    1,设置属性:(这里解决中文乱码)
    在这里插入图片描述
    2,过滤器的操作
    在这里插入图片描述

用户在配置filter时,可以使用< init-param>为filter配置一些初始化参数,当web容器实例化Filter对象,调用init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可以获得:
1,String getFilterName():得到filter的名称
2,String getInitParameter(String name):返回部署描述中指定名称的初始化参数的值。如果不存在返回null
3,Enumeration getInitParameterName(): 返回过滤器的所有初始化参数的名字的枚举集合
4,public ServletContext getServletContext():返回Servlet上下文对象的引用

案例:
在这里插入图片描述

package com.z.filter;

import java.io.IOException;
import java.util.Enumeration;

import javax.persistence.Enumerated;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;


public class MyFilter implements Filter{
	private String defaultCharset;
	private FilterConfig config;
	@Override
	public void destroy() {
		System.out.println("关闭");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("执行");
		//表单提交方式必须为pose
		String charset=config.getInitParameter("charset");
		System.out.println(charset);
		String name=config.getFilterName();
		System.out.println(name);
		Enumeration e=config.getInitParameterNames();
		while(e.hasMoreElements()){
			Object obj=e.nextElement();
			String value=config.getInitParameter(obj.toString());
			System.out.println(obj+":"+value);
		}
		chain.doFilter(request, response);
		System.out.println("执行结束");
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		System.out.println("启动");
		this.config=config;
	}
}

执行结果:
在这里插入图片描述

  • 过滤器的权限控制
    在这里插入图片描述
    只要用户访问了admin中的任何资源,都会经过过滤器!
    在这里插入图片描述
  • 过滤器配置中的dispatcher元素的使用:
    在这里插入图片描述
    Dispatcher就是用于告诉过滤器,去拦截哪一种访问方式的!
    在这里插入图片描述
 <filter-mapping>
      <filter-name>MyFilter</filter-name>
      <url-pattern>/admin/*</url-pattern>
      <dispatcher>ERROR</dispatcher>
  </filter-mapping>

<%@ page errorpage=“error.jsp”%> 这种方式过滤器拦截不了,因为它已经把错误信息处理了,对于处理之后的不拦截,拦截没有处理的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值