JSP基础include和jspinclude的区别jsp内置对象

2012/03/24 3208点热度 0人点赞 0条评论

JSP(java server page)

      是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

  在tomcat web.xml中的监听listings改为true,可以目录显示

   jsp运行时jsp引擎将文件转换成servlet源文件和并将源文件转化成class文件,

    然后以jsp引擎把控制权交给servlet容器

 

JSP标准指令

  page作用当前页面,全局指令,只要在页面中即可

     语法:

<%@ page language="java" contextType="text/html;charset=utf-8" session="true" %>
<%@ page import="java.util.Date,java.util.List" %>

   session="false"表示当前页面不能使用session

   buffer="none|8kb|size kb" 设置jsp向客户端输出的缓冲区大小,默认为8kb

   autoflush="true|false"决定输出流的缓冲区是否要自动清除

   pageEncoding="utf-8" 设置字符编码,当和contextType同时存在时,pageEncoding优先,只在当前页面有效,转化成java时无效

     

 include 导入(运行后生成的源码只有一个java源文件)

     语法:

<%@ include file="导入页面的路径"%>

 建议被引入的页面后缀改为jspf,表示代码片段

    注意事项:

      除了import和pageEncoding属性外,page指令的其他属性不能在这两个页面中有不同的设置值

  taglib <% @ taglib %>指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀

JSP程序代码标签

<%!
    jsp声明语句,声明的都是全局变量
    转换后为servlet中的全局变量和方法
%>
  <%
      java代码片段
        转换后为_jspservice()中的变量和方法,属于_jspservice()方法中的变量而非<%%>中
        body中的<%%>和<%=%>都属于_jspservice()
  %>
<%=静态方法%>

在h标签中使用<h<%=i+1%>>斯蒂芬<h<%=i+1%>>

jsp注释

<!--html的注释-->
<% //java注释%>
<%--jsp注释--%>只在jsp页面存在,不会被转化到源文件

JSP动作标签

 <jsp:include path="引入路径">      

 </jsp:include>

include和jsp:include的区别

在a.jsp中引入b.jsp

include:静态引入

  *<%@ include file="b.jsp"%>

  *a.jsp被jsp引擎转化后生成一个a_jsp.java文件,b.jsp不被生成java文件。运行时生成一个a_jsp.java文件

  *执行过程

     *jsp引擎从a.jsp文件的第一行代码开始转化为java文件

     *当执行到<%@ include file="b.jsp"%>代码时,把b.jsp代码转化为java文件

     *把b.jsp代码转化的java文件嵌入<%@ include file="b.jsp"%>所在的位置

     *a.jsp继续下面代码的转化,最终生成一个java源文件(servlet)

     *jsp引擎编译java文件为a_jsp.class文件

     *serlver容器执行a_jsp.class文件对客户端输出

jsp:include:动态引入

  *<jsp:include page="b.jsp"></jsp:include>

  *a.jsp和b.jsp分别生成两个对应的java文件 a_jsp.java b_jsp.java

  *执行过程

     *jsp引擎把a.jsp文件转化为a_jsp.java文件,把b.jsp文件转化为b_jsp.java文件

     *jsp引擎把a_jsp.java文件和b_jsp.java文件编译成class文件

     *servlet容器执行a_jsp.class【运行结果是html页面】文件,从第一行代码开始

     *当执行到<jsp;include page="b.jsp"></jsp:include>代码时,servlet容器加载b_jsp.class文件,运行结果是html页面

     *servlet容器继续往下执行a_jsp.class文件输出到客户端

<jsp:forward page="路径">
   <jsp:param name="参数1" value="参数值"/>
</jsp:forward>

jsp异常处理

  errorPage="转发地址" 地址栏地址没有发生改变

 isErrorPage="true"用于设置是否允许处理网页中出现的异常错误,默认为false

  开发阶段异常输出

 

 <%@ page errorPage="转发地址"%>页面中的优先于web.xml中的配置

  <!--

      //exception  jsp的内置对象,固定写法

             //*这里保存jsp运行中出现的异常信息

     //*jsp中如果没有异常,该对象的值为null

     isErrorPage="true"

       *true  表示在该页面中可以直接显示exception对象

       *false 表示在该页面中不可以直接显示exception对象

  -->

  <%=exception%>

