jsp

Jsp

1.jsp产生的原因
    在web开发中,HTML只能写一些静态的页面,无法在其中嵌入从数据库中获得的数据。为了解决这个问题,因此引入的jsp。
2.什么是jsp
    jsp的全名是Java Server Page,是一种建立在Servlet规范上的胴体网页开发技术。即jsp实质上就是servlet。
3.jsp可以做什么
    在jsp文件中,HTML代码和Java代码可以共同存在,其中html代码用来实现页面中静态内容的展示,Java代码来实现网页中动态内容的展示。
注:根据上面的内容,可以得知,学习jsp,主要是学习:如何在jsp文件中嵌入Java代码。

jsp的运行原理

jsp的本质就是servlet。
过程:
1.当用户第一次在浏览器中输入要的访问的jsp资源,这时web应用服务器将会去在它目录中work文件夹中查找是否已经解析了该jsp,发现没有相应的Java文件。
2.这时,web应用服务器将它的web.xml文件中,查找处理的servlet(org.apache.jasper.servlet.JspServlet),将请求的jsp翻译文servlet。并保存到Tomcat的work目录中。

如:第一次访问–>helloServlet.jsp—->helloServlet_jsp.java—>编译运行

注:web.xml处理jsp的servlet配置如下:

<servlet>
            <servlet-name>jsp</servlet-name>
            <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
            <init-param>
                <param-name>fork</param-name>
                <param-value>false</param-value>
            </init-param>
            <init-param>
                <param-name>xpoweredBy</param-name>
                <param-value>false</param-value>
            </init-param>
            <load-on-startup>3</load-on-startup>
        </servlet>

        <servlet-mapping>
            <servlet-name>jsp</servlet-name>
            <url-pattern>*.jsp</url-pattern>
            <url-pattern>*.jspx</url-pattern>
        </servlet-mapping>

jsp的脚本和注释

1.jsp的脚本:指的就是在jsp文件中嵌入的Java代码。

2.在jsp文件中嵌入Java代码的方式:
    a.<%java代码%>:内部的Java代码翻译到service方法的内部。
    b.<%=Java变量或者表达式%>:会被翻译为service方法的内部out.print();
    c.<%!java代码%>:会被翻译为servlet的成员内容(包括成员变量和成员函数)
3.jsp注释--->不同的注释可见范围是不同的
    a.html注释:
        
        可见范围:jsp源码,翻译后的servlet,页面显示html源码
    b.Java注释:
        //或者/**/
        可见范围:jsp源码,翻译后的servlet
    c.jsp注释:
        <%-- 注释内容 --%>
        可见范围:jsp源码

jsp指令(3个)

1.jsp指令:指的是指导jsp翻译和运行的命令
2.具体的指令
    2.1page指令
        格式:<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>
        常用属性:
        language:jsp脚本中可以嵌入的语言种类(ps:只支持java)
        pageEncoding:当前jsp中文件本身的编码,内部包含了contentType
        contentType:设置response.setContentType(text/html;charset=UTF-8)
        session:是否jsp翻译是自动创建session
        import:导入Java包
        errorPage:当前页面为出错后跳转到那个页面
        isErroePage:当前页面是一个处理错误的页面
    2.2include指令(静态包含)
        格式:<%@ include file="被包含的文件地址"%>
        ps:这个指令可以,将一个jsp页面包含到另一个jsp页面中。
    2.3taglib指令
        格式:<%@ taglib uri="标签库地址" prefix="前缀"%>
        ps:该指令用于在jsp页面中引入标签库

jsp的内置/隐式对象(9个)

1.在jsp被翻译为servlet后,service方法中有九个对象定义并且初始化完毕,因此在jsp中可以直接使用这九个对象
2.具体的内置对象
    2.1out(JsWriter):主要用于页面输出
    2.2request(HttpServlet):主要用于得到用户请求。
    2.3response(HttpServletResponse):服务器向客户端的回应信息。
    2.4config(ServletConfig):Servlet的配置,可以获得Servlet的初始化参数和获得ServletContext对象
    2.4session(HttpSession):用来保存用户信息
    2.5application(ServletContext):web应用的共享信息
    2.6pageContext:jsp的页面容器
    2.7exception:表示jsp页面所发生的异常,在错误页起作用
    2.8page(Object):指页面转换后的servlet类的实例。
3.内置对象的介绍
    3.1out对象
        out对象的作用是向客户端输出内容(out.write())
        out缓冲区默认是8kb,可以设置为0代表关闭out缓冲区,内容将直接写到respons缓冲区中
    ps:out.write()和response.getwrite().write()之间的区别:out.write是将内容写到out缓冲区,最后在写到response缓冲区。而response.getwrite().write()是直接将内容写到response缓冲区中。
3.2pageContext对象
    pageContext对象表示jsp、页面上下文对象,而page指的jsp翻译成servlet后的实例对象。
    a.pageContext是一个域对象
        setAttibute(String name,Object obj)
        getAttribute(String name)
        removeAttrbute(String name)
        pageContext向指定的其他域对象中存取数据
            setAttribute(String name,Object obj,int scope)
            getAttribute(String name,int scope)
            removeAttrbute(String name,int scope)
            findAttribute(String name):该方法将会依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找。    
    b.可以通过pageContext获得其他8大内置对象
        例:  获取请求对象
            pageContext.getRequest()    
ps:域对象的总结(4个)
    四个作用域对象及作用范围分别是:
        pageContext:当前jsp页面范围
        request:一次请求
        session:一次会话
        application(ServletContext):整个web应用

jsp标签

1.页面包含(动态包含):   
2.请求转发:

ps:动态包含与动态包含的区别:
    首先:动态包含是使用标签来进行的,他的格式为:;
    而静态包含是通过指令来进行的,他的格式是:<%@ include file="被包含的文件地址"%>;他们都可以完成将一个页面包含到另一个页面的效果。
    区别:
        动态包含是将请求的页面先解析为servlet,然后再执行到时,再将被包含的页面解析为servlet,包含进去请求的页面。(即会产生两个servlet)
        静态包含则是先将两个页面拼接到一个jsp,后面再解析该jsp。(即只会产生一个servlet)

你可能感兴趣的:(jsp)