学会jsp,有这一篇就够了

一、起源

jsp(Java Server Pages),Java服务端页面,SUN公司定义的一种用于开发动态web资源的技术。

在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。

如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难。

对大量静态内容的美工设计和相关HTML语句的编写,并不是程序员所要做的工作,程序员对此也不一定在行。网页美工设计和制作人员不懂Java编程,更是无法来完成这样的工作。

为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)技术作为解决方案。

不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。

其原因为,程序的数据通常要美化后再输出:

让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。

让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。

因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做

二、语法

jsp的本质就是servlet

它和HTML页面不同,jsp页面除了可以写标签,还可以在<% %>之间书写Java代码。使用<%= %> 用于向页面输出指定内容。

比如:

后端获取到数据后,向页面传递
request.setAttribute(“list”,list);
request.getRequestDispatcher("/index.jsp").forward(request,responce);

在index.jsp页面获取数据:
<%=request.getAttribute(“list”)%>

三、Page指令

page(用于配置页面信息)
在这里插入图片描述
(1)contentType:设置响应体的类型和字符集,相当于responce.setContentType()的参数值
(2)language:只有一个取值Java,比较鸡肋
(3)import:和Java源代码一样,用于导包导类,比如下面的例子

在这里插入图片描述
(4)errorPage:当前页面发生异常时,会跳转到的页面
(5)isErrorPage:标识当前页面是否是错误页面,取值为true时,可以使用内置对象exception;
(6)pageEncoding:设置当前jsp文件的字符集

(7)autoFlush:设置当out输出流缓冲区满了之后,是否自动刷新缓冲区,也就是说,缓冲区满了之后,会把缓冲区数据写出来再往进放数据。默认是true。
(8)buffer:设置out缓冲区的大小,默认是8kb
(9)session:设置访问当前jsp页面,是否会创建HttpSession对象,默认是true
(10)设置jsp翻译出来的Java类默认继承谁

四、静态包含和动态包含

1、静态包含
在这里插入图片描述
静态包含的特点:

  • 被包含的jsp页面不会被翻译
  • 被包含的页面代码拷贝到对应位置

2、动态包含
在这里插入图片描述

  • page属性指定被包含的jsp页面的路径
  • 动态包含会把被包含的jsp页面翻译成Java文件
  • 底层会调用代码将被包含的页面输出JspRuntimeLibrary.include(request,response,"/include/footer.jsp", out,false);
  • 动态包含可以向被包含的页面传递参数
    在这里插入图片描述

五、请求转发

在这里插入图片描述

六、九大内置对象

jsp中的内置对象,是指Tomcat在将jsp翻译成servlet源代码后,内部提供的九个对象;

在这里插入图片描述
Exception对象只有在jsp页面出现异常时才会生成,或者在page指令中将isErrorPage属性设置为true;

七、四个域对象

在这里插入图片描述

八、out和responce.getWriter().write()的区别

out输出的内容会先保存在out缓冲区内;
responce输出的内容保存在responce缓冲区内;
当jsp页面所有内容执行完毕后,会执行out.flush();将out缓冲区的数据追加到responce缓冲区的末尾;
执行responce的刷新操作,将所有数据发送给客户端;
在这里插入图片描述
在jsp被翻译成Java源文件中,使用的都是out输出,所以我们一般最好采用out对象进行输出;避免数据顺序发生错误。

out.write():只适合输出字符串
out.print():观察源码后发现,该方法是将其他类型的数据转换为字符串类型后,调用write()方法进行输出。

out.write()在输出数字的时候,底层会将数字转换为对应的char类型,所以在页面上显示的就不再是数字了;只适合输出字符串;
所以,我们可以使用out.print()方法,永远不会出错;

猜你喜欢

转载自blog.csdn.net/qq_41504815/article/details/114986164