JSP

作者: 微笑中的你 | 来源:发表于2018-12-21 15:47 被阅读0次

Java Server Pages java服务器页面
是在传统的HTML文件中插入 Java程序段和JSP标记。
其根本是一个简化的Servlet。

jsp文件在第一次被访问时会被web容器翻译成servlet。

  • 第一次访问 index.jsp
  • index_jsp.java
  • 翻译成 index_jsp.class运行
  • 可以在 tomcat的work目录中找到。
  • 下一次访问时,如果内容发生了变化,会重新翻译加载

jsp 常见语法

 <% java 代码 %> 
java代码会被翻译到servlet中的service方法的内部

 <%= java 变量或表达式%>
会被翻译成service方法内部out.print();

 <%! java 代码 %>
会被翻译成 servlet 的成员内容


HTML 注释 在页面中的查看源码中可以看到
<!-- 这里是注释 -->

java 注释 jsp生成的servlet文件中有,页面看不到
/* 这里是注释 */
//单行注释

JSP注释 jsp生成的servlet文件中没有,页面看不到
<%-- 这里是注释 --%>

jsp 常见指令

用来设置jsp页面相关信息,以及用于jsp页面间的通信。

  • page 指令
    设置jsp页面相关信息
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

常见属性:
language 目前只支持java
contentType 用来指定jsp页面的MIME和编码格式,用分号隔开;
pageEncoding 用来设置文件的编码 默认为 ISO 8859-1 需修改为utf-8
import  在jsp页面中用来引入java中的package
session 指定当前页面是否能获取当前用户的session对象,默认为true。如果设置为  
            false,怎不能使用session对象,不然会报500错误。
errorPage 如果当前页面发送错误,网页会重定向到errorPage指定的页面
isErrorPage 允许错误处理
extends jsp页面生成的servlet继承于哪个类。
buffer 设置缓冲区的大小
autoFlush 是否自动刷新缓冲区
isThreadSafe 是否支持多线程访问,默认为true
info 设置jsp页面的介绍信息
isELIgnored 是否支持EL表达式
  • include 指令
    可以用来包含其它页面
    只生成一个java文件及class文件
<body>
 <%@ include file="/header.jsp" %>
    <h1>主体</h1>
 <%@ include file="/footer.jsp" %>
</body>

  • taglib 指令
    声明jsp文件中使用的标签库:jsp标准标签库,第三方标签库,自定义标签库
标签动作
  • 页面包含 动态包含 <jsp:include page="/header.jsp"></jsp:include> 生成多个java和class文件
  • 请求转发 <jsp:forward page="/footer.jsp"></jsp:forward>
隐式对象

jsp翻译成servlet时,servic方法中存在9个已初始化的对象

* request
得到用户请求信息对象

* response
服务器向客户端的响应对象

* final javax.servlet.jsp.PageContext pageContext

* javax.servlet.http.HttpSession session=null;
用来保存用户会话的信息

* final javax.servlet.ServletContext  application
所有用户的共享信息

* final javax.servlet.ServletConfig  config
服务器的配置,可以取得初始化参数

* javax.servlet.jsp.JspWriter  out=null;

* final java.lang.Object    page=this;
当前页面转换后的Servlet类的实例

* javax.servlet.jsp.JspWriter _jspx_out=null;

* javax.servlet.jsp.PageContext _jspx_page_context = null;

* exception 
表示页面发生异常,在错误页中才起作用。只有是错误页面的时候,才会有该对象
out

为什么ddd在最前面??

EL 表达式 Express Lanuage

代替jsp页面中脚本的编写
作用:获取四大域中的数据

<body>

<%
//pageContext 域
    pageContext.setAttribute("name", "张三------pageContext域");
    
//request 域
    request.setAttribute("age", "11--------request域");
    
//session 域
    session.setAttribute("address", "杭州---------session域");

//application域
    application.setAttribute("national", "中国-----------application域");
%>


姓名:${pageScope.name }
<br>
年龄:${requestScope.age }
<br>
地址:${sessionScope.address }
<br>
国籍:${applicationScope.national }

<br>
<hr>
<br>

<h1></h1> el简写  从四个域去查找,从小到大查找 </h1>
<br>
${name } <br>
${age } <br>
${address } <br>
${national } <br>

<br>
<hr>
<br>

${1+1 }
<br>
${empty name }
<br>

</body>

JSTL (JSP Standard Tag Library)jsp标准标签库

可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能
JSTL 有5个库:

  • core 核心库
  • i18N 国际化
  • SQL
  • XML
  • Functions
    使用,在lib中加入 jstl-1.2.jar,然后在jsp页面引入
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    jstl标签通常会在jsp页面中配合 EL 表达式使用
if 标签使用
<body>

<c:if test="${1==1 }">lxf</c:if>

</body>
foreach 标签使用
<hr>
<!-- 遍历字符串集合 -->
<%
    ArrayList<String> strList = new ArrayList<String>();
    strList.add("aaa");
    strList.add("bbb");
    strList.add("ccc");
    strList.add("ddd");
    
    pageContext.setAttribute("strList", strList);
%>
<c:forEach items="${strList }" var="str">
    ${str } <br>
</c:forEach>

<hr>
<!-- 遍历自定义对象集合 -->
<%
    ArrayList<User> userList = new ArrayList<User>();
    User user1 =new User();
    user1.setUsername("lisi");
    userList.add(user1);
    User user2 =new User();
    user2.setUsername("wangwu");
    userList.add(user2);
    User user3 =new User();
    user3.setUsername("chenliu");
    userList.add(user3);
    pageContext.setAttribute("userList", userList);
%>
<c:forEach items="${userList }" var="user">
    ${user.username } <br>
</c:forEach>

<hr>
<!-- 遍历Map -->
<%
    HashMap<String, String> person = new HashMap<String, String>();
    person.put("name", "phonegg");
    person.put("sex", "男");
    pageContext.setAttribute("person", person);
%>
<c:forEach items="${person }" var="entry">
    ${entry.key }:${entry.value } <br>
</c:forEach>

相关文章

  • java基础-day43-JSP

    JSP 1. JSP 1.1 JSP概述 1.2 为什么要用JSP 1.3 JSP语法 1.3.1 JSP语法格式...

  • jsp学习 EL JSTL C标签

    JSP 第一个JSP程序 JSP对比servlet JSP中java脚本元素 JSP原理 JSP的翻译规则 JSP...

  • JSP基础学习笔记(3)--JavaBean

    JSP动作标签:

  • 用session对象实现用户登录

    index.jsp deal.jsp main.jsp exit.jsp

  • JavaWeb之JSP

    八、JSP 目录:什么是JSP、JSP原理、JSP基础语法、JSP指令、9大内置对象、JSP标签 JSTL标签 E...

  • jsp语法

    Jsp语法包含:注释、jsp指令、jsp脚本元素、jsp动作元素。 Jsp注释: Htm...

  • jsp

    jsp介绍 jsp语法 jsp指令 EL表达式 自定义标签 jsp指令 - page jsp指令 - includ...

  • JSP入门

    JSP的基本语法:1.JSP声明语法。2、JSP程序脚本。3、JSP脚本注释。4、JSP内容输出表达式。5、JSP...

  • jsp的内置标签

    jsp:forward 重定向标签

  • Java面试问题

    1、JSP: jsp和servlet的区别 jsp本质就是Servlet,jsp的工作原理是:JSP页面在执行的时...

网友评论

      本文标题:JSP

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