JavaWeb学习笔记(二)

JavaWeb学习笔记(二)之 JSP

JSP的起源

在很多动态页面中,绝大部分的内容都是固定不变的,只有局部的内容需要产生变动。如果使用Servlet来输出这种动态页面的话,那么所有的静态内容也是要我们程序员来用Java代码实现,这样就会让我们的代码很臃肿,维护起来很麻烦。

因此,为了弥补Servlet的这种缺陷,JSP就产生啦。JSP是简化Senvlet编写的一种技术,它Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。

对JSP的认识

刚刚学习JSP的时候,对JSP的直观认识就是,这个就是一个html代码里面嵌套一些java代码啊!在JSP页面中编写的Java代码需要嵌套在==<%和%>==中,嵌套在<%和%>之间的Java代码被称之为脚本片段(Scriptlets),没有嵌套在<%和%>之间的内容被称之为JSP的模版元素。

           <%
                  out.println("Hello World!");
           %>

JSP文件就像普通的HTML文件一样,它们可以放置在WEB应用程序中的除了WEBINF及其子目录外的其他任何目录中,JSP页面的访问路怪与普通HTML页面的访问路径形式也完全一样。PS:WEBINF里面放的JSP文件可以作限制访问,即不想让别人可以直接访问的可以放在WEBINF里面。如果需要访问WEBINF里面的JSP文件,可以用转发来实现。

在JSP页面中也可以使用一种称之为JSP表达式的元素,只需将要输出的变量或表达式直接封装在<%=和%>之中,就可以向客户端输出这个变量或表达式的运算结果。在JSP表达式中嵌套的变量或表达式后面不能有分号

今天的日期是: <%= (new java.util.Date()).toLocaleString()%>

JSP的运行原理

首先,我们要明确JSP 的运行本质:JSP的本质就是一个Servlet。 我们可以去找JSP编译后对应的.jsp.java文件来看源码。

WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。

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

因为JSP本质上是一个Servlet,所以我们也可以在web.iml文件上配置.jsp文件的映射。

hellojsp
	/he11o.jsp
	
		test
		testValue
	


	hellojsp
	/hello.jsp

JSP中的四个域对象

  • pageContex      page域
  • request     &emsp request域
  • session      &emspsession域
  • application      &emspcontext域
名称
pageContex page域
request request域
session session域
application context域

JavaWeb学习笔记(二)_第1张图片

JSP的九个隐藏对象

JavaWeb学习笔记(二)_第2张图片

JSP的转发与重定向

请求的转发:RequestDispatcher.forwar
请求的重定向:HttpSerletResponse.sendRedirect

RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpSerletResponse.sendRedirect 方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

如果传递给HttpSerletResponse.sendRedirect方法的相对URL以"/“开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以”/"开头,它是相对于当前WEB应用程序的根目录。

调用HttoServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher,forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

HttpSerletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发田了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。、

RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServMetResponse sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

简单点总结就是:
JavaWeb学习笔记(二)_第3张图片

page 指令

1)怕个指令用于定义JSP页面的各种属性,无论怕个指令出现在JSP页面中的什么地方,它的作用都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。

2)page指令的常用属性:
①、import 属性:指定当前页面对应Servlet需要导入的类。

<%@ page import = "java.text.DateFormat" %>

②、session 属性:取值为true或false,指定当前session隐藏对象是否可用,也可以访问当前页面的对象。

<%@ page session = “false” %>

③、errorPage和isErrorPage:
errorPage指定若当前页面出现错误的实际响应页面时什么,其中 / 表示当前WEB应用的根目录。

<%@ page errorPage = "/error.jsp" %>

需要注意的是,errorPage 也可以在web.iml文件上配置。


	
	404
	
	/WEB-INF/error.jsp


	
	java.lang.ArithmeticException
	/WEB-INF/error.jsp

参考的资料

参考的资料为一下标题的超链接哦:
https://www.cnblogs.com/neuhao/p/7290570.html?utm_source=itdadao&utm_medium=referral

http://www.cnblogs.com/raozihao/p/7711582.html

https://blog.csdn.net/z291197968/article/details/54670939

https://blog.csdn.net/z291197968/article/details/54670939

JavaWeb学习笔记–其他文章

你可能感兴趣的:(Servlet,JavaWeb,JSP)