Servlet是JavaWeb最为核心的内容,它是Java提供的一门==动态==web资源开发技术。
使用Servlet就可以实现,根据不同的登录用户在页面上动态显示不同内容。
Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet。
生命周期:对象的生命周期指一个对象从被创建到被销毁的整个过程。
其生命周期由容器来管理,分为4个阶段:
①加载和实例化:当Servlet第一次被访问时,由容器创建Servlet对象
②初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次!!!
③请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。每访问1次就调用1次!!!
④服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。只执行1次!!!
Request是请求对象:请求行、请求头、请求体三部分组成
Response是响应对象:由响应行、响应头、响应体三部分组成
request对象是用来封装请求数据的对象 response对象是用来封装响应数据的对象
//设置字符输入流的编码,设置的字符集要和页面保持一致
request.setCharacterEncoding("UTF-8");
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
拦截路径配置:
拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
目录拦截:/user/*:访问/user下的所有资源,都会被拦截
后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
拦截所有:/*:访问所有资源,都会被拦截
使用Filter解决中文乱码:
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 处理请求乱码
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpServletRequest myRequest = new MyRequest(httpServletRequest);
// 处理响应乱码
System.out.println("过滤器拦截");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(myRequest, httpServletResponse);
//放行
System.out.println("过滤器放行");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
Listener 表示监听器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。
监听器可以监听就是在 application
,session
,request
三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
(1)客户端会话跟踪技术:Cookie
(2)服务端会话跟踪技术:Session
Cookie:
发送Cookie:
创建Cookie对象,并设置值:Cookie cookie = new Cookie("key","value");
发送Cookie到客户端使用的是Reponse对象:response.addCookie(cookie);
获取Cookie:
使用Request对象获取Cookie数组:Cookie[] cookies = request.getCookies();
遍历数组
获取数组中每个Cookie对象的值:cookie.getName()和cookie.getValue()
Cookie存活时间:setMaxAge(int seconds(毫秒))
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//发送Cookie
//1. 创建Cookie对象
Cookie cookie = new Cookie("username","zs");
//设置存活时间 ,1周 7天
cookie.setMaxAge(60*60*24*7); //易阅读,需程序计算
//cookie.setMaxAge(604800); //不易阅读(可以使用注解弥补),程序少进行一次计算
//2. 发送Cookie,response
response.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
Session:基于Cookie来实现的
session数据存储在服务端,服务器重启后,session数据会被保存
浏览器被关闭启动后,重新建立的连接就已经是一个全新的会话,获取的session数据也是一个新的对象
session的数据要想共享,浏览器不能关闭,所以session数据不能长期保存数据
cookie是存储在客户端,是可以长期保存
Cookie和Session区别:
存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端
安全性:Cookie不安全,Session安全
数据大小:Cookie最大3KB,Session无大小限制
存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
服务器性能:Cookie不占服务器资源,Session占用服务器资源
EL 表达式的主要作用是 ——>获取数据 表示:${key对应的数据}
域对象:
page:当前页面有效 request:当前请求有效
session:当前会话有效 application:当前应用有效
:相当于 if 判断
//test定义条件表达式
男
女
:相当于 for 循环
数据访问层,持久层(dao mapper):对数据库的CRUD基本操作
表现层(controller servlet):接收请求,封装数据,调用业务逻辑层,响应数据
业务逻辑层(service):对业务逻辑进行封装,组合数据访问层层中基本功能,形成复杂的业务逻辑功能。
表现层调业务层,业务层调持久层,层层接口连接