在web.xml中配置错误页跳转页面

 配置异常类型优先于异常代码

<error-page>
    <exception-type>异常类型java.lang.Exception</exception-type>
    <localtion>错误页面</localtion>
 </error-page>
 <error-page>
     <error-code>异常代码</error-code>
     <localtion></localtion>
 </error-page>

jsp内置对象

   request:jsp的内置对象,固定写法,类型HttpServletRequest类型

       request.getContextPath(),找到web根

   

   reponse: jsp的内置对象,固定写法,类型HttpservletResponse

       response.setHeader("refresh","1");//每隔1s刷新页面一次

       response.setHeader("refresh","2;url=request.jsp");//2秒后转到别的页面

       response。sendRedirect("./request.jsp");//重定向

   session: jsp的内置对象,固定写法,类型HttpServletSession  

     在<%@ page session="true"%>配置为true以后当前页面才可以使用session对象

     session=false  不可以直接使用jsp中的内置session对象,但仍可以从request中获取

     HttpSession session=request.getSession();

  application  jsp的内置对象,固定写法,类型ServletContext类型

   out: jsp的内置对象,固定写法,类型jspWrite

       out:servlet中的PrintWriter类型

      可以将jspWriter看成是PrintWriter的包装类对象

   config: jsp的内置对象,固定写法,类型:ServletConfig

      把jsp文件作为servlet配置

<servlet>
   <servlet-param>config</servlet-param>
   <jsp-file>config.jsp</jsp-file>
<servlet>

   page jsp内置对象,固定写法,类型 Object 就是当前页面this

   exception jsp内置对象 固定写法 类型java.lang.Throwabled表示未捕获的异常

        isErrorPage="true|false"

        true:在jsp页面中可以使用exception

        false:在jsp页面不能使用exception

  pageContext:  jsp的内置对象,固定写法,类型:PageContext

       * 具有管理其他对象的功能

       * 利用该对象可以获取其他的内置对象

       * 处理其他对象能完成的功能

       * 代表的就是当前的jsp页面

pageContext.forward(地址)====request.getRequestDispatcher.forward(地址);
HttpServletRequest  req=(HttpServletRequest)pageContext.getRequest();
HttpServletResponse res=(HttpServletResponse)pageContext.getResponse();
JspWriter jw=(JspWriter)pageContext.getOut();
Exception E=(Exception)pageContext.getException();
ServletContext sc=(ServletContext)pageContext.getServletContext();
HttpSession hs=(HttpSession)pageContext.getHttpSession();
ServletConfig conf=(ServletConfig)pageContext.getServletConfig();
Object obj=pageContext.getPage();
pageContext.getAttribute(name)查找的是page作用域中的值
pageContext,getAttribute(name,作用域);作用域PageContext.PAGE.SCOPE)
//findAttribute依次在page,request,session,application查找,找到值后就不再往后查找,如果没有找到返回null
pageContext.findAttribute(name)

处理jsp中的乱码

  处理post请求的中文乱码

      *  在代码的第一行写request.setCharacterEncoding("utf-8");  

   处理get请求的中文乱码

      * String s=new String(username.getBytes("ISO-8859-1","utf-8"));//IE6下只能处理成双的汉字

      *在传递前进行重新编码和解码

          java.net.encode(username,"utf-8");

          原始方式java.net.decode(username,"utf-8");不方便

          在tomcat服务器下的server.xml的<Connector>中配置端口那里加上URIEcoding="utf-8"属性

      *使用jstl标签库中的标签进行编码

          <c:url value="地址" var="url">

                <c:param name="username" value="<%=username%>"></c:param>

          </c:url>

         <a href="${url}">get方式传值</a>

yxkong

这个人很懒,什么都没留下

文章评论