javaweb-4-jsp-尚硅谷

一、jsp解决了一个什么样的问题

image-20210305154938176

1、servlet回传数据实例
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/html;charset=UTF-8");
    PrintWriter writer = resp.getWriter();
    writer.write("<!DOCTYPE html>\n\t");
    writer.write("<html lang=\"en\">\n\t");
    writer.write("<head>\n\t");
    writer.write("    <meta charset=\"UTF-8\">\n\t");
    writer.write("    <title>hello</title>\n\t");
    writer.write("</head>\n\t");
    writer.write("<body>\n\t");
    writer.write("    些许郑希\n\t");
    writer.write("</body>\n\t");
    writer.write("</html>\n\t");
}
  • 显而易见:这样很麻烦
2、用jsp回传数据
<%--
  Created by IntelliJ IDEA.
  User: 86186
  Date: 2021/3/6
  Time: 11:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello</title>
</head>
<body>
些许郑希
</body>
</html>
  • jsp需要url为http://localhost:8080/jsp01/hello.jsp
  • jsp文件放置在webapp目录下

二、JSP的本质

  • image-20210306173900061
  • 在运行tomcat之后(这是还不会编译),我们访问到这个jsp时tomcat就会编译这个jsp成servlet程序
    • image-20210306134502184
    • 在这个地方找编译好的文件在哪

三、JSP三大语法

1、头部page指令
  • jsp的头部page指令主要修改jsp页面中一些重要的属性,或者行为

  • <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
  • 属性:

    • language属性:jsp翻译之后的是什么语言文件,暂时只支持java。
    • contentType属性:表示放回的数据类型是什么,对应代码时response.getContentType()参数
    • pageEncoding属性:当前jsp页面本身字符集
    • import属性:用于导包
    • autoFlush属性:out输出流,缓冲区满了就刷新,默认为true。
    • buffer属性:设置缓冲区大小,默认为8kb
    • errorPage属性:设置出错时的跳转界面
      • errorPage表示识别错误之后自动跳转界面中url的“/”表示http://ip:port/工程路径
    • isErrorPage属性:设置当前jsp页面是否为错误界面,默认为false,true时可以获取异常信息
    • session属性:设置访问jsp页面,是否创建HttpSession对象,默认为true
    • extends属性:设置jsp对应的servlet程序默认继承类
2、三大脚本
i、声明脚本
  • 格式:

    <%! 声明式 %>
    
  • 作用:可以给jsp翻译出来的java类定义属性方法静态代码块内部类

  • 内部代码

    • 声明类属性
    • 声明static静态代码块
    • 声明类方法
    • 声明内部类
  • image-20210306195315824

ii、表达式脚本
  • 格式:

    <%= 表达式 %>
    
  • 作用:在jsp页面上输出数据

  • 内部代码:

    • 输出整数
    • 输出浮点数
    • 输出字符串
    • 输出对象
  • image-20210306200605123

  • 示例代码在翻译生成的Servlet程序中是如何实现的?

    image-20210306200750111

  • 注意点:

    image-20210306205532870

    • 使用对象:

    • <%= request.getParameter("username")%>
      
    • image-20210306205700017
    • 输出:zz

    • _jspService方法专门用来响应页面

iii、代码脚本
  • 格式:

    <% java语句 %>
    
  • 作用:

    • 可以在jsp页面中,编写我们自己需要的功能(java语句)
  • 内部代码

    • if语句
    • for语句
3、三种注释

