jsp和java web么菜单编_JavaWeb之JSP

本文介绍了JSP的基本概念,包括其作为Servlet的简化技术,页面的访问路径,以及JSP的运行原理。讨论了JSP页面的创建,使用隐含对象如request、response、session等,并解释了JSP的表达式、脚本片段和指令。此外,还探讨了请求的转发和重定向,以及处理中文乱码的方法。最后提到了JSP的动态引入和转发标签的使用。
摘要由CSDN通过智能技术生成

概念:

简化 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 文件:

3e2bbf803670

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

注:

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

3e2bbf803670

隐含的对象:

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 初始化参数:

3e2bbf803670

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

3e2bbf803670

JSP 表达式:

3e2bbf803670

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

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 应用内的资源,而重定向可以请求任何资源。

使用:

转发:

3e2bbf803670

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

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

重定向:

3e2bbf803670

直接调用 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 需要导入的类

比如:

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

3e2bbf803670

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

errorPage 和 isErrorPage:

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

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

两者配合使用:

3e2bbf803670

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

3e2bbf803670

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

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

运行结果:

3e2bbf803670

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

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

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

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

3e2bbf803670

3e2bbf803670

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

3e2bbf803670

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

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

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

include 指令:

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

使用:

3e2bbf803670

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

3e2bbf803670

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

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

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

jsp:include 标签:

语法:

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

jsp:forward 标签:

语法:

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

3e2bbf803670

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

3e2bbf803670

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 文件的方式,如下图所示,

3e2bbf803670

或者通过以下方式获取:

3e2bbf803670

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值