JavaWeb笔记(4)

JSP

JSP技术

JSP的简介

  • 什么是JSP
    JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品。
    在JSP中java代码与HTML发共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容。
  • 为什么出现JSP技术
    1997年Java Web中只有servlet,生成html技术也需要在servlet中完成,虽然servlet 也可以完成所有的输出工作,但是使用过程比较麻烦,部署也比较复杂。为了克服这些缺点,1999年SUN公司推出了JSP技术。该技术在生成HTML代码的时候相比servlet方便了许多
  • 对于servlet和JSP技 术的理解:
    • servlet:在java代码中嵌入html代码,更擅长编写java业务代码。
    • JSP:在html中 嵌入java代码,更擅长页面展示。

JSP的运行原理

  • jsp在第一次被访 问时会被Web容器翻译成servlet,即jsp本质上就是Servlet
  • 过程:
    第一次访间---->helloServlet. jsp---- >hel loServlet_ jsp. java---->编译运行
  • 被翻译后的servlet在Tomcat的work目录中可以找到,使用IDEA会单独为项目维护- -个目录
  • 通过观察发现jsp会转化为java文件,并且间接的继承了HttpServlet,实现了其中的主要方法,init、 service、 destory, 并且将html代码通过java方式输出给浏览器

JSP的脚本和注释

  • JSP脚本
    • < %java代码%>
    • <%=java变量或表达式>
    • <%!Java代码%>
  • JSP注释
    • Html注释: <!--注释内容-->
    • java注释: //单行注释/*多行注释*/
    • jsp注释: <%--注释内容--%>

JSP指令

JSP指令是指导jsp翻译和运行的命令,jsp包括三大指令

JSP指令内容

  • page指令
    • 属性最多的指令(实际开发中page指令默认)属性最多的一个指令,根据不同的属性,指导整个页面特性格式:
      <%@ page属性名1= "属性值1”属性名2= "属性值2" ...%>
    • 常用属性如下:
      • language: jsp脚本中可以嵌入的语言种类contentType: response. set
      • ContentType (text/html ;charset=UTF- 8)
      • session:是否jsp在翻译时自动创建session
      • import:导入java的包
      • errorPage:当当前页面出错后跳转到哪个页面
  • include指令
    • 页面包括(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中
    • 格式:<%@ include file="被包含的文件地址"%>
  • taglib指令
    • 在jsp页面中引入标签库(jstl标签库、struts2标签库)
    • 格式:<%@ tagilb uri="标签库地址" prefix="前缀"%>

JSP隐式对象

什么是JSP隐式对象

  • 当jsp被翻译成servlet的时候,service方法内部有九个对象定 义并初始化,这九个对象被称为隐式对象

JSP标签

什么是JSP标签

  • JSP标签用来控制JSP的行为,执行- -些常用的JSP页面动作,通过标签可以实现很多行
    java代码才能够实现的功能,比如请求转发的功能

常用的JSP标签

  • 页面包含(动态包含) : <jsp:include page="被包含的页闻"/>
  • 请求转发: <jsp:forward page=" 要转发的资源”/>

JSTL

EL表达式

EL表达式概述

  • EL全名为Expression Language. 它提供了在JSP中简化表达式的方法,让Jsp的代码更加简化,可以嵌入在jsp页面内部,减少jsp脚本的编写。

EL从域中取数据

  • jsp脚本: <%=request.getAttribute (name)%>
  • EL表达式替代上面的脚本: ${requestScope.name}
  • EL最主要的作用是获得四大域中的数据,格式${EL表达式}
    • EL获得pageContext域中的值: $(pageScope.key);
    • E获得request域中的值: $GrequestScope.key);
    • EL获得session域中的值: ${sessi onScope.key}:
    • EL获得application域中的值: $aplicationScope.key};
    • El从四个域中获得某个值$(key};
    • —同样是依次从pageContext域,request域, sessision域,application域中获取属性,在某个域中获取后将不再向后寻找。

EL的内置对象和执行表达式

EL的内置对象

  • pageScope, requestScope, sess ionScope, applicationScope-获取JSP中域中的数据
  • param, paramValues - 接收参数.
    相当于request.getParameter() request.getParameterValues()
  • header, headerValues-获取请求头信息
    相当于request.getHeader (name)
  • ini tParam-获取全局初始化参数
    相当于this.pgetServletContext(). getInitParameter(name)
  • cookie-WEB开发中cookie
    相当于request.getCookies()-->cookie.getName ()--->cookie.getValue()
  • pageContext - WEB开发中的pageContext.
  • pageContext获得其他八大对象I

JSTL简介

简介

  • JSTL (JSP Standard Tag Library), JSP标准标签库, 可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同EL-一样也是要代替js页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库

JSTL-if标签

FollowServlet.java

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "FollowServlet",urlPatterns = "/follow")
public class FollowServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String follow=request.getParameter("follow");
            request.setAttribute("follow",follow);
            request.getRequestDispatcher("/jstl/jstl.jsp").forward(request,response);
    }
}

jstl/jstl.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--使用JSTL的时候需要配合EL表达式--%>
<c:if test="${requestScope.follow eq 1}">
   取消关注
    <%--如果test等于true 则会执行内部代码,如果是false则不会执行内部代码--%>
</c:if>
<c:if test="${requestScope.follow eq 0}">
    关注
    <%--如果test等于true 则会执行内部代码,如果是false则不会执行内部代码--%>
</c:if>
</body>
</html>

JSTL-forEach标签

  • <e: forEach> 用来循环遍历集合对象中的元素,如List、 Map、 数组等和java代码中的for循环-一样,它也有两种形式。
    jstl/jstl.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--使用JSTL的时候需要配合EL表达式--%>
<c:if test="${requestScope.follow eq 1}">
   取消关注
    <%--如果test等于true 则会执行内部代码,如果是false则不会执行内部代码--%>
</c:if>
<c:if test="${requestScope.follow eq 0}">
    关注
    <%--如果test等于true 则会执行内部代码,如果是false则不会执行内部代码--%>
</c:if>

<%
    List<User> list=new ArrayList<>();
    User user1=new User();
    user1.setName("小强");
    user1.setSex("男");
    User user2=new User();
    user2.setName("小丽");
    user2.setSex("女");

    list.add(user1);
    list.add(user2);
    for (int i = 0; i < list.size(); i++) {
        System.out.println(i);
    }
    request.setAttribute("list",list);

    for (User user : list) {
        System.out.println(user.getName());
    }

%>

<c:forEach begin="0" end="${list.size()-1}" var="i">
    ${list[i].name}
</c:forEach>

<%--items代表的是一个集合或者是数组--%>
<c:forEach items="${list}" var="user">
    ${user.name}
</c:forEach>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值