JavaWeb之JSP

概念:

简化 Servlet 编写的一种技术,将 Java 代码和 HTML 语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用 Java 代码来编写,而对静态内容采用静态 HTML 的方式编写。

JSP 可以放在 WEB 应用程序中的除了 WEB-INF 及其子目录外的任何目录中,JSP 页面的访问路径与普通的 HTML 页面的访问路径形式也完全一样。

原理:

每个 JSP 页面在第一次被访问时,JSP 引擎将它翻译成一个 Servlet 源程序,接着把这个 Servlet 源程序编译成 Servlet 的 class 类文件,然后由 WEB 容器(Servlet 引擎)像调用普通 Servlet 程序一样的方式来装载和释放执行这个由 JSP 页面翻译成的 Servlet 程序。

使用:

在 webapp 里面新建一个 hello.jsp 文件:

在 body 标签内通过使用标签 <% 和 %> 来写 Java 代码,用 <% 标签作为起始标志,%> 标签作为结束标志,如图,重启 Tomcat,打开网页指向 hello.jsp 路径,控制台则打印当前时间。

注:

如果在 idea 识别不到 JSP 文件,在 settings 里面的 plugins 找到 JSP 打钩,然后重启 idea,如下操作

隐含的对象:

1、request:HttpServletRequest 的一个对象。

2、response:HttpServletRequest 的一个对象。(在 JSP 页面中一般不使用)

3、pageContext:页面的上下文,是 pageContext 的一个对象,可以从该对象中获取到其他隐含的对象,也可以从中获取到当前页面的其他信息。

4、session:代表浏览器和服务器的一次会话,是 HttpSession 的一个对象。

5、application:代表当前 WEB 应用是 ServletContext 对象。

6、config:当前 JSP 对应的 Servlet 的 ServletConfig 对象(几乎不使用)

7、out:JspWrite 对象,调用 out.println() 可以直接把字符串打印到浏览器上。

8、page:指向当前 JSP 对应的 Servlet 对象的引用,为 object 类型,只能调用 object 的类方法。(几乎不使用)

9、exceptiion:当前只有设置 isErrorPage 为 true 才能使用的异常对象

若需要访问当前 JSP 配置的初始化参数,需要通过映射的地址才可以,如下操作:

在 web.xml 文件里配置你当前的 JSP 初始化参数:

然后在 JSP 文件里直接获取:

JSP 表达式:

两种打印日期的方式是一样的。

JSP 脚本片段:

指在 <% 和 %> 之中的一条或多条 Java 程序代码,多个脚本片段中的代码可以相互访问。

跟属性相关的方法:

(1):

setAttribute(String name, object o):设置属性

Object getAttribute(String name):获取指定的属性

Enumeration getAttrbuteNames():获取所有的属性的名字组成的 Enumeration 对象

removeAttribute(String name):移除指定的属性

(2):

pageContext、request、session、application 对象都有这些方法,这四个对象也称为域对象

pageContext:属性的作用范围仅限于当前 JSP 页面

request:属性作用范围仅限于同一个请求

session:属性的作用范围限于一次会话:浏览器打开直到关闭称之为一次会话(在此期间会话不失效)

application:属性的作用范围限于当前 WEB 应用。是范围最大的属性作用范围,只要被一次设置属性,在其他各处的 JSP 或 Servlet 中都可以获取到。

请求的转发和重定向:

区别:

1、转发只发出一次请求,而重定向则发出两次请求。

2、转发的地址栏是初次发出请求的地址,而重定向的地址栏是最终相应的地址。

3、对于转发,在最终的 Servlet 中,request 对象和中转的那个 request 是同一个对象,而重定向则不是同一个对象。

4、转发只能请求当前 WEB 应用内的资源,而重定向可以请求任何资源。

使用:

转发:

1、调用 HttpServletRequest 的 getRequestDispatcher() 方法获取 RequestDispatcher 对象,并传入要转发的地址参数。

2、HttpServletRequest 的 forward(req, resp) 进行请求的转发。

重定向:

直接调用 resp.sendRedirect(path) 方法,并传入要重定向的地址。

JSP 中的转发和重定向直接使用内置对象 request 和 response。

JSP 指令:

它是为 JSP 对象引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理 JSP 页面中的其余部分。

目前的 JSP 定义了 page、include 和 tablib 三种指令。

page 指令:

1、page 指令用于定于 JSP 页面的各种属性,无论 page 指令出现在 JSP 页面中的什么地方,它作用的都是整个 JSP 页面,通常 page 指令放在 JSP 页面的起始位置

