JSP基础----JSP的基础知识

 一、什么是JSP

全称:Java Server Pages(java服务器页面)。和Servlet一样,是sun公司定义的一种动态网页开发技术

特点:基于html模板,可以再html模板嵌入java代码和jsp中的标签。

  •  html:静态页面
  • css:修饰美化html的页面
  • javaScript:动态修改html页面和css样式
  • Servlet:运行在服务器上的java程序。适合编写java代码,写网页困难。
  • JSP:适合编写动态内容,不合适写java代码,主要用于显示页面。底层其实就是Servlet

二、为什么要使用JSP?

  • jsp性能好,可以再html页面中动态嵌入元素
  • 服务器调用的是已经编译好的jsp文件
  • jsp基于java Servlet Api,有很多强大企业的支持
  • JSP 可以与处理业务逻辑的Servlet一起使用,或该模板被java Servlet 模板引擎所支持。

2、1 JSP的优势

与纯Servlet相比:jsp可以很方便的编写或者修改或者修改HTML网页而不用去面对大量的println语句

与javascript相比:虽然javascript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。

与静态的HTML相比:静态的HTML不包含动态的信息

三、JSP的基本语法

 3、 1   jsp的语法格式

jsp页面中可以包含任意量的java语句、变量、方法或者表达式

语法格 式 :  

                               <%  java代码 %>  要以分号结尾的

    声明全局变量:<%! int i=0;%>   记得加感叹号

    声明局部变量:<% int i=0;%>

    输出变量 : <%= 2+3  %>    不要加分号

3、2  JSP的注释

  格式:         <%--   注释  --%>:安全,省流量,不加载这种格式的注释

   网页注释:<!-- 注释--> :不安全,耗流量,加载这种格式的注释

四、JSP的三大指令

告诉JSP引擎如何jsp文件中的内容​

语法: <%@ 指令名称 属性名称1=“属性值1” 属性名称2=“属性值2” 。。。。。%>​

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

4、1 page指令

作用:用于定义JSP 页面的各种属性

import:java代码的含义一样
         <%@ page import="java.util.Date,java.util.List"%>
             或者:
        <%@ pageimport="java.util.Date"%>
        <%@ pageimport="java.util.List"%>


session:是否会自动创建session对象,默认值为true;

buffer:JSP中有java.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小。默认8kb.

errorPage:如果页面中有错误,跳转到指定的资源 errorPage="/uri" 如果写“/”则代表当前应用的目录 下,绝对路径。  如果不写“/”则代表相对路径

isErrorPage:是否创建throwable对象。默认是false

contentType:等同于response.setContentType(“text/html”;charset=utf-8);服务器发送客户端的内容编码

pageEncoding:Jsp文件本身的编码

isELIgnored:是否支持EL表达式。 默认是false,支持表达式, 是true,不支持表达式,

                                                                 ${1+1};false输出结果2   true按照原样输出

4、2 include 指令

 静态包含:把其它资源包含到当前页面中  <%@ include file="header.jsp" %>

动态包含: <jsp:include page=“header.jsp">
两者的区别:翻译的时间段不同(可在tomcat工作目录下查看)   :  work\Catalina\localhost\工程名\org\apache\jsp
                     静态包含:在翻译时就把两个文件进行合并
                     动态包含:不会合并文件,当代码执行到include时,才包含另一个文件的内容

4、3   taglib指令

作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %> 

五、JSP的六个动作

  •     jsp:include 动态包含
  •     jsp:forward请求转发
  •     jsp:param 请求设置参数
  •     jsp:useBean 创建一个对象
  •     jsp:setProperty给指定的对象属性赋值
  •     jsp:getProperty取出指定的对象属值

重要代码:

     
    


    
    
               
    
        

    





 

六、九个内置对象

对象名 类型 说明
request javax.servlet.http.HttpServletRequest  
response javax.servlet.http.HttpServletResponse  
session javax.servlet.http.HttpSession 由session=“true”开关
application javax.servlet.ServletContext  
exception java.lang.Throwable 由isErrorPage=“false”开关
page java.lang.Object当前对象this 当前servlet实例
config javax.servlet.ServletConfig  
pageContext javax.servlet.jsp.JspWriter  
out javax.servlet.jsp.PageContext javax.servlet.jsp.JspWriter

6、2 pageContext对象

域对象:可以操作其他三个域对象(request、session、application)

  •     void setAttribute(String name,Object o);
  •     Object getAttribute(String name);
  •     void removeAttribute(String name);

操作其它域对象的方法

  •      void setAttribute(String name,Objecto,int Scope);
  •      Object getAttribute(String name,intScope);
  •      void removeAttribute(String name,intScope);

Scope作用域,值如下:

  •     PageContext.PAGE_SCOPE
  •     PageContext.REQUEST_SCOPE
  •     PageContext.SESSION_SCOPE
  •     PageContext.APPLICATION_SCOPE

findAttribute(Stringname)   自动从page,request ,session ,application依次查找,
                                                    找到了就取值,结束查找  (作用域的范围由小到大)

重要代码:

<%--
	 pageContext: page上下文  作用域当前网页的上下文
	 			  该对象可以操作另外三个域对象
--%>

		<%
			//page作用域:只在当前页面有效
			pageContext.setAttribute("name", "jack");
			out.println(pageContext.getAttribute("name"));
			
			//操作request对象
			//request:一次请求:a转发b页面   b页面能获得a页面存在request中的值
			pageContext.setAttribute("name", "request的jack",PageContext.REQUEST_SCOPE);
			
			//操作session对象
			pageContext.setAttribute("name", "session的jack",PageContext.SESSION_SCOPE);

			//操作Application对象
			pageContext.setAttribute("name", "application中的jack",PageContext.APPLICATION_SCOPE);
			
			
	       //代码转发
	      // request.getRequestDispatcher("test.jsp").forward(request, response);
	       
	       //练习findAttribute();
	       //按照:page request  session application的顺序查找name属性对应的值,
	       //如果查找到,直接返回这个属性的值
	      	out.println(pageContext.findAttribute("name"));
	      	
	       pageContext.forward("test.jsp");//转发
		
		%>
		<%--  --%>



 

6、3 它可以创建其他的8个隐式对象

在普通类中可以通过pageContext 获取其他类的隐式对象

  • getException 方法返回exception 隐式对象
  • getPage 方法 返回page隐式对象
  • getRequest 方法返回request的隐式对象
  • getResponse 方法返回response的隐式对象
  • getServletConfig方法返回config隐式对象
  • getServletContext方法返回application隐式对象
  • getSession 方法返回session 隐式对象
  • getOut方法返回Out隐式对象

6、4 提供了简易的方法

  • pageContext.forward(“2.jsp”);
  • pageContext.include(“2.jsp”);

 

注意

JSP的底层其实就是Servlet。

 可以在tomcat服务器安装路径中的:work\Catalina\localhost\工程名\org\apache\jsp下的java代码查看

你可能感兴趣的:(jsp基础)