jsp

JSP

jsp概述

概念:全称java server page.java服务器页,根本是一个简化的servlet设计

在html文件中加入java程序片段和jsp标记,就构成了jsp网页

作用

主要代替servlet传输网页数据,servlet传输数据太麻烦

jsp文件第一次访问jsp->java->class 第二次访问直接访问编译后的class文件

jsp与servlet的联系与区别

概念:jsp本质上就是一个servlet,但是二者的创建方式不一样,jsp运行时会被编译为java文件,servlet完全是java程序代码构成

jsp主要用于视图显示(显示数据),servlet主要用于逻辑处理

jsp页面构成,指令元素

jsp页面由jsp指令,网页内容构成,java代码构成

<% java代码%>
<%
    String str="jsp";/*定义变量*/
     out.print(str);
%>
<%--注释内容--%>
<%--
String str="jsp";
--%>

注意:修改jsp文件不需要重启Tomcat服务器,修改web.xml,java代码,配置文件需要重新启动Tomcat

jsp指令对象

概念:jsp可以通过指令元素影响服务器编译成java类的整体结构

语法:<%@指令名 {属性名=“值”}*%>

常用的三个指令:page,include,taglib

page指令

概念:page指令为容器提供当前页面的使用说明,一个jsp文件可以包含多个page指令

<%@ page 属性=""%>

常用属性

<%@page pageEncoding="utf-8" %><%--设置编码格式--%>
<%@page language="java" %><%--定义语言类型--%>
<%@page contentType="text/html; ISO-8859-1" %><%--定义响应内容--%>
<%@page import="java.util.*,java.util.ArrayList" %><%--导包--%>

include指令

include指令就是就是用静态包含其他网页

静态包含:就是指编译期间,用包含的页面也编译到当前页面的java文件中,“合二为一”,数据可以共享.

<%@include file="Demo1.jsp"%>

动态包含:在jsp页面中动态包含另一个资源,分开编译,在运行期间访问被包含的页面,并将响应结果同包含页面的结果合并,生成最终响应

<jsp:include page="Demo1.jsp"></jsp:include>

jsp内置对象

在jsp页面中包含九个内置对象(不用声明和创建就可以使用)

out向客户端输出

request封装用户请求

response向用户做出响应

session客户和服务器间的对话

application于服务器启动时开始时运行

pageContext用于访问page的各种对象

exception异常

config初始化要用的参数

page jsp页面本身

out对象

out对象是javax.servlet.jsp.JspWriter的实例

out对象主要用于将内容写入jsp页面中实例的缓冲流

out对象中两个重要方法:print和println

out.print("hello world");

request对象

request对象是javax.servlet.http.HTTPServletRequest的实例,封装了一次请求,客户端的请求数据都被封装在给对象里.

请求转发

请求转发是指将请求再转发到另外一个资源,此过程在同一个请求范围中,转发后浏览器地址栏内容不变.

请求转发使用RequestDispatcher接口中的forward方法来实现,该方法可以把请求转发到另外一个资源,并响应到浏览器

RequestDispatcher requestDispatcher = req.getRequestDispatcher("success.jsp");//告诉转发的内容
requestDispatcher.forward(req,resp);//实际转发的动作
req.setAttribute(String name,object value);//将value属性存储到req对象中
req.getAttribute(String name);//返回name属性的值
removeAttribute(“name”);//移除name属性

response对象

response对象实现了javax.servlet.http.HTTPServletResponse的实例

重定向

重定向是指页面重新定位到某个新的地址,之前的请求失效,进入一个新的请求,并且跳转后浏览器地址发生改变

重定向通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求

重定向和请求转发的区别

在这里插入图片描述

session对象

HttpSession类的实例

session的生命周期

创建:会话开始时,在服务器创建

销毁:1.服务器关闭时

​ 2.客户端长时间不与服务器交互(默认30分钟)

​ 3.安全退出调用invalidate();

session对象用来管理会话(一个过程),从会话开始到会话结束的过程

