一、Java中的动态网页简介

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

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

Servlet的功能:

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

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

二、JSP以及其原理

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

用java 编写简单动态网页 java可以做动态网页吗_Servlet

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

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

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

用java 编写简单动态网页 java可以做动态网页吗_html_02

Tomcat 的 HttpJspBase 源码

用java 编写简单动态网页 java可以做动态网页吗_Servlet_03

我们发现最终 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 文件中:

九大内置对象

内置对象名称

内置对象类型

描述

request

HttpServletRequest

请求对象

response

HttpServletResponse

响应对象

pageContext

PageContext

当前JSP作用域对象

session

HttpSession

会话对象(session=“true”)

exception

Throwable

异常类型,封装当前JSP异常信息(isErrorPage=“true”)

application

ServletContext

当前Web应用对象

config

ServletConfig

当前Servlet信息配置对象

out

JspWriter

字符输出流对象

page

Object

当前Servlet对象

 

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

作用域对象名称

作用域对象的类型

描述

pageContext

pageContext

当前JSP作用域对象

request

HttpServletRequest

当前请求的作用域

session

HttpSession

当前会话的作用域

application

ServletContext

当前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