JavaEE-JSP基础

一.介绍

jsp作用: 便于使用java代码输出HTML   
jsp在第一次被访问时,会被服务器翻译成Servlet类(从此驻留内存重复利用),以后对jsp访问都是由该Servlet执行输出

在/WEB-INF/web.xml 配置jsp路径映射
    <servlet>
        <servlet-name>myJsp</servlet-name>
        <jsp-file>/myJsp.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>myJsp</servlet-name>
        <url-pattern>/myJsp</url-pattern>
    </servlet-mapping>

二.jsp基本成分

1.HTML元素
    <html> <div> 在Servlet中直接输出到HTML: out.write("<html> <div>");  

2.<%=java表达式 %>
    <%=23%> 在Servlet中直接输出到HTML: out.write(23);  

3.<% java源码 %>
    直接复制到Servlet.service()方法内, 不同源码块可以相互访问
    <% String str = "hello"; %>
    <br/>
    <% out.write(str) %>

4.<%! java源码 %>
    直接复制到Servlet方法外,成为Servlet类成员
    <%!
        public class MyClass{}
        public void myMethod(){} 
        static{}
        {}
        int i = -1;
    %>

5.注释
    <%-- 
        jsp注释,只保留在jsp
    --%>  
    
    <%      
        /* java注释 */        
        // Java注释 直接复制到java,但不被编译到class     
    %>
    
    <!-- 
        HTML注释,直接输出到HTML
    -->  

    <!-- <% out.write("java没有被注释"); %> -->  
    翻译大致结果:
    out.write("<!--");
    out.write("java没有被注释");
    out.write("-->");

三.jsp指令

1.page

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

language="java"         开发语言
import="java.util.*"    导入java包
extends=""              由jsp翻译的Servlet要继承的类(必须是Servlet子类)
isThreadSafe="false"    由jsp翻译的Servlet是否实现接口 SingleThreadModel (已经过时被抛弃)

pageEncoding="UTF-8"    通知jsp翻译引擎jsp编码(自动设置 contentType)
contentType="text/html; charset=UTF-8" 通知浏览器HTML编码

buffer="none|8kb"     设置jsp自带的输出缓冲区大小,默认8kb
autoFlush="true"      当jsp输出缓冲区装满时,是否自动刷新到浏览器(默认true,装满而没有刷新就会抛出异常)
isELIgnored="true"    当前jsp是否支持EL表达式(默认true,)   
session="true"        当前jsp是否自动创建session对象(默认true, request.getSession())    

errorPage="relative_url" 当前jsp出错时要跳转的错误页面url(可在web.xml统一配置)
isErrorPage="true|false" 当前jsp是否为错误页面(隐含exception对象, 上个页面抛出的异常) 
    
在/WEB-INF/web.xml 统一配置错误页面
    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error/500.jsp</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/error/404.jsp</location>
    </error-page>

2.include

静态包含(include指令): 运行时多个jsp合并一个servlet,输出HTML
将include指令加入JSP中需要的位置即可, 因为是同一个servlet,所以变量可以共享
<body>      
    <%@ include file="/title.jsp"%>
    <p>...段落...</p>
    <%@ include file="/e.jsp"%>
</body>

动态包含(请求包含): 运行时多个jsp分别生成多个servlet,合并输出HTML(明显效率较低),变量无法共享.

3.taglib

引入标签库:  <%@ taglib uri="x.tld文件命名空间" prefix="命名空间缩写" %> 

四.jsp内置对象(九大隐式对象)

对象名          对象类型
request         HttpServletRequest
response        HttpServletResponse
session         HttpSession
application     ServletContext
config          ServletConfig

pageContext     PageContext 可以获取其它八大对象
out             JspWriter   向浏览器输出HTML
exception       Throwable
page            Object      当前jsp生成的Servlet对象(很少用)

1).out

out 对象是jsp的输出对象, 相当于 response.getWriter(), 但是输出顺序不同
    <p>
        我是段落
        <%      
            out.write("1");
            response.getWriter().write("a");
            out.write("2");
            response.getWriter().write("b");
        %>
    </p>
    
    输出: ab  我是段落 12
    
输出乱序的原因:
    out对象自带输出缓冲区(大小受page指令的buffer限制),
    当out缓冲区满时,自动刷新到response的缓冲区,
    很明显,输出到浏览器时先输出response缓存区,在输出out(JSPWriter)缓冲区
    所以,同时使用out(JSPWriter)和response输出会导致乱序

结论: 在jsp中应该使用out(JSPWriter)输出,不要使用response输出

2).pageContext

本身是域对象(内有map变量,Page域)
作用域: 只在当前jsp页面(四大作用域最小)
生存期: 对jsp访问时创建,访问结束时销毁

操作page域
    pageContext.setAttribute(String name, Object value);
    pageContext.getAttribute(String name);
    pageContext.removeAttribute(String name);

操作四大域
    pageContext.findAttribute(String name); //查找,顺序是小到大域: pageContext/request/session/application
    pageContext.getAttribute(String name, int scope);
    pageContext.getAttributeNamesInScope(int scope);
    pageContext.removeAttribute(String name, int scope);
    
    pageContext.setAttribute("name", "ps",PageContext.PAGE_SCOPE );
    pageContext.setAttribute("name", "rs",PageContext.REQUEST_SCOPE );
    pageContext.setAttribute("name", "ss",PageContext.SESSION_SCOPE );
    pageContext.setAttribute("name", "as",PageContext.APPLICATION_SCOPE );
                
获取其他8个内置对象
    pageContext.getRequest();
    pageContext.getResponse();
    pageContext.getSession();
    pageContext.getServletContext();
    pageContext.getServletConfig();
    pageContext.getOut();
    pageContext.getException();
    pageContext.getPage();
    
提供请求转发和请求包含快捷方法
    pageContext.include("/index.jsp");
    pageContext.forward("/index.jsp");

简书: http://www.jianshu.com/p/495e90684311
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/54646844
GitHub博客:http://lioil.win/2017/01/21/JSP.html
Coding博客:http://c.lioil.win/2017/01/21/JSP.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容