jsp1

2024-05-21  本文已影响0人  不返y

maven依赖

<dependencies>
  <!-- servlet -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
  </dependency>
  <!-- jsp支持 -->
  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
  </dependency>
  <!-- JSTL表达式支持 -->
  <dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
  </dependency>
  <!-- standard标签库 -->
  <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
  </dependency>
</dependencies> 

jsp

Java Servr Pages -> java服务器页面

jsp本质是一个servlet类,实现的为jsp转servlet代码,实际的html页面仍然为resp的输出流

1. 标准使用

jsp表达式 和 jsp代码片段 ,以及定义全局的jsp片段

jsp注释方式<%-- --%>
jsp表达式<%= %>
jsp代码片段<% %>
全局定义的jsp片段<%! %>
el表达式${ }

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

<%--导入java中的包--%>
<%@ page import="java.util.Date" %>

<html>
  <body>
    <h2>Hello World!</h2>

    <%--jsp表达式,这里的内容会直接展示在页面上--%>
    <%=new Date()%>

    <%--jsp代码片段,这里直接执行java代码,out为resp的输出流,可以直接输出--%>
    <%
    request.setAttribute("age",18);
    out.println("这里用来书写java脚本");
    %>

    <%--全局的jsp片段--%>
    <%!
  //...
  %>

    <%-- el表达式,取数据,
  范围优先级由高到低依次是:
  Page、Request、Session和Application --%>
    ${age}

  </body>
</html>

2. 拆代码

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

<%-- 特殊写法拆代码 --%>
  
<% for (int i = 0; i < 5; i++) { %>
  
<h1>Hello World!</h1>
  
<%}%>

</body>
</html>

3. 自定义错误页面

3.1 在页面中指定异常页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 指定异常页面 --%>
<%@page errorPage="/error/500.jsp" %>
<html>
  <body>
    <h1>主体</h1>
    
    <%-- 手动制造异常 --%>
    <%=1/0%>
    
  </body>
</html>

3.2 web.xml中设置异常页面

web.xml

<!-- 错误页面设置 -->
<error-page>
  <error-code>500</error-code>
  <location>/error/500.jsp</location>
</error-page>
<error-page>
  <error-code>404</error-code>
  <location>/error/404.jsp</location>
</error-page>

4. 模块化

在一个jsp文件中导入引用其他jsp文件

4.1 使用 <%@include

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="common/header.jsp"%>
<html>
  <body>
    <h1>主体</h1>
  </body>
</html>
<%@include file="common/footer.jsp"%>

header.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>
    <h1>header</h1>
  </body>
</html>

footer.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>
    <h1>footer</h1>
  </body>
</html>

访问index.jsp的结果

4.2 使用<jsp:include

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--<%@include file="common/header.jsp"%>--%>
<jsp:include page="common/header.jsp"/>
<html>
<body>
<h1>主体</h1>
</body>
</html>
<%--<%@include file="common/footer.jsp"%>--%>
<jsp:include page="common/footer.jsp"/>

区别:

<%@include 是将三个文件直接拼接成一个文件,可能会出现变量名重复定义等问题

<jsp:include 才是采用相互引用的方式,此为常用

5. 9大内置对象

jsp已经封装好的对象内部可以直接使用

  1. PageContext
  2. Request
  3. Response
  4. Session
  5. Application 【SerlvetContext】
  6. config 【SerlvetConfig】
  7. out
  8. page
  9. exception
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>

    <%-- 四种存储于数据的方法 --%>
    <%
    //数据存于页面
    pageContext.setAttribute("dataPage","pageContext");
    //数据存于请求,可以被请求转发
    request.setAttribute("dataRequest","request");
    //数据存于一次会话,从打开浏览器到关闭
    session.setAttribute("dataSession","session");
    //数据存于服务器,从打开服务器到关闭
    application.setAttribute("dataApplication","application");
    %>

    <%-- 统一寻找获取数据的方法 --%>
    <%
    String d1 = (String)pageContext.findAttribute("dataPage");
    String d2 = (String)pageContext.findAttribute("dataRequest");
    String d3 = (String)pageContext.findAttribute("dataSession");
    String d4=(String)pageContext.findAttribute("dataApplication");
    %>

    <%-- 使用el表达式输出,这里取出的是 存储起来的数据 --%>
    <h3>${dataPage}</h3>
    <h3>${dataRequest}</h3>
    <h3>${dataSession}</h3>
    <h3>${dataApplication}</h3>
    <h3>${data5}</h3>  <%--无效--%>

  </body>
</html>

简单转发

pageContext.forward("/success.jsp");

通用存储方法(不用了)

pageContext.setAttribute("data","str",PageContext.PAGE_SCOPE);

6. JSP标签JSTL标签EL表达式

6.1 JSP标签

导入页面

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

请求转发

<jsp:forward page="common/header.jsp"></jsp:forward>

携参请求转发

<jsp:forward page="page2.jsp">
    <jsp:param name="key1" value="v1"/>
    <jsp:param name="key2" value="v2"/>
</jsp:forward>

page2.jsp中获取参数

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>
    <%=request.getParameter("key1")%>
    <%=request.getParameter("key2")%>
  </body>
</html>

jsp创建对象,通过jsp标签创建对象,设置参数,获取对象参数(不用2)

<jsp:useBean id="newUser"class="com.anyi·pojo.User" scope="page"/>

<jsp:setProperty name="newUser" property="username" value="zhangsan"/>
<jsp:setProperty name="newUser"property="password"value="123456"/>

用户名:<jsp:getProperty name="newUser" property="username"/>
密码:<jsp:getProperty name="newUser" property="password"/>

6.2 JSTL标签

使用的目的,为了方便使用标签写java代码

引入JSTL核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

使用方式:

  1. 引入标签库
  2. 使用标签

在Tomcat也需要引入jstl的包,否则会报错:JSTL解析错误

6.2.1 选择实现
<c:if test="${list.size()>0}" var="ifVal">
    <c:out value="true"/>
</c:if>

<c:out value="${ifVal}"/>
6.2.2 循环实现

c:forEach : var 遍历的值,items要遍历的对象

<%
    ArrayList<Integer> list = new ArrayList<>();
    list.add(0);
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    request.setAttribute("list",list);
%>

<c:forEach var="n" items="${list}">
    <c:out value="${n}"/>
</c:forEach>
上一篇下一篇

猜你喜欢

热点阅读