JavaWeb世界(六):动态网页和JSP

一、Java中的动态网页简介

Servlet动态网页:Java代码(主)+ HTML代码(辅)

JSP动态网页:Java代码(辅)+ HTML代码(主)

Servlet的功能:

  1. 接收请求参数,封装成对象;
  2. 调用业务方法处理请求;
  3. 控制界面跳转到某一个JSP负责页面输出等。

我们一般不用Servlet做界面输出,我们将服务端和前端分离

二、JSP以及其原理

JSP(Java Server Page),其本质就是Servlet

从上图看出,JSPServlet的通配符映射为 *.jsp ,说明在浏览器地址栏中,以 .jsp 结尾的资源都会交给JSPServlet的类来处理。

那么JSPServlet到底把资源做什么处理了?

我们来看 jsp 文件编译成的 java 文件:(hello_jsp.java)

Tomcat 的 HttpJspBase 源码

我们发现最终 jsp 还是与Servlet有关

和Servlet中的方法是一致的

再继续看下面的代码:

就是在 Servlet 中输出静态网页内容

三、JSP基本语法

1.注释

  1. <!-- HTML注释 --> 会翻译到网页源代码中,但不会解释
  2. <%-- JSP注释--%>  不会翻译到Servlet和网页中

2.JSP脚本

  1. <%     Java代码    %>
  2. <%=     表达式       %>          相当于out.print(XXX)
  3. <%!     Java代码    %>          作为成员变量和方法

3.JSP指令

(1)page:

异常页面处理:

<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="errorPage.jsp"%>
<% int a = 1/0; %>
<%@ page language="java" contentType="text/html; charset=UTF-8" isErrorPage="true"%>
<%
	String msg = exception.getMessage();
%>
出错信息:<%= msg %>

设置全局错误页面:

(2)include

(3)taglib

四、JSP的九大内置对象和四大作用域

内置对象:在JSP中不需要声明和定义,可以直接使用的对象

对应的 obj_jsp.java 文件中:

九大内置对象
内置对象名称内置对象类型描述
requestHttpServletRequest请求对象
responseHttpServletResponse响应对象
pageContextPageContext当前JSP作用域对象
sessionHttpSession会话对象(session=“true”)
exceptionThrowable异常类型,封装当前JSP异常信息(isErrorPage=“true”)
applicationServletContext当前Web应用对象
configServletConfig当前Servlet信息配置对象
outJspWriter字符输出流对象
pageObject当前Servlet对象

 

作用域:作用域对象就只能在自己的作用范围内共享数据

作用域对象名称作用域对象的类型描述
pageContextpageContext当前JSP作用域对象
requestHttpServletRequest当前请求的作用域
sessionHttpSession当前会话的作用域
applicationServletContext当前Web应用的作用域

 

五、JSP的动作元素

以 forward 为例:

hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<% //int a = 1/0; %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String age = request.getParameter("age");
	%>
	<%= age %>
</body>
</html>

obj.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:forward page="/jspdemo/hello/hello.jsp">
		<jsp:param value="20" name="age"/>
	</jsp:forward>
</body>
</html>

最后将请求转发到了 hello.jsp

静态与动态包含

静态包含:使用JSP的include指令

<%@include file="被包含的页面文件"%>

特点:在编译阶段就已经把多个JSP合并在一起了

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%@ include file="top.jsp" %>
	<br/>
	main
	<br/>
	<%@ include file="foot.jsp" %>
</body>
</html>

动态包含:使用JSP动作指令

<jsp:include page="被包含的页面文件"/>

 特点:每一个JSP都翻译成了Servlet类,在运行时期动态合并在一起

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:include page="top.jsp"/>
	<br/>
	main
	<br/>
	<jsp:include page="foot.jsp"/>
</body>
</html>

注意:如果字包含的时候需要传递数据,此时只能使用动态包含,因为可以使用JSP的动作指令 getParameter

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值