【JavaWeb】jsp

⭐️ 一.jsp概念及其作用

1.概念:jsp的全称是java server pages,java的服务器界面.
2.作用: 代替servlet程序回传html页面的数据.
因为servlet程序回传html页面的数据是一件非常繁琐的事情,开发成本和维护成本都极高.

  • 用servlet程序回传数据
  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>");
        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");
    }
  • 用jsp回传数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
a.jsp页面
</body>
</html>

⭐️ 二.jsp的本质

本质:是一个servlet程序

当我们第一次访问jsp页面的时候,Tomcat服务器会帮我们把jsp页面翻译成为一个java源文件,并对它进行编译成为.class字节码程序

在这里插入图片描述

我们打开java源文件发现里面的内容为:

在这里插入图片描述
我们跟踪源代码发现,HttpJspBase类直接的继承了HttpServlet类.
也就是说,jsp翻译出来java类,间接的继承了HttpServlet类,也就是说翻译出来的是一个sevlet程序.
我们通过对翻译出来的Servlet程序的观察发现,其底层实现也是通过输出流,把html页面的数据回传给客户端.

⭐️三.jsp的三种语法

1.jsp头部的page指令
jsp的page指令可以修改jsp页面中一些重要的属性或者行为.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
language属性 表示jsp翻译后是什么语言文件,暂时只支持ava.
contentType属性 表示jsp返回的数据类型是什么.也是源码中response.setContentType参数值
pageEncoding属性 表示当前jsp页面文件本身的字符集
import属性 跟java源代码一样,用于导包导类.
autoFlush属性 设置当out输出流缓冲区满了之后,是否自动刷新缓冲区,默认值是true
buffer属性 设置out缓冲区的大小,默认是8kb.
errorPage属性 设置当jsp页面运行出错时,自动跳转到错误页面的路径.
isErrorPage属性 设置当前jsp页面是否是错误页面,默认是false.
session属性 设置访问当前jsp页面,是否会创建HttpSession对象,默认是true.
extends属性 设置jsp翻译出来的java类默认继承谁.
注意:autoFlush属性和buffer属性是给out输出流使用.

2.jsp中的常用脚本
(1).声明脚本(极少用)
格式:<%! 声明java代码 %>
作用:可以给jsp翻译出来的java类定义属性方法甚至是静态代码块,内部类等.

<body>
//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","value2");
       map.put("key3","value3");
      }
  %>
  //3.声明类方法
<%!
    public int abc(){
        return 12;
    }
%>
//4.声明内部类
<%!
    public static class A{
        private Integer id = 12;
        private String abc = "abc";
    }
%>
</body>

(2).表达式脚本(常用)
格式:<%=表达式%>
作用:在jsp页面上输出数据.
特点:
第一点:所有的表达式脚本,都会被翻译到_jspService方法中.
第二点:表达式脚本都会被翻译成为out.print()输出到页面上.
第三点:由于表达式脚本翻译的内容都在_jspService方法中,所以_jspService方法中的对象都可以直接使用.
第四点:表达式脚本中的表达式不能以分号结束.

<%--1.输出整形--%>
<%--2.输出浮点型--%>
<%--3.输出字符串--%>
<%--4.输出对象--%>
<%--5.获得请求参数--%>
<%=12 %> </br>
<%=12.12 %> </br>
<%="我是字符串" %> </br>
<%=map %> </br>
<%=request.getParameter("username")%>

(3).代码脚本
格式:<% java语句 %>
作用:可以在jsp页面中,编写我们自己需要的功能(写的是java语句)
特点:
第一点:代码脚本翻译后都在_jspService方法中.
第二点:代码脚本由于翻译到_jspService方法中,所以在_jspService方法中的现有对象都可以直接使用.
第三点:还可以由多个代码脚本块组合完成一个完整的java语句.
第四点:``代码脚本可以和表达式脚本一起组合使用,在jsp页面上输出数据.

<%--1.if语句--%>
<%--2.for语句--%>
<%--3.翻译后_jspService方法内的代码都可以写--%>
<%
    int i = 12;
    if(i == 12){
%>
     <h1>你好</h1>
<%
    }
%>
<table border="1" cellspacing="0">
<%
    for(int j = 0;j < 3;j++){
%>
    <tr>
        <td><%=j + 1%></td>
    </tr>
<%
    }
%>
<%
    String username = request.getParameter("username");
    System.out.println("用户名的请求参数值是:" + username);
%>

3.jsp中的三种注释
(1).html 注释
在这里插入图片描述html注释会被翻译到java源代码中,在_jspService方法中,以out.writer输出到客户端.

(2).java注释
在这里插入图片描述
java注释会被翻译到java源代码中.

(3).jsp注释
在这里插入图片描述
jsp注释可以注掉jsp页面中所有代码.

⭐️四.jsp的九大内置对象

在这里插入图片描述

⭐️五.jsp四大域对象

四个与域对象分别是:
pageContext (PageContextimpl类) 当前jsp页面范围内有效.
request (HttpServletRequest类) 一次请求内有效.
session (HttpSession类) 一个会话范围内有效,(打开浏览器访问服务器,直到关闭浏览器).
application (ServletContext类) 整个web工程范围内有效(只要web工程不停止,数据都在).

注意:
域对象可以像Map一样是存取数据的对象,四个域对象功能一样,但对数据的存取范围不同.
使用上的优先顺序: pageContext—request—session—application

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<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")%></br>
session:<%= session.getAttribute("key")%></br>
application:<%= application.getAttribute("key")%></br>
<%
    request.getRequestDispatcher("/scope2.jsp").forward(request,response);
