• Java Web之JSP


      什么是JSP?

      JSP就是一个可以写Java代码的HTML页面

      JSP是什么?

      JSP是Servlet,JSP的本质就是Servlet 

      Tomcat的web.xml文件下有这样几段代码:

      看到下面的通配符了没? *.jsp 不论是什么,只要结尾是.jsp的都会去访问 JspServlet 所以JSP的本质就是Servlet

        写一个JSP之后,会生成.java和.class文件,看看里面其实jsp继承了HttpServlet,再看看它的service方法,里面居然是out.write.......................

    所以,JSP的本质很清楚的。Servlet里面写输出HTML很恶心,很麻烦。所以Java搞了一个JSP,让我们在HTML里面写Java,感觉是很爽,其实底层还是Java在out.Write很恶心的代码,只不过我们开发人员不写了而已

      JSP的基础语法

      来介绍一下JSP的基础语法:

      <!--这个是HTML的注释,会出现在代码中,被Servlet的out给write出来-->
    
        <%---这个是JSP的注释,Java注释,不会出现在代码中--%>
    
        <%
        //这里面可以写Java代码,但是存在于jspServlet的service方法内
            String name="许嵩";
        %>
    
        <%!
            //这里可以写Java代码,但是存在于jspServlet类中作为成员变量,可以写方法和修饰符
            private String name="只有我能写private";
            public void Vae(){};
        %>

    两个注释,两个写Java代码的,没了

      现在学到这里,我希望使用JSP来做一个事情,我希望定义一个变量,然后判断这个变量的大小来在网页上输出一句话,我们来体验一下

      JSP的恶心之处

    <%--
      Created by IntelliJ IDEA.
      User: Vae
      Date: 2019/1/7
      Time: 18:02
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        北京时间:<%=new java.util.Date().toLocaleString()%>
    
        <!--这个是HTML的注释,会出现在代码中,被Servlet的out给write出来-->
    
        <%---这个是JSP的注释,Java注释,不会出现在代码中--%>
    
        <%
        //这里面可以写Java代码,但是存在于jspServlet的service方法内
            String name="许嵩";
        %>
    
        <%!
            //这里可以写Java代码,但是存在于jspServlet类中作为成员变量,可以写方法和修饰符
            private String name="只有我能写private";
            public void Vae(){};
        %>
    
    
        <%
            Integer num=10;
            if (num > 5 ) {
         %>
            这个数字大于5
        <%
            }else if (num < 5) {
          %>
            这个数字小于5
        <%
            }else
          %>这个数字等于5
        <%
        %>
    
    
    
    </body>
    </html>

    结果当然是ok的,真是恶心的写法。。。。。。。。。。。

      JSP的三大指令

    1.page

    2.include

    3.taglib  

    一、page指令

     

    除了上面的page指令还有错误页面

    <%@ page contentType="text/html;charset=UTF-8" language="java"  errorPage="error.jsp" %>

     可以写一个这个,然后新建一个jsp来作为error页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
    <%
        String msg = exception.getMessage();
    %>
    出现异常信息:<%=msg%>

     那我很多的JSP,我不想每个都写这个errorpage,我可以新建一个全局化的错误页面,在WEB-INF文件夹下的web.xml里面配置一下

        <!--全局的初始化错误页面-->
        <error-page>
            <error-code>404</error-code>
            <location>/jspDemo/404.jsp</location>
        </error-page>
        <error-page>
            <error-code>500</error-code>
            <location>/jspDemo/404.jsp</location>
        </error-page>

    然后把JSP里面的errorPage的指令删了就可以了,否则就近原则会选择那个的,现在就可以使用我们全局的错误页面了

    二、include指令 

    这个include指令主要是来解决JSP的静态包含和动态包含的。假如我们的网页有头部,中间部分和底部。那么我们顶部和底部呢其实是不变的,变化的只有我们中间的那一部分而已。所以这里我们要对网页进行模块划分一下。这个其实和我们讲的frameset差不多

     

    先来看看静态包含的代码:

    <%--
      Created by IntelliJ IDEA.
      User: Vae
      Date: 2019/1/7
      Time: 20:37
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <%@include file="top.jsp"%><br>
    
    我是中间<br>
    
    <%@include file="foot.jsp"%><br>
    
    </body>
    </html>

    头部:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    我才是头

    底部:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    我才是脚

    可能你们觉得,我的头部和底部的JSP为啥删的只剩下文字和page指令了。其实是这样的,静态包含的include,相当于把其他的JSP复制粘贴过来,如果我不删除多余的<html><body>标签啥的,全都会复制过来的,一团糟。所以我删了

    试试

    动态包含其实差不多

    <%--
      Created by IntelliJ IDEA.
      User: Vae
      Date: 2019/1/7
      Time: 20:37
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    <jsp:include page="top.jsp">
        <jsp:param name="name" value="许嵩"></jsp:param>
    </jsp:include>    <br>
    
    我是中间<br>
    
    <jsp:include page="foot.jsp"></jsp:include><br>
    
    
    </body>
    </html>

    就是多个参数传递

     三、taglib

      要先导入jar包,我是使用maven直接导入的 ,使用很简单,先引入标签库

     maven直接导入就可以,如果还不行的话,可以把jstl包放到你的WEB-INF下面的lib文件夹里,然后就可以了,jstl的jar包在你的maven仓库里面,搜索一下就有了

    JSP的九大内置对象和四大作用域

     所谓的内置对象就是可以在<%%>里面直接写的,有9个。有的没有提示需要自己手打,例如out.write

    四大作用域,和Servlet的三大作用域差不多

  • 相关阅读:
    springmvc之SimpleUrlHandlerMapping非注解的方式实现url映射
    java之getMethods和getDeclaredMethods & Geoserver之ClassProperties
    geotools 21.2
    java之Method.invoke
    跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算
    华为云SparkRTC面向低时延、大通量传输业务的技术探索
    浏览器、负载均衡 、进程内部层…那些你需要掌握的多级缓存
    家电上云后,智能家居如何构建场景化应用
    带你徒手完成基于MindSpore的CycleGAN实现
    二分查找:一种效率较高的查找方法
  • 原文地址:https://www.cnblogs.com/yunquan/p/10235976.html
Copyright © 2020-2023  润新知