JSP(了解)

JSP简介

JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

浅析html,servlet,jsp:

  • Html:用来显示页面,不能写java代码。
  • Servlet:可以写页面,也可以在页面中写代码,但是写页面麻烦。
  • JSP:html+servlet,在页面中可以使用html标签也可以使用java代码,一般Servlet和JSP结合使用,Servlet负责业务,JSP负责显示。(JSP本质也是一个Servlet)

jsp主要构成:HTML网页代码、Java代码片段、JSP标签几部分组成,后缀是.jsp。

注:JSP文件的运行依赖于WEB服务器,也就是说如果不是通过WEB服务器,浏览器是不能直接打开JSP文件的。

JSP基本格式

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	
</body>
</html>

JSP指令写法

<%@ 指令名字 %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
page指令
  1. language:表明jsp页面中可以写java代码
  2. contentType:说明文件是什么类型,告诉浏览器内容类型,以及使用什么编码
  3. pageEncoding jsp内容编码

扩展:
4. extends 用于指定jsp翻译成java文件后,继承的父类是谁。
5. import 导包使用的,一般不用手写。
6. session: 值可选的有true or false ,用于控制在这个jsp页面里面,是否能够直接使用session对象。
7. errorPage:指的是错误的页面, 值需要给错误的页面路径
8. isErrorPage:errorPage 用于指定错误的时候跳转到哪一个页面去。 isErroPage , 就是声明某一个页面到底是不是错误的页面。
9. isThreadSafe 是否单线程模式
10.isELIgnored 是否忽略EL表达式

include指令

include是静态包含指令,主要是用于在当前页面中引入其他页面。
作用:包含另外一个jsp的内容进来,把另外一个页面的所有内容拿过来一起输出。 所有的标签元素都包含进来。

   <%@ include file=”页面地址”%>
taglib指令

定义JSP可以使用的标签库(见JSTL)

	<%@ taglib prefix=""  uri=""%> 
	<%-- uri: 标签库路径
		prefix : 标签库的别名  --%>
		 

JSP脚本元素

在JSP中我们主要通过脚本元素来编写Java代码,这些Java代码一般会在页面被访问时调用。

1.JSP脚本片段

脚本片段是嵌入到JSP中Java代码段,格式以<%开头,%>结尾,两个%号之间编写Java代码块。主要是用于编写一些逻辑代码,比如:if判断、for循环

	<% pageContext.setAttribute("name", "page"); %>
2.JSP表达式

JSP表达式用来直接将Java变量输出到页面中,格式以<%=开头,以%>结尾,中间是要输出的内容。主要是用于把Java表达式的运行结果输出显示到页面上

	<%=pageContext.getAttribute("name")%>
3.JSP声明

JSP声明中的内容会被直接写到类中,格式以<%!开头,以%>结尾,中间是Java代码。主要是用于声明一些成员变量或者成员方法

<%! private int num = 0; %>
<%--相当于在类中声明了一个成员变量  --%>

JSP 动作标签

JSP动作标签与HTML标签不同,HTML标签由浏览器来解析,而JSP动作标签需要服务器(Tomcat)来运行。

  1. <jsp:include page="页面地址"> </jsp:include>
    作用:将其他页面包含到当前页面中,是动态包含,即不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来。
    原理:当使用动态包含时,Tomcat会在生成的Servlet中加入如下代码:
    org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, “target.jsp”, out, false);

动态包含与静态包含的区别:
1):静态包含使用include指令,动态包含使用jsp:inclued标签
2)静态包含会直接将目标页面复制到生成的Servlet中,动态包含是在生成的servlet中使用include()方法来引入目标页面。
3)当目标页面发生改变时,静态包含不能体现,动态包含可以体现

  1. <jsp:forward page="页面地址"></jsp:forward>
    作用:在页面中用于转发操作,前往哪一个页面。
    使用JSP脚本片段编写
<% 
	//请求转发
	request.getRequestDispatcher("页面地址").forward(request, response);
%>	

子标签:<jsp:param value="paramValue" name="paramName"/>
作用:在转发时设置请求参数,通过request.getParameter()在目标页面获取请求参数。

	<jsp:forward page="页面地址"><jsp:param value="paramValue" name="paramName"/></jsp:forward>

获取参数

<%= request.getParameter("paramName")%>

JSP九个隐含对象(内置对象)

隐含对象即JSP中无需创建可以直接使用的对象

四个域对象

pageContext(PageContext):当前页面的上下文,也是一个域对象。
request(HttpServletRequest):HttpServletRequest对象
session(HttpSession):HttpSession对象
application(ServletContext):ServletContext对象

1.域对象主要方法
public void setAttribute(String name, Object o):在当前域中放入数据
public Object getAttribute(String name) :根据名字获取当前域中的数据
public void removeAttribute(String name):根据名字删除当前域中的数据

	使用域对象存储数据<br>
	<%
		pageContext.setAttribute("name", "page");
		request.setAttribute("name", "request");
		session.setAttribute("name", "session");
		application.setAttribute("name", "application");
	%>
	取出四个作用域中的值<br>
	<%=pageContext.getAttribute("name")%>
	<%=request.getAttribute("name")%>
	<%=session.getAttribute("name")%>
	<%=application.getAttribute("name")%>

