jsp

一、jsp

1、作用

 jsp(全称 java server pages),java的服务器页面

 jsp的主要作用是代替Servlet程序回传html页面的数据

​ Servlet程序回传html页面数据是一件非常繁琐的事情,开发成本和维护成本都极高

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //通过响应的回传流回传html页面数据
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = resp.getWriter();


        writer.write("<!DOCTYPE html>\r\n");
        writer.write("<html lang=\"en\">\r\n");
        writer.write("<head>\r\n");
        writer.write("    <meta charset=\"UTF-8\">\r\n");
        writer.write("    <title>Title</title>\r\n");
        writer.write("</head>\r\n");
        writer.write("<body>\r\n");
        writer.write("    这是html页面数据\r\n");
        writer.write("/body>\r\n");
        writer.write("</html>\r\n");
    }

2、jsp如何访问

jsp页面和html页面一样,都是存放在web目录下。访问也跟访问html页面一样

如:

​ 在web目录下有如下文件:

​ web目录:

​ a.html页面 访问地址是=====>>>http://ip:port/工程路径/a.html

​ b.jsp页面 访问地址是=====>>>http://ip:port/工程路径/b.jsp

3、jsp的本质是什么

jsp页面本质上是一个Servlet程序

当第一次访问jsp页面时,Tomcat服务器会帮我们把jsp页面翻译成一个java源文件,且对它进行编译成为.class字节码程序,打开java源文件发现其中的内容是:
在这里插入图片描述

总结:通过翻译的java源代码可以得到结果:jsp就是Servlet程序

4、jsp头部的page指令

 jsp的page指令可以修改jsp页面中的一些重要属性,或者行为

 <%@ page contentType = “text/html;charset = UTF-8” language = “java”%>

 ①language属性:表示jsp翻译后是什么语言文件,暂时只支持java

 ②contentType属性:表示jsp返回的数据类型是什么,也是源码中response.setContentType{}参数值

 ③pageEncoding属性:表示当前jsp页面文件本身的字符集

 ④import属性:跟java源代码中一样,用于导包,导类

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

 ⑤autoFlush属性:设置当out输出流缓冲区满了之后,是否自动刷新缓冲区,默认值是true

 ⑥buffer属性:设置out缓冲区的大小,默认是8kb

缓冲区溢出错误:
在这里插入图片描述
 ⑦errorPage属性:设置当jsp页面运行时出错,自动跳转去的错误页面路径
在这里插入图片描述

 ⑧isErrorPage属性:设置当前jsp页面是否是错误信息页面,默认是false。如果是true,可以获取异常信息

 ⑨session属性:设置访问当前jsp页面,是否会创建HttpSeesion对象,默认是true

 ⑩extends属性:设置jsp翻译出来的java类默认继承谁

5、jsp中的常用脚本

①声明脚本

格式:

<%! 声明java代码 %>

 作用:可以给jsp翻译出来的java类定义属性和方法甚至是静态代码块、内部类等

练习:

​ 声明类属性

<%!
        private Integer id;
        private String name;
        private static Map<String,Object> map;
    %>

​ 声明static静态代码块

    <%!
        static {
            map = new HashMap<String, Object>();
            map.put("key1","value1");
            map.put("key2","value2");
            map.put("key3","value3");
        }
    %>

​ 声明类方法

    <%!
        public int abc(){
            return 12;
        }
    %>

​ 声明内部类

    <%!
        public static class A{
            private Integer id = 12;
            private String abc = "abc";
        }
    %>

②表达式脚本

格式:<%=表达式%>

作用:在jsp页面上输出数据

练习:

​ 输出整型

​ 输出浮点型

​ 输出字符串

​ 输出对象

    <%=12%>
    <%=12.12%>
    <%="我是字符串"%>
    <%=map%>

表达式脚本的特点:

​ 1.所有的表达式脚本都会被翻译到_jspServlet方法中

​ 2.表达式脚本都会被翻译成为out.print()输出到页面上

​ 3.由于表达式脚本翻译的内容都在_jspServlet方法中,所以_jspServlet()方法中的对象都可以直接使用

​ 4.表达式脚本中的表达式不能以分号结束

③代码脚本

格式:

<%
	java语句
%>

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

练习:

​ 代码脚本—if语句

    <%
        int i = 12;
        if (i == 12){
            System.out.println("帅哥");
        }else {
            System.out.println("骗人");
        }
    %>

​ 代码脚本----for循环语句

    <%
        for (int j = 0;j < 10;j++){
            System.out.println(j);
        }
    %>

​ 翻译后java文件中_jspServlet方法内的代码都可以写

    <%
        String username = request.getParameter("username");
        System.out.println("用户名的请求参数是:" + username);
    %>

代码脚本的特点:

​ 1.代码脚本翻译之后都在_jspServlet方法中

​ 2.代码脚本由于翻译到_jspService()方法中,所以在_jspServlet()方法中的现有对象都可以直接使用

​ 3.还可以由多个代码脚本块组合完成一个完成的java语句

​ 4.还可以和表达式脚本一起组合使用,在jsp上输出数据