2、page 指令常用属性:

import 属性:指定当前 JSP 页面对应的 Servlet 需要导入的类

比如:<%@ page import="java.util.Date" %>

session 属性:取值为 true 或 false,指定当前页面的 session 对象是否隐藏,如果为 true 则隐藏,session 对象不可用,反之可用。

如图,如果指定隐藏,而继续使用,系统则报错,因为找不到 session 对象。

errorPage 和 isErrorPage:

errorPage 指定当前页面出现错误时,转发到指定的页面

isErrorPage 指定当前页面是否为错误页面

两者配合使用:

在 hello.jsp 页面上指定错误页面,并运行一段错误代码。

在 error.jsp 指定当前页面为错误页面,并在页面上使用 exception 对象打印错误信息。

注:如果没有指定 isErrorPage 为 true 的话,exception 对象是无法使用的。

运行结果:

地址栏的地址没有变化,而页面上显示的是错误信息,可以得出,响应错误页面的本质是请求的转发。

对于 Tomcat 服务器来说,WEB-INF 下的文件是不能通过浏览器直接访问的,但通过请求的转发时可以的。

还可以在 web.xml 里面配置错误信息和错误跳转的页面:

把错误的页面 JSP 放在 WEB-INF 里面:

在 web.xml 里配置,error-code 指定错误的代码,location 指定响应页面的位置,或者指定异常跳转到页面:

contentType:指定当前 JSP 页面的响应类型,实际调用的是 response.setContentType(" text/html ; charset = UTF-8")。

pageEncoding:指定当前 JSP 页面的字符编码,通常情况下该值和 contentType 的 charset 一致。

isELIgnored:指定当前 JSP 页面是否可以使用 EL 表达式,通常取值为 true。

include 指令:

用于通知 JSP 引擎在翻译当前 JSP 页面时将其他文件中的内容合并到当前 JSP 页面转换成 Servlet 源文件中,这种源文件级别进行引入的方式称之为静态引入,当前 JSP 页面与静态引入的页面紧密结合为一个 Servlet

使用:

在页面 hello.jsp 里面包含 index.jsp,运行结果:

网页同时输出两个页面的内容。

注:file 属性的值必须使用相对路径

如果在 hello 页面里定义一个变量,通过 include 引入 index 页面,在 index 页面里面可以直接使用 hello 页面定义的变量。

jsp:include 标签:

语法:<jsp:include page="index.jsp"></jsp:include>

概念:动态引入,并不是像 include 指令生成一个 Servlet 源文件,而是生成两个 Servlet 源文件,然后通过一个方法的方式把目标页面包含进来。

jsp:forward 标签:

语法:<jsp:forward page="index.jsp"></jsp:forward>

概念:当前页面转发到指定页面,使用 jsp:forward 可以使用 jsp:param 子标签向 index.jsp 传入参数。同样,jsp:include 也可以使用子标签。目标函数使用 request.getParameter 来接收。

hello.jsp 转发时,传入参数。

index.jsp 接收参数。

中文乱码:

1、在 JSP 页面上输入中文,为了请求页面后不出现乱码,需要保证 contentType="text/html;charset=UTF-8",pageEncoding="UTF-8" charset 和 pageEncoding 的编码一致,且都支持中文,通常建议取值为 UTF-8,还需保证浏览器的显示的字符编码也和请求的 JSP 页面的编码一致

2、获取中文参数值:默认参数在传输过程中使用的编码为 ISO-8859-1

对于 POST 请求:只要在获取请求参数前调用 request.setCharacterEncoding("UTF-8") 即可。

对于 GET 请求:

可以通过修改 Tomcat 的 server.xml 文件的方式,如下图所示,

或者通过以下方式获取:



以上为本人的一些学习笔记,如有出错欢迎指正,陆续更新!!!

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

推荐阅读更多精彩内容

  • 其他更多java基础文章:java基础学习(目录) 本章内容较多,全部认真看完可能需要一小时以上,建议边看边做笔记...
    Hiwayz阅读 1,285评论 0 10
  • 概念:1)JSP(Java Server Page)是Java服务器端动态页面技术。是sun公司制订的一种服务器端...
    南山伐木阅读 483评论 0 7
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 21,783评论 1 92
  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,310评论 0 13
  • 月上西楼残更立,惊鸿凄凄。雨落梨花,回眸不见挽首处。 良苦萧萧扰残梦,轻叹浮生。而今各看,难踏初遇来时路。
    广陌阅读 255评论 2 2