jsp1

作者: 不返y | 来源:发表于2024-05-21 17:23 被阅读0次

    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>
    

    相关文章

      网友评论

          本文标题:jsp1

          本文链接:https://www.haomeiwen.com/subject/phyafjtx.html