我是靠谱客的博主 虚心小白菜,最近开发中收集的这篇文章主要介绍jsp复习资料jsp,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

jsp

什么是jsp,它有什么用?

  1. jsp的全称是java.server.pages java的服务器页面
  2. jsp的主要作用是代替servlet程序回传html页面的数据
  3. 因为servlet程序回传html页面数据是意见非常繁琐的事情。开发成本和维护成本都极高

jsp的本质是什么

  1. jsp页面本质上是一个Servlet程序
  2. 当我们第一次访问jsp页面的时候,Tomcat服务器会帮我们把jsp页面翻译成为一个java源文件,并且对它进行编译成为.class字节码文件。
  3. jsp直接继承了HttpServlet类,也就是说,jsp翻译出来的Java类,它间接了继承HttpSerlvet类。也就说,翻译出的是一个Servlet程序
  4. 总结:通过翻译的java源代码我们就可以得到结果:jsp就是Servlet程序

jsp头部的page指令

<%@ page contentType="text/html;charset=UTF-8"
         pageEncoding="utf-8"
         buffer="8kb"
         autoFlush="true"
         errorPage="/err500.jsp"
         language="java" %>
<%--
errorPage表示错误后自动跳转去的路径
这个路径一般都是以斜杠打头,他表示请求地址为http://ip/port/工程路径/
映射到代码的web目录
--%>
language属性表示jsp翻译后是什么语言文件。目前只支持Java
contentType属性表示jsp返回的数据类型是什么,也是源码中response.setContentType()参数值
pageEncoding属性表示当前jsp页面文件本身的字符集
import属性跟java源代码一样,用于导包,导类

--------------------------------------------------两个属性是给out输出流使用---------------------------------------------------

autoFlush属性设置当out输出流缓冲区满了以后,是否自动刷新冲级区。默认是true
buffer属性设置out缓冲区大小,默认是8kb

--------------------------------------------------两个属性是给out输出流使用---------------------------------------------------

errorPage属性设置当jsp页面运行时出错,自动跳转区的错误页面路径
isErrorPage属性设置当前jsp页面是否是错误信息页面,默认是lalse。如果是true可以获取异常信息
session属性设置访问当前jsp页面,是否会创建HttpSession对象,默认是true
extends属性设置jsp翻译出来Java类默认继承谁

声明脚本

<%--1. 声明类属性--%>
<%!
    private Integer Id;
    private String name;
    private static Map<String,Object> map;
%>
<%--2. 声明static静态代码块--%>
<%!
    static {
        map = new HashMap<String, Object>();
        map.put("key1","value1");
        map.put("key2","value3");
        map.put("key3","value3");
    }
%>
<%--3. 声明类方法--%>
<%!
    public void fangfa(){
        int i;
    }
%>
<%--声明类--%>
<%!
    public class A{
        private Integer id=12;
        private String name;
    }
%>

表达式脚本

表达式脚本的格式是: <%=表达式%>

表达式脚本的作用就是在 jsp 页面上输出数据

代码脚本的格式是:

代码脚本的作用是:可以在jsp页面中,编写我们自己需要的功能(写的是Java语句)

多个代码块可以组合成一个完整的Java语句

代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据
<%
   java语句
%> 

jsp九大内置对象

request请求对象
response响应对象
pageContextjsp的上下文对象
session会话对象
applicationServletContext对象
configServletConfig对象
outjsp输出流对象
page指向当前jsp的对象
exception异常对象

jsp四大域对象

四大域对象分别是:

pageContext (PageContextImpl类)当前 jsp 页面范围内有效
request (HttpServletRequest类)一次请求内有效
session (HttpSession类)一个会话范围内有效(打开浏览器访问服务器,知道关闭浏览器)
application (ServletContext类)整个web工程范围内都有效(只有web工程有效,数据都在)

域对象是可以像Map一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存取范围

虽然四个域对象都可以存取数据,在使用上他们是有优先顺序的。

四个域在使用的时候,优先顺序分别是,他们从小到大的范围的顺序

pageContext>>request>>session>> application

<h1>scopejsp页面</h1>
<%
//往四个域中分别保存了数据
    pageContext.setAttribute("key","pageContext");
    request.setAttribute("key","request");
    session.setAttribute("key","session");
    application.setAttribute("key","application");
%>
pageContext域是否有值<%=pageContext.getAttribute("key")%><br>
request域是否有值<%=request.getAttribute("key")%><br>
session域是否有值<%=session.getAttribute("key")%><br>
application域是否有值<%=application.getAttribute("key")%><br>
<%
    request.getRequestDispatcher("/scope2.jsp").forward(request,response);
%>
<h1>这里是scope2页面</h1>
pageContext域是否有值<%=pageContext.getAttribute("key")%><br>
request域是否有值<%=request.getAttribute("key")%><br>
session域是否有值<%=session.getAttribute("key")%><br>
appliction域是否有值<%=application.getAttribute("key")%><br>
<--代码问题  pageContext不能使用setAttribute方法  导入jar包 两者有依赖关系--> 
       <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>

jsp_out和response输出流的区别

response中表示响应,我们经常用于设置返回给客户端的内容(输出)

out也是给用户做输出使用的

<%
    out.write("输出out1</br>");
    out.flush();
    out.write("输出out2</br>");

    response.getWriter().write("输出response1</br>");
    response.getWriter().write("输出response2</br>");