2.四个域对象范围

  • pageContext(页面) : 当前JSP页面。页面范围内的数据,只能在当前页面中获取,一旦转到其他页面当前域中的数据便失效,不能获取。
  • Request(请求) : 仅限于一次请求。区分一次请求主要是看是不是同一个request。比如:转发是表示一个请求,重定向是多个请求。
  • Session(会话) : 仅限于一次会话(多次请求与响应) 当中。只要没有关闭浏览器或设置session失效,就可以在域中获取到Session中的数据。

打开浏览器到关闭浏览器,这一个完整的上网过程可以叫做一个会话。

  • Application(应用):整个WEB应用。在这个域对象中设置的数据在所有的域中都能获取。

3.PageContext特有功能

1)可以获取指定域中的数据:getAttribute(String name, int scope)
2)可以向指定域中设置数据:setAttribute(String name, Object value, int scope)

关于int scope参数:

  1. PageContext.PAGE_SCOPE 值为 1
  2. PageContext.REQUEST_SCOPE 值为 2
  3. PageContext.SESSION_SCOPE 值为 3
  4. PageContext.APPLICATION_SCOPE 值为 4

3)全域查找:Object findAttribute(String name)
4)可以获取其他八个隐含对象。

其他隐含对象

out(JspWriter):相当于response.getWriter()获取的对象,用于在页面中显示信息。
config(本质:ServletConfig):对应Servlet中的ServletConfig对象。
page(Object):对应当前Servlet对象,实际上就是this。
exception(本质:Throwable):错误页面中异常对象
response(本质:HttpServletResponse):HttpServletResponse对象

JSP运行原理

Tomcat在运行JSP时,并不是直接显示JSP页面,而是将JSP页面转换成了一个Java类,即Servlet。

  • jspTest01.jsp页面

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>haha</h1>
	<% response.getWriter().write("jsp"); %>
</body>
</html>

我们编写的JSP,Tomcat会自动生成Servlet源码再编译成.class文件,这两个文件存放在work目录下。

Tomcat目录介绍
在这里插入图片描述

  • jspTest01_jsp.java
package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class jspTest01_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  private static final java.util.Set<java.lang.String> _jspx_imports_packages;

  private static final java.util.Set<java.lang.String> _jspx_imports_classes;

  static {
    _jspx_imports_packages = new java.util.HashSet<>();
    _jspx_imports_packages.add("javax.servlet");
    _jspx_imports_packages.add("javax.servlet.http");
    _jspx_imports_packages.add("javax.servlet.jsp");
    _jspx_imports_classes = null;
  }

  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }

  public java.util.Set<java.lang.String> getPackageImports() {
    return _jspx_imports_packages;
  }

  public java.util.Set<java.lang.String> getClassImports() {
    return _jspx_imports_classes;
  }

  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }

  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
      return;
    }

    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;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\r\n");
      out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
      out.write("<title>Insert title here</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("\t<h1>haha</h1>\r\n");
      out.write("\t");
 response.getWriter().write("jsp"); 
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>\r\n");
      out.write("\r\n");
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              out.clearBuffer();
            }
          } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}

jspTest01_jsp类继承了org.apache.jasper.runtime.HttpJspBase,HttpJspBase又继承了HttpServlet,所以说(JSP) jspTest01_jsp也是一个Servlet。当我们访问JSP时服务器就是调用该JSP生成的Servlet类来响应请求的。

JSP里的注释

1.写HTML代码的地方,写HTML注释<!-- -->,只能注释HTML。 HTML的注释内容,在浏览器源码里能够看到
2.JSP的注释:<%-- --%>,在浏览器源码里看不到

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JSPJava Server Pages)是一种用于开发动态Web应用程序的Java技术。JSP教材PDF是指一本关于教授JSP编程知识的电子书,通常以PDF格式提供。以下是关于JSP教材PDF的回答。 JSP教材PDF对于学习和了解JSP编程语言非常有帮助。它提供了关于JSP基础知识、语法和概念的详细说明,以及如何在Web应用程序中使用JSP开发动态内容的实际示例。 通过阅读JSP教材PDF,学习者可以了解JSP的工作原理、核心概念和基本语法。教材通常以简单易懂的方式解释这些概念,并提供了大量的示例代码和练习题,以帮助读者更好地理解和应用所学的内容。 JSP教材PDF通常涵盖了JSP的各个方面,包括JSP标签、表达式、脚本元素、内建的JSP对象、JSP指令、JSP动作和JSTL(JSP标准标签库)等。教材还可能涉及与数据库的连接、数据检索和处理、会话管理、错误处理和JSP安全等相关主题。 对于初学者来说,JSP教材PDF是入门JSP编程的一种理想方式。它提供了系统化的学习资源,帮助学习者逐步掌握JSP编程的基础知识和技巧。同时,对于有经验的开发人员来说,教材也可以作为参考手册,供他们查阅和深入研究特定主题。 总而言之,JSP教材PDF对于学习JSP编程是非常有益的。它提供了深入浅出的学习材料,帮助学习者掌握JSP的基本概念和技术,并通过示例和练习引导他们进一步应用所学的知识。无论是初学者还是有经验的开发人员,阅读JSP教材PDF都有助于提升他们的JSP编程技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinking in Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值