JavaWeb-JSP学习笔记

虽然JSP据说听一遍就行了,但……

朴实且无关的知识

添加框架支持:普通的Maven项目是没有Web支持的,如果想让普通项目变成Web项目,需要添加Web支持(右键项目->添加框架支持)
在这里插入图片描述

自闭和标签
普通的标签<h1>...</h1>
自闭和标签<h1/>
当然,必须是有功能的标签才能这么写,否则就是空标签

前置工作

在pom.xml中添加依赖

    <dependencies>
    	<!--JSTL表达式依赖-->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <!--Servlet依赖-->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
        </dependency>
        <!--standard标签库-->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <!--JSP依赖-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

一共四个包,servlet-apijsp-apijstl-apistandard,在Maven仓库挑选适合的版本即可,其中jstl-apistandard是使用JSTL和EL表达式的依赖

JSP语法

  • JSP表达式
    <%= 变量或表达式 %>
    (等同于EL表达式${ 变量或表达式 }
  • JSP脚本片段
    <% Java代码 %>
  • 脚本片段与HTML穿插
    <% Java代码 %>
    <标签名>html代码或文本</标签名>
    <% Java代码 %>
    比如说:
    <% for(int i = 0; i < n; i++){ %>
    <h1>随便写点什么</h1>
    <% } %>
    就是写n句“随便写点什么”的作用
    再比如:
    <% for(int i = 0; i < n; i++){ %>
    <h1>写了第<%= i+1 %>句话</h1>
    <% } %>
    是html中插入JSP表达式
    会从1到n写“写了第x句话”
    只要你想,甚至可以无限套娃
  • JSP声明
    <%! 函数、静态代码块、全局变量等 %>
  • 注释
    <%-- 注释内容 --%>
    注意:JSP的注释不会显示在网页源码上,而HTML的注释会
  • 导入包
    <%@ page import="包名" %>
    注意,这个导入包与在java中相同,如果用IDEA的话,会自动导入
  • 错误页面A
    首先在正确的地方新建一个jsp文件作为error页面,页面内容可以是文本,也可以导入图片或者两者都有(如果遇到JSP没有模板的问题,可以参考这篇文章——【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
    导入图片的话在<body>中写<img src="图片路径" alt="图片无法显示的提示">
    然后在请求后可能出现错误的jsp文件开头写<%@ page errorPage="Web或Webapp文件夹下error页面jsp文件路径名" %>
    示例:在这里插入图片描述
    在这里插入图片描述
    这里打不开图片的原因是我的图片路径错误了,改成<img src="${pageContext.request.contextPath}/img/error.jpg" alt="500error">就行了,即在前面加上${pageContext.request.contextPath}代表取得部署的应用程序的绝对路径
  • 错误页面B
    如果不知道自己写的JSP可能会报错,就可能会忘记设置错误页面
    所以可以使用这种一了百了的方式——直接在web.xml里面标明错误页面
   <error-page>
       <error-code>404</error-code>
       <location>/error/404.jsp</location>
   </error-page>
   <error-page>
       <error-code>500</error-code>
       <location>/error/500.jsp</location>
   </error-page>
  • 拼接页面
    用到了<%@include file="相对web文件夹的文件路径"%>指令,比如我在web文件夹下新建一个common文件夹,在里面建了header.jsp和footer.jsp两个文件,如图在这里插入图片描述
    然后在需要加页眉和页脚的jsp中用include指令就可以实现页面的拼接了
<%--
 Created by IntelliJ IDEA.
 User: hoppi
 Date: 2021/5/13
 Time: 13:16
 To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>Home</title>
 </head>
 <body>
   <%@include file="common/header.jsp"%>
   <h1>It's a Demo</h1>
   <%@include file="common/footer.jsp"%>
 </body>
</html>

效果:在这里插入图片描述
JSP标签可以起到相同的作用,<jsp:include page="/common/header.jsp"/><%@include file="common/header.jsp"%>的效果是相同的,原理有细微差别,前者是引用文件,后者是拼接代码,并且标签引用文件中的的代码互不影响,include指令则容易出现重名的问题

JSP九大内置对象

  1. pageContext
  2. request
  3. response
  4. session
  5. application(ServletContext)
  6. config(ServletConfig)
  7. out
  8. page
  9. exception

用来存放信息的对象:1、2、4、5
这些对象可以用来存放信息,也可以通过自己的getAttribute方法取出信息
然而,我们可以直接通过pageContext来取出所有这些信息,用到的方法是findAttribute
Tip:在页面输出信息的时候最好用EL表达式${ },因为如果找不到值JSP表达式<%= %>会输出null,而EL表达式不会。另,EL表达式会直接取attribute中的值,JSP表达式则必须在之前的代码中定义该对象才行
这些对象保存信息的作用域

  • pageContext:
    只在当前页面有效
  • request:
    只在一次请求中有效,转发请求会携带此对象中的信息
  • session:
    只在一次会话中有效
  • application:
    在服务器中有效

JSP常用标签

包含标签 <jsp:include page=“xx.jsp”/>

比如:

<%@ page contentType="text/html;charset=UTF-8"%>
<html>
  <head>
    <title>Home</title>
  </head>
  <body>
    <jsp:include page="/common/header.jsp"/>
    <h1>饮茶,OK?</h1>
    <jsp:include page="/common/footer.jsp"/>
  </body>
</html>

在这里插入图片描述

注意:包含标签是直接引用文件,故不会出现重名,举个例子,在上面代码中header.jsp文件里添加一行

<% char a = 'v'; %>
<%= a %>

footer.jsp文件里添加一行

<% int a = 114514; %>
<%= a %>

更新资源
在这里插入图片描述

转发标签<jsp:forward page=“xx.jsp”/>

没什么好注意的

附加信息标签<jsp:param name=“xx” value=“xx”/>

这个标签通常与其他jsp标签一起用,使用此标签可以实现传值

比如

<-- 这是index.jsp文件 -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>Home</title>
 </head>
 <body>
   <jsp:include page="common/header.jsp"/>
   
   <jsp:include page="forgotten.jsp">
     <jsp:param name="name" value="hoppinging"/>
   </jsp:include>
   
   <jsp:include page="common/header.jsp"/>
 </body>
</html>
<-- 这是forgotten.jsp文件 -->
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
   <title>The Forgotten</title>
</head>
<body>
   <img src="${pageContext.request.contextPath}/img/TheForgotten.png" alt="The Forgotten">
   <br>
   user: <%= request.getParameter("name")%>
</body>
</html>

forgotten.jsp就是一张图片+取出参数语句
效果:
在这里插入图片描述

JSTL常用标签

JSTL标签库的使用是为了弥补HTML标签的不足,说明请参考JSTL标签库
我们只需要掌握核心标签的使用,至于SQL标签或XML标签这种,一般是用的时候查就好了,当然,不掌握也没事,主要是为了让代码看起来更整齐

使用JSTL标签库需要在JSP文件开头声明引用
比如用JSTL核心标签就要写<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
核心标签具体用法如图在这里插入图片描述

注意:导入标签库Tomcat可能会报错,像org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55)这种的,是因为Tomcat服务器中没有JSTL的包,这时需要从项目中找到这个包,复制到Tomcat的lib目录下,如图所示在这里插入图片描述在这里插入图片描述
当然如果你用的Tomcat10(我用的这个,太垃圾不推荐使用),那么以上方法不适用,请参考这篇文章,然后同样把JSTL包复制到Tomcat的lib下就好了

尚待解决的问题:我的<c:if>和<c:choose>标签无法使用,查了很多方法,也不知道怎么解决,有大佬有好的方法欢迎留言‍_(:з」∠)_

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值