④jsp中的三种注释

①html注释

<!--  -->

 html注释会被翻译到java源代码中,在_jspService方法里,以out.write输出到客户端

②java注释

    <%
        //单行java注释
        /*多行java注释*/
    %>

java注释会被翻译到源代码中

③jsp注释

<%--这是jsp注释--%>

6、jsp九大内置对象

内置对象:Tomcat在翻译jsp页面称为Servlet源代码后,内部提供的九大对象

 request:请求对象

 response:响应对象

 pageContext:jsp的上下文对象

 session:会话对象

 application:ServletContext对象

 config:ServletConfig对象

 out:jsp输出流对象

 page:指向当前jsp对象

 exception:异常对象

7、jsp四大域对象

四个域对象分别是:

​ pageContext(PageContentimpl类):当前jsp页面范围内有效

​ request(HttpServletRequest类):一次请求内有效

​ session(HttpSession类):一个会话范围内有效(打开浏览器访问服务器,知道关闭浏览器)

​ application(ServletContext类):整个web工程范围内都有效(只要web工程不停止,数据都在)

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

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

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

<body>
    <h1>scope.jsp页面</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")%>
    session域是否有值:<%=session.getAttribute("key")%>
    application域是否有值:<%=application.getAttribute("key")%>
    <%
        request.getRequestDispatcher("/scope.jsp").forward(request,response);
    %>
</body>

8、jsp中的out输出和response.getWriter输出的区别

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

 out也是给用户做输出使用

out.write("out输出1 <br/>");
out.write("out输出2 <br/>");

9、jsp的常用标签

①jsp静态包含

<%@ include file=""%>

file属性指定你要包含的jsp页面的路径

地址中第一个斜杠表示为http://ip:port/工程路径/ 映射到代码的web目录

静态包含的特点

​ 1.静态包含不糊翻译被包含的jsp页面

​ 2.静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置执行输出

②jsp动态包含

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

page属性是指定你要包含的jsp页面的路径

动态包含也可以像静态包含一样,把被包含的内容执行输出到包含位置

动态包含的特点

​ 1.动态包含会把包含的jsp页面也翻译成java代码

​ 2.动态包含底层代码使用如下代码去调用被包含的jsp页面执行输出

​ jspRuntimeLibrary.include(request,response,"/include/footer.jsp",out,false);

​ 3.还可以传递参数

在这里插入图片描述

③常用标签之请求转发

<jsp:forward page = ""></jsp:forward>

10、jsp练习一:九九乘法表

<html>
<head>
    <title>Title</title>
    <style type="text/css">
        table{
            width:650px;

        }
    </style>
</head>
<body>
<%-- 在就是骗页面中输出九九乘法口诀表--%>
    <table align="center">
    <%
        for (int i = 1;i <= 9;i++){ %>
        <tr>
            <%for (int j = 1;j <= i;j++){ %>
            <td><%=i + "x" + j + "=" + (i*j)%></td>
        <% } %>
        </tr>
    <% } %>
    </table>
</body>
</html>

11、jsp练习二:输出一个表格,里边有10个学生信息

<html>
<head>
    <title>Title</title>
    <style>
        table{
            border: 1px red solid;
            width: 600px;
            border-collapse: collapse;
        }
        td,th{

        }
    </style>
</head>
<body>
    <%
        List<Student> studentList = new ArrayList<Student>();
        for (int i = 0;i < 10;i++){
            int t = i+1;
            studentList.add(new Student(i+1,"name"+t,18+t,"phone"+t));
        }
    %>
    <table>
        <tr>
            <td>编号</td>
            <td>姓名</td>
            <td>年龄</td>
            <td>电话</td>
            <td>操作</td>
        </tr>
    </table>
    <table>
    <% for (Student student :studentList){ %>
        <tr>
            <td><%=student.getId()%></td>
            <td><%=student.getName()%></td>
            <td><%=student.getAge()%></td>
            <td><%=student.getPhone()%></td>
            <td>删除、修改</td>
        </tr>
        <% } %>
    </table>
</body>
</html>

二、监听器

1、Listener监听器

 ①是javaweb三大组件之一,三大组件:Servlet程序、Filter过滤器、Listener监听器

 ②是javaEE的规范,就是接口

 ③监听器的作用:监听某种事务的变化,然后通过回调函数,反馈给客户(程序)做一些相应的处理

2、ServletContextListener监听器

 可以监听ServletContext对象的创建和销毁

 ServletContextListener对象在wen工程启动时创建,在web工程停止时销毁

 监听到创建和销毁之后都会分别调用ServletContextListener监听器的方法反馈

两个方法分别是:

public interface ServletContextListener extends EventListener{
	/**
	*在ServletContext对象创建之后马上调用,做初始化
	*/
	public void contextInitialized(ServletContextEvent sce);

	/**
	*在ServletConext对象销毁之后调用
	*/
	public void contextDestroyed(ServletContextEvent sce);
}

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

步骤:

​ ①编写一个类实现

​ ②实现其两个回调方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值