%>
</body>
</html>
<h1>scope2.jsp页面</h1>
pageContext:<%=pageContext.getAttribute("key")%></br>
request:<%=request.getAttribute("key")%></br>
session:<%=session.getAttribute("key")%></br>
application:<%=application.getAttribute("key")%></br>
</body>

⭐️六.jsp中的out输出和response.getWriter输出的区别

response中表示响应,经常用于设置返回给客户端的内容(输出).
out也是给用户做输出使用的.
在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
        <%
            out.write("输出</br>");
            out.flush();
            response.getWriter().write("输出r</br>");
        %>
</body>
</html>

注意:
(1).由于jsp翻译之后,底层源代码都是使用out来进行输出,所以一般情况下,我们在jsp页面中统一使用out来进行输出,避免打乱页面输出内容的顺序.
(2).
out.write() 输出字符串没有问题
out.print() 输出任何数据都没有问题.(统一使用)

⭐️七.jsp的常用标签

1.jsp静态包含

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
头部信息<br>
主体内容<br>
<%--
          <%@ include file="" %> 就是静态包含
          file 属性指定你要包含的jsp页面的路径
          地址中第一个斜杠 / 表示为http://ip:port/工程路径/ 映射到代码的web目录
          静态包含的特点:
          1.静态包含不会翻译被包含的jsp页面
          2.静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置执行输出.
--%>
<%@ include file="/include/footer.jsp"%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
页脚信息<br>
</body>
</html>

在这里插入图片描述
2.jsp动态包含

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
头部信息<br>
主体内容<br>
<%--
       <jsp:include page=""></jsp:include> 动态包含
       page 属性是指你要包含的jsp页面的路径
       动态包含和静态包含一样,把被包含的内容执行输出到包含位置
       动态包含的特点:
       1.动态包含会把被包含的jsp页面也翻译成java代码
       2.动态包含底层代码使用如下代码去调用被包含的jsp页面执行输出.
       JsRuntimeLibrary.include(request,response,"/include/footer.jsp",out,false);
       3.动态包含还可以传递参数
--%>
<jsp:include page="/include/footer.jsp">
   <jsp:param name="username" value="root"/>
    <jsp:param name="password" value="root1"/>
</jsp:include>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
页脚信息<br>
<%=request.getParameter("password")%>
</body>
</html>

在这里插入图片描述
3.jsp标签-转发
<%
// request.getRequestDispatcher(“/scope2.jsp”).forward(request,response);
%>
<%- -<jsp:forward page=""></jsp:forward> 就是请求转发标签 功能就是请求转发
page 属性设置请求转发的路径
–%>
<jsp:forward page=“/scope2.jsp”></jsp:forward>

请求转发的使用说明:
在这里插入图片描述

⭐️八.Listener监听器

  • Listener监听器是JavaWeb的三大组件之一
  • JavaWeb三大组件:Servlet程序Filter过滤器Listener监听器
  • Listener是JavaEE的规范(接口)
  • 监听器的作用:监听某种事物的变化,通过回调函数,反馈给客户(程序)去做一些相应的处理.

1.ServletContextListener监听器

  • ServletContextListener可以监听ServletContext对象的创建和销毁.
  • ServletContext对象在web工程启动的时候创建,在web工程停止的时候销毁.
  • 监听到创建销毁之后都会分别调用ServletContextListener监听器的方法反馈.
  • 两个方法分别是:
  • contextInitialized(ServletContextEvent sce)
  • contextDestroyed(ServletContextEvent sce)

ServletContextListener监听器监听ServletContext对象的步骤
1.编写一个类去实现ServletContextListener
2.实现其两个回调方法
3.到web.xml中配置监听器

public class Listener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象被创建了");
    }
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象被销毁了");
    }
}
 <listener>
    <listener-class>com.servlet.listener.Listener</listener-class>
    </listener>
Javaweb JSP宣传系统是一种基于Java语言和JSP技术的网络宣传系统。JSPJava Server Pages)是一种服务器端的动态网页开发技术,它结合了HTML标记语言和Java编程语言,可以方便地生成动态网页内容。 Javaweb JSP宣传系统具有以下几个特点: 首先,Javaweb JSP宣传系统可以实现动态的网页内容生成。通过使用JSP技术,可以在网页中嵌入Java代码,从而实现动态的内容展示。例如,可以根据用户的不同需求显示不同的广告内容,或者根据用户的行为进行个性化推荐。 其次,Javaweb JSP宣传系统具有良好的可扩展性和可维护性。使用Java语言开发的系统一般具有较好的可扩展性,可以方便地添加新的功能和模块。同时,JSP作为一种模板技术,可以将界面和逻辑分离,使得系统的维护更加方便。 再次,Javaweb JSP宣传系统支持与数据库的交互。通过JSP技术,可以方便地与数据库进行交互,实现数据的存取和更新。例如,可以将广告内容以及用户行为数据存储在数据库中,从而实现对广告展示效果的监测和分析。 最后,Javaweb JSP宣传系统具备良好的安全性。通过合理的系统设计和开发,可以防止常见的网络攻击,保护用户的隐私和系统的稳定性。例如,可以采用用户认证和授权机制,限制用户的访问权限,防止未授权的操作。 总之,Javaweb JSP宣传系统是一种基于JavaJSP技术的网络宣传系统,具有动态内容生成、可扩展性、与数据库交互和安全性等优点,适用于各种网站和应用程序的宣传推广需求。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值