Jsp基本语法

来源:互联网 发布:零基础数据库培训 编辑:程序博客网 时间:2024/05/22 01:54

jsp模版元素:jsp页面中的html内容称之为jsp模版元素,显示,jsp中的html时out输出的。
jsp脚本表达式(expression):用于将程序数据输出到客户端<%= %>,表达式后,无;
例:<%=time %>  ------out.Writer(time);
jsp脚本片段(scriptlet):用于在jsp页面中编写多行代码
<%
//多行java代码-----〉Servlet中的_jspService();--->一个页面的多个脚本片段可以相互访问,变量在一个作用域
%>
jsp声明
<%!
//jsp声明----〉Servlet中的_jspService()的外面---〉可用于jsp页面转换成的Servlet程序的静态代码块,成员变量和方法
%>
jsp注释:(<!-- html,xml注释  -->)
<%--
//与html注释不同:html注释内容会打给浏览器,虽然页面看不到。jsp注释:则看不到,它的注释只有tomcat认识,tomcat不认识html注释。
--%>
jsp指令:是为了jsp引擎设计的。告诉引擎如何处理jsp页面,不会产生任何输出
三个指令:page,include,taglib




page指令基本语法
<%@ 指令 属性名 =“ 值”  %>


1,page指令:
定义jsp页面的各种属性,作用都是真个jsp页面,但一般放在整个jsp页面的起始位置。
例:<%@ page contentType-"text/html;charset=gbk" %> page告诉tomcat这个页面用了什么页面,采用了什么编码
<%@ page contentType-"text/html;charset=gbk" %> 
<%@ page import="java.util.Date" %> 分开写,也可以合起来
<%@ page contentType-"text/html;charset=gbk" import=“java.util.Date” %> 


JSP2.0规范定义的page指令的完整语法。page指令通过属性来说明
〈%@ page 
[language="java"]
[extends="package.clas"]//jsp翻译成servlet后继承自谁。
[import="package.class,java.util.Date,java.sql.*,...."]//导入的java类,jsp引擎默认自动导入:java.lang.*,javax.servlet.*,javax.servlet.jsp,javax.servlet.http.*
[session="true|false"]//默认true。session是想获取还是不获取(因为session的生命周期长,默认在服务端30min),如果是true,则翻译后的servlet中默认会创建一个session对象(jsp中直接用session对象),如果是false则没有session对象。
[buffer="none|8kb|sizekb"]//缓冲:out。。。关闭|默认|
[autoFlush="true|false"] //默认自动刷新
[isThreadSafe="true|false"]//线程安全,在页面多线程并发访问共享资源时,线程不完全。false:线程安全
[info="text"]//没什么意思,带的信息
[errorPage="relative_url"]//jsp页面出现错误,没有处理异常时,会把异常抛给用户。不能发生,异常跳到那个页面。设置相对路径,如果以"/"开头表示相当于当前WEB应用程序的根目录(不是站点根目录),否则相对于当前页面
//在web.xml配置全局的错误页面。
 <!--  配置全局的错误信息
 <error-page>
  <exception-type>java.lang.Exception</exception-type>
  <location>/errors/error.jsp</location>
 </error-page>
 -->
[contentType="text/html;charset="]//生成:response.setContentType();
[pageEncoding="..."]//解决乱码
[isELIgnored="true|false"]//false:不忽略。。表达式

%〉


Jsp乱码解决:Ctrl+s用什么编码保存的,pageEncoding通知web服务器用什么码表翻译,并且contentType=”text/html;charset=…”通知浏览器用什么码表打开


Eclipse开发不存在:Ctrl+s保存按照pageEncoding编码保存,并且生成response.setContentType时也是按照pageEncoding。即:pageEncoding=“utf-8”


2,include指令
<%@include file="public/head.jsp"%> //静态包含,它所包含的jsp会译成一个servlet(.java)


 <%
    request.getRequestDispatcher("public/head.jsp").include(request,response);//动态包含,翻译成多个servlet,访问的时候进行包含。
     %>
静态包含性能好,动态包含运行时包含。


JSP运行原理:


每个jsp 页面别第一次访问时,web容器都会把请求交给jsp引擎(即一个java程序)去处理。jsp引擎先将jsp
翻译成一个_jspServlet(实质上也是一个Servlet),然后按照Servlet的调用方式调用
第一次翻译,慢。第二次,jsp引擎发现jsp没有变化,就不在翻译了。直接调用,快。
jsp引擎在调用jsp对应的_jspServlet时,会创建9个对象供_jspServlet与web开发相关的对象供_jspServlet
使用。jsp技术设计者,特意定义9个相应的变量,开发人员在jsp页面中通过这些变量就可以快速获得这个9大对
象的引用。


9大对象:
request
response
session
application
config
page
exception


out
JspWriter out:JspWriter是一种带缓存功能的PritWriter。
当满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法
返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
1,设置page指令buffer属性关闭了out对象的缓存功能。
2,out对象的缓冲区已满,自动刷新true
3,整个jsp页面结束时
pageContext
是Jsp技术中重要的一个对象,它代表jsp页面的运行环境
1,这个对象封装了对其他8个隐式对象的引用提供相应的get方法
自定义标签的作用:就是移除jsp页面java代码
    //正规的流程jsp页面不能有任何Java代码,如果有,则要使用自定义标签把java代码移除掉
    //自定义一个jsp标签,关联一个类,将java代码弄到类中
    //那么java类要获取到request才行
    //怎么获取?自定义标签时,将pageContext传进去(8大隐式对象)
2,它自身还是一个域对象,可以用来保存数据,并且还可以通过pageContext操作其他三个域
3,并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其他资源,检索其他域中的对象等

Jsp常用标签 
jsp Action,他用于在Jsp页面提供业务逻辑功能,避免在jsp中直接使用java代码
<jsp:include>
<jsp:include page="/public/head.jsp"></jsp:include>
<jsp:forward>
<jsp:param>
 <%--转发:子标签中不能有无关的行,注释也不可以 --%>
    <jsp:forward page="/index.jsp">
    <jsp:param value="shao" name="name"/>
    <jsp:param value="s4869" name="pwd"/>
    </jsp:forward>
    
jsp映射
  <servlet>
  <servlet-name>12</servlet-name>
  <jsp-file>/yingshe.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
  <servlet-name>12</servlet-name>
  <url-pattern>/yingshe.html</url-pattern>
  </servlet-mapping>


   
重点:
pageContext(page域) 页面范围
request(request域)请求范围
session(session域)会话范围
servletContext(application域) 应用程序范围

域?生命周期?使用

0 0