【我的javaEE学习】JSP简单学习

一、JSP简介

1SUN公司推出的开发动态web资源的技术,属于JavaEE技术之一。由于原理上是Servlet, 所以JSP/Servlet在一起。


二、HTMLServletJSP

1HTML:静态页面,不能包含java代码,只能有HTML有关的标记

2Servlet:写java代码,做页面的输出,不是很方便(开发效率很低)

3JSPHTML+java


三、输出当前的时间



四、JSP的原理及生命周期

1JSP就是Servlet,学习好JSP的关键(语法),时刻想到他对应的Servlet



五、JSP的语法

5.1模板元素

JSP中的那些HTML。开发时先编写模板元素,因为他们决定页面的外观。如CSS等内容。


5.2 Java程序片段

语法:<%java程序%>

  出现在JSP对应Servletservice方法中。

   <%声明的变量:局部变量%>

Jsp中:


Jsp对应的Serclet中:


5.3 Java表达式

语法:<%=表达式%>

   


5.4 JSP声明

语法:<%!   %>

作用:定义JSP对应Serlvet的成员(变量和方法、静态方法)(注意这个声音是全局的)

注意:开发中很少用。如:



serlvetservice方法里找不到,因为service方法里是局部,该变量是全局的。不建议使用,因为有线程安全问题。


5.5 JSP注释

语法:<%--这是注释--%>

作用:注释掉的代码,JSP引擎不会翻译到Servlet源码中。要注意和HTML注释的区别。


5.6 JSP指令:

指令是为JSP引擎设计的。而只是告诉引擎如何处理JSP页面中的其余部分(非指令部分);一般把指令放在JSP页面的顶部(不是必须的)。

基本语法格式:<%@指令 属性1=1” ....%>;指令的属性可以写在一个指令的中,也可以分开写,比如:<%@指令 属性1=1” 属性2=”2”%>.

        等价于:

        <%@指令 属性1=1” %>.

        <%@指令 属性2=2”%>.

page:定义JSP页面的各种属性,作用于整个JSP页面。

        language:告知引擎,脚本用的是java。默认java,支持java。不写也行。(了解)

        extends:告知引擎,JSP对应的Servlet的父类是哪个。不需要写,也不要改。

        import:告知引擎,导入哪些包。

        注意:引擎自动导入:java.lang.*;javax.servlet.*;javax.servlet.http.*;javax.servlet.jsp.*;

        导入的形式:<%@page import=”java.util.Date,java.util.UUID”%>

                    等价于

                 <%@page import=”java.util.Date”%>

                 <%@page import=”java.util.UUID”%>  

        session:告知引擎是否产生HttpSession对象,即是否在代码中调用request.getSession(),默认值true。改成false就不会产生session.

        bufferJspWriter用于输出JSP的内容到页面上。告知引擎,设定他的缓存大小。默认8Kb(了解)

        errorPage:告知引擎,当前页面出现了异常,应该转发到哪个页面上(路径写法:/代表着当前应用)

   

      或者配置全局错误页面:web.xml

   

        isErrorPage:告知引擎,是否抓住异常。默认值为false。如果该属性为true,页面中就可以使用exception隐含对象,打印异常的详细信息。

    

        contentType:告知引擎,响应正文的MIME类型。

                               contentType=”text/html;charset=UTF-8”  相当于response.setContentType(“text/html;charset=UTF-8”);

        pageEncoding:告知引擎,翻译JSP时(要从磁盘上读JSP文件)所用的码表。


        pageEncoding=”UTF-8”:相当于,告知了引擎用UTF-8jsp,还response.setContentType(“text/html;charset=UTF-8”);

        isELIgnored:告知引擎,是否忽略EL表达式。默认值是false,不忽略。 

            总结:属性众多。一般都用的默认值。最简单的形式:<%@ page  pageEncoding="UTF-8"%>

      include

            属性:file,以”/”开头,就代表着当前应用。<%@ include file="/public/includefiles/allincludefiles.jsp"%>

      taglib:引入外部的标签。

            <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  uri:外部的标签的uri地址,好比名称空间;prefix:前缀。


六、JSP中的转发和包含

1、转发:利用JSP的内置标签来处理(jsp开头的标签)(jsp:forward)

<jsp:forward page="/10forward.jsp"></jsp:forward>

转发后当前访问地址不会变