会话:打开浏览器,连接到服务器,会话开始,关闭浏览器,会话结束

运行机制

1.客户端在第一次请求服务器端,会生成一个session对象(用于保存客户的信息)

2.每个session对象都会有一个唯一的SessionID

特点

session对象同一次会话数据共享

session储存在服务器端

session是在同一个用户请求时共享,即在同义词会话中,所有的页面可以访问到session,但是切换浏览器就要重新进行会话过程

注意:Session存储在服务器端.Cookie存储在客户端

application对象

是java.servlet.ServletContext的实例

这个对象在jsp页面的整个声明周期中都代表的这个jsp页面

通过向application中添加属性,所有组成web应用的jsp文件都能访问到这些属性

pageContext对象

是javax.servlet.jsp.PageContext的实例,用来代表整个jsp页面

exception对象

是java.lang.Throwable的实例

该实例代表其他页面中的异常和错误,只有当页面是错误页面,即page的isErrorPage属性为true是,该对象才可以使用

page对象

表示当前对象,相当于java中this

config对象

这个对象允许访问Servlet或jsp引擎的初始化参数

Cookie

通过cookie对象,可以从服务器端向客户端响应一些信息,这些信息存储在浏览器的内存中

设置cookie

  1. 创建一个cookie对象:调用cookie的构造函数,使用cookie名称和值作为参数

    Cookie cookie = new Cookie(“account”,account);

  2. 设置有效期

    cookie.setMaxAge();

  3. 将cookie发送到HTTP响应头

    response.addCookie(cookie);

  4. 获取cookie值

    使用java方法获取

     Cookie []httpCookie =request.getCookies();
        String password =  "";
        String account = "";
        if (httpCookie!=null){
            for (Cookie c:httpCookie){
                if (c.getName().equals("acccok")){
                    account=c.getValue();
                }
                if (c.getName().equals("pwdcok")){
                    password = c.getValue();
                }
            }
        }
    

cookie和Session对象的区别

​ session cookie

保存位置 服务器 客户端

安全性 安全 不安全

保存的内容 Object String

过滤器

概念

在请求到达服务器资源之前(Servlet/jsp)之前,过滤器可以拦截某些请求

在过滤器中皆可以添加一些相应的代码处理,可以减少代码冗余

Filter接口

filter接口是过滤器类必须实现的接口,该接口有三个方法

init(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次.参数filterConfig可以获得filter的初始化参数.

doFilter(ServletRequest request, ServletResponse response, FilterChain chain):该方法是对filter进行过滤操作的方法,是最重要的方法.

过滤器必须实现的方法.方法体中可以对request和response进行预处理.其中FiterChain可以将处理后的request和response对象传递到过滤链上的下一个资源

destory():该方法在容器销毁前被调用

应用场景

自动登录

统一设置编码格式

 @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       // System.out.println("dofilter");
        System.out.println("编码设置");
        servletRequest.setCharacterEncoding(encod);//执行统一的编码设置
        filterChain.doFilter(servletRequest,servletResponse);//请求向下继续进行,到达过滤器链上的下一个资源
    }

xml文件配置filter

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>com.lsy.filter.EncodingFilter</filter-class>
    <init-param>
        <param-name>encod</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern><!--全部文件进行过滤-->
</filter-mapping>

监听器

servlet监听器是servlet规范中的一种特殊的类,用于监听servletContext,HTTPSession和ServletRequest等域对象的创建和销毁事件,

以及监听这些域对象中属性发生修改的事件

分类

按监听对象分类

  1. 用于监听应用程序对象(ServeletContext)
  2. 用于监听用户会话对象(HttpSession)
  3. 用于监听请求消息对象(ServletrRequest)

ServletContext和HttPSession

package com.lsy.login.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class ObjectListener implements ServletContextListener, HttpSessionListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("servletContext创建");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("servletContext销毁");
    }
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("session对象创建");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("session对象销毁");
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值