java part part,Java - Part 9

一、Filter

过滤器会在请求到实际指向目标的时候先截获到请求,并且在请求离开目标之后再次截获请求。

Filter是Servlet技术的核心技术,可以利用其完成自动登录、编码过滤、权限控制、过滤请求、压缩数据等。

1、编写过滤器

定义类实现Filter接口:public class MyFilter implements Filter{}

指定Filter的拦截范围

配置式:在web.xml文件中配置

myfilter

com.qianfeng.user.MyFilter

myfilter

/*

注解式:在过滤器中配置,@WebFilter("/*"),拦截所有

多过滤器下的优先级:如果采用配置式,按照注册顺序调用,写在前面的先调用;如果采用注解式,按照类名的字符串顺序调用

自动登录:

public class AutoLoginFilter implements Filter {

//过滤器的生命周期 : 服务器启动诞生 服务器运行 活着 服务器关闭 消亡

public void init(FilterConfig filterConfig) throws ServletException { }

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

//为什么要强转?

//Session是和Http协议配合的, 所以只有HttpServletRequest才能获取到

//能安全的强转吗?

//如果请求是http协议的, 那么, tomcat造的就是HttpServletRequest对象, ServletRequest 是HttpServletRequest父类

HttpServletRequest req = (HttpServletRequest) servletRequest;

Object obj = req.getSession().getAttribute("login");//获取登录标志

if(obj==null){

//做自动登录

Cookie[] cookies = req.getCookies();//如果前台一个cookie都没有传递过来, 这里会获取到null

if(cookies!=null){

for (Cookie cookie : cookies) {

String name = cookie.getName();

if("autologin".equals(name)){

String value = cookie.getValue();

String[] strs = value.split("=");

if(Message.users.containsKey(strs[0])&&Message.users.get(strs[0]).equals(strs[1])){

req.getSession().setAttribute("login",true);

break;//不能写return, 如果是return的话, 放行代码都无法执行了

}

}

}

}

}

filterChain.doFilter(servletRequest,servletResponse); //放行请求

}

public void destroy() { }

}

二、监听器

监听器用于监听web应用中某些对象、信息的创建、销毁、增加、修改、删除等动作的发生,然后作出响应处理。常用于统计在线人输和在线用户,系统加载时进行信息初始化,统计网站的访问量等。

1、编写监听器

定义类实现对应的监听器接口

重写方法

配置:

注解式

配置式

优点:非侵入式检测

三、JSP

1、HTML作为展示页的缺点

缓存问题,浏览器如果认为是同一个HTML页面,不会重新请求

回显问题,无法动态页面展示

动态显示页面

2、解决办法

MIME类型

使用servlet,动态拼接代码

3、JSP介绍

JSP是Java Server Pages,基于html模板,可以在html模板中嵌入Java代码,同时还可以和CSS与JavaScript结合。

jsp是servlet,不是静态页面,所以不会缓存

优势:

与纯Servlet相比,很方便的编写或者修改HTML网页而不用去面对大量的println语句

与JavaScript相比,JavaScript很难与服务器交互。

与静态HTML相比:静态HTML不包含动态信息

缺点:

传输量大,可以使用异步,尽量不刷新页面

每次都要拼接大量的字符串:页面静态化

4、JSP指令

page指令:

include指令:静态包含

taglib指令:引入其他标签库:

5、JSP的动作(尽量不用)

jsp:include动态包含:

静态包含与动态包含的区别:翻译的时间段不同,静态包含在翻译时就把两个文件进行合并,动态包含不会合并文件,当代码执行到include时才会合并。

6、JSO九大内置对象

对象名

类型

说明

request

javax.servlet.http.HttpServletRequest

response

javax.servlet.http.HttpServletResponse

session

javax.servlet.http.HttpSession

由session=“true”开关

application

javax.servlet.ServletContext

exception

java.lang.Throwable

由isErrorPage=“false”开关

page

java.lang.Object当前对象this

当前servlet实例

config

javax.servlet.ServletConfig

pageContext

javax.servlet.jsp.PageContext

out

javax.servlet.jsp.JspWriter

javax.servlet.jsp.JspWriter

四、JSP的四大域对象

pageContext:标识当前JSP页面

request域:常用于转发

session域:同一个浏览器法除的多个请求共享一个域

servletContext域:最大的一个域,被所有请求共享

五、EL表达式

EL表达式不是一种语言,是JSP中获取数据的一种规范

格式:${参数名称}

六、JSTL

这是一款强大的逻辑标签库,可以在JSP页面进行逻辑判断,在使用之前需要导入外部标签库,主要用到的是两个标签:判断与循环。

导入外部标签库:

判断:

循环:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值