等价于request.getRequestDispatcher(“/10forward.jsp”).forward(request,respone);

    参数:不能单独使用

      向目标传递请求参数(传递请求参数只认jsp:param,别的包含注释都是不认的)

      

           即地址:当前项目/10forward.jsp/username=abc

2、包含:

静态包含:<%@include%>

动态包含:<jsp:include page=””/>  (不推荐使用)

         包含生成的Servlet要注意,A包含B,那就生成AServlet,在AServlet里面包含了B的内容在里面,一共生成了一个Servlet


七、JSP的九个隐含对象:

JSP对应的Servletservice方法中的局部变量

JSP隐含对象名称

类型

备注

request

javax.servlet.http.HttpServletRequest

 

response

javax.servlet.http.HttpServletResponse

 

session

javax.servlet.http.HttpSession

page指令设置session是否存在

application

javax.servlet.ServletContext

 

config

javax.servlet.ServletConfig

 

page

javax.servlet.http.HttpServlet

当前jsp对应Servlet的实例引用

exception

java.lang.Throwable

page指令设置exception是否存在

out

javax.servlet.jsp.JspWriter

字符输出流。相当于PrintWriter

pageContext

javax.servlet.jsp.PageContext


八、JSP中的异常处理

1、运行时异常:找JSP对应的Servlet源码。

2、出现的错误(语法不对)


直接看页面的提示


九、四大域对象

实际开发中:存放数据的。

域对象从小到大:

1、PageContext:页面范围,最小。开发中很少用。

  ⑴生命周期:当对JSP的请求开始,当相应结束时销毁。

  ⑵作用范围:整个JSP页面,是四大作用域中最小的一个。

  ⑶作用:获取其他八大隐式对象,可以认为是一个入口对象。

         获取所有域中的数据。

         跳转到其他资源。

  PageContext本身是一个域(范围)对象,还能操作其他3个域对象中的属性

  ●页面范围:

    void setAttribute(String name,Object value);

    void removeAttribute(String name);

    Object getAttribute(String name);

  ●操作其他域对象中的属性:

    void setAttribute(String name,Object value,int scope);

    void removeAttribute(String name,int scope);

    Object getAttribute(String name,int scope);

  其中int scope:常量,PageContext的取值:PAGE_SCOPE(页面)REQUEST_SCOPE(请求)、SESSION_SCOPE(会话)和APPLICATION_SCOPE(应用)

  ●在四个范围中依次查找指定名称对象的方法:

    PAGE(页面)REQUEST(请求)、SESSION(会话)和APPLICATION(应用)

          Object findAttribute(String name);

  ⑷PageContext获取其他八个JSP隐含对象(自定义标签时用)

      PageContext.getRequest();

      getServletContext();

      getServletConfig();

      getException();

      get等等....

  ⑸PageContext提供转发和包含的简易方法

      request.getRequestDispatcher(“/10forward.jsp”).forward(request,respone);

   等价于PageContext.forward(“/10forward.jsp”);

     或者

     pageContext.include(String url);

2ServletRequest:请求范围。不同的资源,只有用转发。

  ⑴生命周期:在Service方法调用前由服务器创建,传入service发那个发。整个请求结束,request生命结束。

  ⑵作用范围:整个请求链(请求转发也存在)(一次请求)

  ⑶作用:在整个请求链中共享数据,经常用到:在servlet中处理好的数据交给JSP显示,此时参数就可以放在Request域中。

3、HttpSession:会话范围。多次请求共享数据,但不同的客户端不能共享。

  ⑴生命周期:在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭,没有到期的session也会跟着销毁。如果调用session提供的invalidate(),可以立即销毁session

  ⑵作用范围:一次会话。

 

4、ServletContext:应用范围,最大。尽量少用,用时要做同步处理。

  ⑴生命周期:当WEB应用被加载进容器创建代表整个WEB应用的ServletContext对象,当服务器关闭或WEB应用被移除时,ServletContext对象跟着被销毁。

  ⑵作用范围:整个WEB应用。

  ⑶在不同Servlet之间转发、读取资源文件


十、JSP开发的最佳实践

  Servlet:擅长写Java代码逻辑,不擅长输出html的内容。开发中作为:控制器。

  JSP:不擅长写Java代码逻辑,擅长显示结果。开发中作为:视图(显示结果)


猜你喜欢

转载自blog.csdn.net/suqi356/article/details/79149854
今日推荐