四、jsp九大内置对象

    • request:请求对象(一次请求才有用,可以跳转时传给下一个页面)
  • response:响应对象
    • pageContext:jsp的上下文对象(仅这个jsp页面
    • session:会话对象(一次会话:浏览器打开到关闭)
    • application:ServletContext类的对象(web服务器打开到停止,数据都在)
  • config:ServletConfig类的对象
  • out:jsp输出流对象
  • page:指向当前jsp对象
  • exception:异常对象(iserrorpage属性为true时)
  • image-20210307130058943

五、四大域对象

  • image-20210307130316495
  • 优先顺序
    • pageContext ==>> request ==>> session ==>> application
    • 尽量使用小的可以让数据内存得到最快的释放

六、out输出和response.getwriter()

  • 两个都是内置的输出流他们一起用会出现问题

  • 实例:

    • <%
          out.write("out输出1 <br/>");
          out.print("out输出2 <br/>");
      
          response.getWriter().println("response输出1 <br/>");
          response.getWriter().println("response输出2 <br/>");
      %>
      
    • 按理应该先输出out,后输出response

    • 结果:image-20210307143517605

    • 可以看处先出现了response打印

  • 先了解原理:

    • image-20210307143726968
  • 我们测试一下

    • <%
          out.write("out输出1 <br/>");
          out.flush();
          out.print("out输出2 <br/>");
      
          response.getWriter().println("response输出1 <br/>");
          response.getWriter().println("response输出2 <br/>");
      %>
      
    • 这里我们提前把第一个out输出缓冲区放到了response(甚至比下面的response语句还要先进入response缓冲区),这时会出现啥情况?

    • 结果:image-20210307144110253

  • 由于jsp底层使用out输出,所以我们也最好使用out输出,避免输出内容打乱

  • 另外

    • out.write(参数)
      • 参数会被转换成对应的ASCLL码(故若不是字符就会对应不知道的字符)是一个字符流,最好不要用其他的参数
    • out.prite(参数)
      • 参数会被转换成字符串,然后又传给write方法

七、常用标签

1、静态包含
  • 即一个jsp页面中调用另外一个jsp页面作为一部分
  • 格式:<%@include file="/include/footer.jsp"%>
  • 特点:
    • file属性指定你要包含的jsp页面的路径
    • 第一个斜杆“/”表示http://ip:port/工程路径,映射到代码的web目录
    • 被包含的jsp页面不会被翻译,而是直接被拷贝到主要jsp页面中的源码中,主要jsp页面再被翻译
2、动态包含
  • 格式:<jsp:include page="/include/footer.jsp"></jsp:include>

  • 与静态包含主要区别:

    • 被包含的jsp也同样会被翻译
    • 在本来放置被包含jsp页面里的被拷贝代码处变成了一行代码:
      • image-20210307151647360
  • 两个jsp的关系:

    • 主要jsp会把req、resp、out对象传给被包含jsp,所以他们的缓冲区也几乎一致

    • main.jsp也可以把参数传给footer.jsp

       <jsp:include page="/include/footer.jsp">
           <jsp:param name="username" value="bbj"/>
           <jsp:param name="password" value="123456"/>
       </jsp:include>
           
      //footer.jsp界面获取参数数据
      <%request.getParameter("username");%>
      
3、转发
  • 格式:<jsp:forward page=“footer.jsp”></jsp:forward>

八、练习题

1、九九乘法表
<%="<br/>九九乘法表<br/>"%>
<%
    for (int a=1;a<=9;a++){
        for (int b =1;b<=a;b++){
                out.print(a+"*"+b+"="+a*b+"  ");
            }
        out.print("<br/>");
    }
%>
2、跳转的使用
暂时不需要

九、Listerner监听器

image-20210307164832030

  • ServletContextListener监听器监听servletcontext对象

  • ServletCOntextListener监听器的两个方法

    • contextInitialized(ServletContextEvent sce)
    • contextDestroyed(ServletContextEvent sce)
  • 使用步骤:

    • 编写一个类

    • 实现其两个方法

      public class MyServletContextListener implements ServletContextListener {
          @Override
          public void contextInitialized(ServletContextEvent sce) {
              System.out.println("servletcontext对象创建了");
          }
      
          @Override
          public void contextDestroyed(ServletContextEvent sce) {
              System.out.println("servletContext对象销毁了");
          }
      }
      
    • 到web.xml文件中配置监听器

      <!--  配置监听器-->
        <listener>
          <listener-class>com.wang.jsp.MyServletContextListener</listener-class>
        </listener>
      
          @Override
          public void contextDestroyed(ServletContextEvent sce) {
              System.out.println("servletContext对象销毁了");
          }
      }
      
    • 到web.xml文件中配置监听器

      <!--  配置监听器-->
        <listener>
          <listener-class>com.wang.jsp.MyServletContextListener</listener-class>
        </listener>
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值