%>

out和response都有自己的缓冲区(out缓冲区和response缓冲区)

当jsp页面中所有的代码执行完成后会做出下面两个操作

out.flush可以不写,默认会自动追加

  1. 执行out.flush()操作,会把out缓冲区中的数据追加写入到response缓冲区末尾
  2. 会执行response的刷操作,把全部数据写个客户端
  3. 由于jsp翻译之后,底层源代码都是使用out类进行输出,所有一般情况下,我们在jsp页面中同一使用out来进行输出。避免打乱页面输出内容的顺序

out.wirte() 输出字符串都没有问题 ::因为源代码中对于类型的输出做了char类型的强转

out.print() 输出任意数据类型都没有问题(都转化成为字符串后掉头的write输出)

深入源码,浅出结论,在jsp页面中,可以同一使用out.print()输出

jsp静态包含

<body>
头部信息<br>
主题内容<br>
<%--
<%@include file="/include/foot.jsp"%>就是静态包含
file属性指定你要包含的jsp页面的路径
地址中的第一个斜杠/ 表示为 http://ip:port/工程路径/映射到代码的web目录
静态包含的特点:
    1. 静态包含不会翻译被包含的jsp页面
    2. 静态包含其实十八被包含的jsp页面的代码拷贝到包含的位置执行输出
--%>
<%@include file="/include/foot.jsp"%>
</body>
</head>
<body>
脚步
修改
</body>

动态包含

<%--
<jsp:include page="foot.jsp">   这是动态包含
page属性是指定你要包含的jsp页面的路径
动态包含也可以像静态包含一样,把被包含的内容执行输出到包含位置
动态包含的特点:
   1. 动态包含会把包含的jsp页面也翻译成java代码
   2. 动态包含底层代码使用如下代码区调用被包含的jsp页面执行输出。
   3. 动态包含,还可以传递参数
--%>
<jsp:include page="foot.jsp">
    <jsp:param name="username" value="root"/>
    <jsp:param name="password" value="1234"/>
</jsp:include>
<body>
脚步
修改
<%=request.getParameter("username")%>
<%=request.getParameter("password")%>
</body>

请求转发

<%--<jsp:forward page="/scope2.jsp">是否请求转发镖旗爱你,他的功能就是请求转发
   page属性设置请求转发的路径
--%>
<jsp:forward page="/scope2.jsp">

</jsp:forward>

练习:

<%--九九乘法表--%>
<<body>
    <table>
<%for (int i = 0; i < 10; i++) {%>   <tr>
        <% for (int j = 1; j <= i; j++) {%>
      <td>
            <% out.print(j+"x"+i+"="+i*j);%>
      </td>
       <% }%>
    </tr>
    <%}%>
</table>
</body>

练习二:程序要不报500错误,首先要先访问

<%--练习二:jsp输出一个表格,里面有10个学生信息--%>
<%
    List<Student> studentList=new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        int t=i+1;
        studentList.add(new Student(t,"name"+t,"phone"+t,18+t));
    }
%>

<table>
<%for (Student student:studentList) {%>
     <tr>
        <td><%=student.getId()%></td>
         <td><%=student.getAge()%></td>
         <td><%=student.getPhone()%></td>
         <td><%=student.getName()%></td>
     </tr>
    <%}%>
</table>
<%--输出10的学生信息--%>
public class Student {
    public Student(){}
    private Integer id;
    private String name;
    private String phone;
    private Integer age;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", phone='" + phone + ''' +
                ", age=" + age +
                '}';
    }

    public Student(Integer id, String name, String phone, Integer age) {

        this.id = id;
        this.name = name;
        this.phone = phone;
        this.age = age;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }

    public Integer getAge() {
        return age;
    }
}

什么Listener是监听器

  1. Listener监听器它是Javaweb的三大组件之一,Javaweb的三大组件分别是:Servlet程序,Filter程序,Listener监听器。
  2. Listener它是javaEE的规范,就是接口
  3. 监听器的作用是,监听某种事物的变化,然后通过回调函数,反馈给客户(程序)去做一些相应的处理

ServletContextListener监听器

  1. ServletContextListener它可以监听ServletContext对象的创建与销毁
  2. ServletContext对象在web工程启动的时候创建,在web工程停止的时候销毁
  3. 监听到创建和销毁之后都会分别调用ServletContextListener监听器的方法反馈

两个方法分别是:

public interface ServletContextListener extends EventListener {
    //初始化监听器方法,在系统初始化时自动调用
    default void contextInitialized(ServletContextEvent sce) {
    }
//销毁监听器,在系统运行结束时自动销毁
    default void contextDestroyed(ServletContextEvent sce) {
    }

如何使用ServletContextListener监听器监听ServletContext对象。

使用步骤如下:

  1. 编写一个类实现ServletContextListener接口
  2. 实现其两个回调方法
  3. 到web.xml中配置监听器
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContextLister对象被创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContextListener被销毁了");
    }
}
<!--    配值监听器-->
    <listener>
        <listener-class>com.atguigu.Listener.MyListener</listener-class>
    </listener>

最后

以上就是虚心小白菜为你收集整理的jsp复习资料jsp的全部内容,希望文章能够帮你解决jsp复习资料jsp所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部