2019-12-13

会话(session)

会话他是一个作用域,可以存值,可以取值,session的id一样,就是同一个会话,不一样,就不是同一个会话

实现session有两种形式

cookies(默认)

cookie被禁用,url重写

当cookie被禁用,session不好使了,在提交的后面加一个;jsessionid=session.getid

servlet2.5,3.0区别

2.5要在web.xml中配置,3.0不用,但得写注解,2.5配置文件会越来越多

jsp

servlet缺点:写html代码费劲,写java代码方便(java代码里嵌入html)

jsp:就是一个servlet,是servlet升级版,写html方便(html里嵌入java代码)

嵌入java代码用<% %>

当你第一次使用jsp时,速度略微慢点

jsp编译过程:先编译成servlet,在编译成.class文件,在运行在虚拟机上.

jsp注释:

使用“//”对单行代码进行注释

使用“/* */”方式对多行代码进行注释

使用“/** */”方式对多行代码进行注释

使用“<%-- --%>”对多行代码进行注释(客户端不能查看到 )

使用“”对多行HTML代码进行注释这(客户端可以查看到)

指令

page指令:

include指令

include 指令用于在运行时将 HTML文件或 JSP页面嵌入到另一个 JSP页面 "

<%@ include file = "/foot.jsp" %>

声明的概念

JSP声明就是在JSP页面中声明Java方法

1:<%!public int x=10;%>(声明标记:声明一个属性,方法,以后不用,用了就错了)

2:标记:书写java代码的地方

3:输出标记

jsp隐式对象

request

也是一个域,可以传值到jsp

request.setAttribute()

第一个参数字符串,第二个object类型

request.getAttribute()

参数是字符串,返回值是object类型

request.getContextPath()工程目录

2种跳转页面方法,第二种request值可以传过去this.findAll(request, response);

隐式对象

输入输出:request ,response,out

作用域通信:session,application,PageContext

Servlet对象:page(Object类型对象)config(配置文件信息)

错误对象:exception

application:作用于整个应用服务器的全局作用域

request:出了这个请求响应就不能用

session:不是一个ID就不能用

pageContext:当前页面作用域

错误

04(路径错误)

500(代码错误)

401(验证错误)

405(doPost/doGet方法不全)

编写显示错误的页面

Jsp El

1.减少JSP页面中Java代码

2.方便JSP中代码的修改,也方便美工修改页面外观

[图片上传失败...(image-a1653d-1576216451512)]

JSP EL的内置对象

requestScope

sessionScope

applicationScope

param

paramValues

el表达式读取顺序

page-request-session-application

当四个域的set方法存的第一个参数一样时,有固定的读取顺序

//内置对象的用法,固定读取

name:{sessionScope.name};


name:${applicationScope.name};


//同request.getParmeter("name")

name4:${param.name};


MVC

是一种编程的思想,包括M V C ,m:数据模型。V:显示层 C:控制层,能使各层都分开,便于我们日常的分工合作,但能增加一点代码的复杂度

定制标记库

增加表现层的处理能力

减少JSP文件中的Java代码

定制标记的作用类似

//导入标记库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

1.set标签,可以向不同的作用域里传值


2.放在catch标签里,即使错误,程序也能继续运行


<%
int p=Integer.parseInt(request.getParameter("page")) ;

%>

page=<%=p %>


//错误信息

e=${e}


3.if标签,跟if语句一样,没有else


name3里面不为空name3=${name3}


4.choose标签,和when标签一起使用,相当于else if,otherwide标签相当于else



p小于50



p不小于50




5循环.标签,从1开始,没回走2,走到10


i={s.count }


6.forTokens标签,以逗号分割

<%
request.setAttribute("aihao", "吃,喝,玩,乐");
%>
session.invalidate();
//关闭session

//当前页面有session,就用当前session,没有也不创建session
<%@page session="false" %>

servlet监听器创建过程

需要配置web.xml文件


com.neusoft.listener.CountListener

package com.neusoft.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class CountListener implements HttpSessionListener {
public static int count=0;

@Override
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub

  count++;
  System.out.println("创建 count="+count);

}

@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stu
count--;
System.out.println("销毁 count="+count);

}

}

package com.neusoft.listener;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MyListener implements HttpSessionAttributeListener {

@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("添加");

}

@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("移除");

}

@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("替换");

}

}

Servlet过滤器

Filter接口,需要实现这个接口,有初始化,执行,销毁3个方法

初始化:在启动服务时调用

执行:在进入另一个窗口时调用

销毁:在关闭服务式调用

需要配置web.xml文件


正常写文件名
cm.neusoft.filter.MyFilter


正常写文件名
/
// /
代表所有都过滤,即使地址写错了,或者没有这个地址,也都会过滤

package cm.neusoft.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter implements Filter{

@Override
public void destroy() {
System.out.println("销毁");

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("执行");
/*

  • 如果有下一个filter,执行下一个filter
  • 如果没有下一个filter,执行原请求
    */
    chain.doFilter(request, response);
    }

@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("初始化");

}

}

由一个jsp跳到一个servlet,然后这个servlet以.forward跳到另一个jsp或者servlet里面,下一个jsp或者servlet不会被拦截(不会被过滤)。

当跳转的时候,以sendRedirect进行跳转的时候,无脑被过滤,以.forward跳转的时候,跳转的界面不会被过滤

你可能感兴趣的:(2019-12-13)