Jsp入门 学习

思维导图

Jsp入门 学习_第1张图片

导学

Jsp:Java Server Page(Java服务器页面),是一个动态的网页技术标准。它和其他的 Web 服务器页面技术:php/asp/ruby/python没有什么不同,对于它,可以简单的理解为 Jsp就是 HTML+Java 代码。在本节课程中,需要了解Jsp的用途、Jsp的执行原理、Jsp的语法等知识点

Jsp

为什么要使用Jsp:
虽然我们可以使用Servlet输出动态的网页,但是Servlet本身也有着它的局限性,比如某些复杂的网页开发维护不方便,动态页面和Java代码混合到一起难以维护,Servlet利用out.println()语句输出,开发效率低下,eclipse 难调试等问题。这些问题深深的困扰着我们,于是我们决定放弃使用Servlet对于复杂网页内容的输出,将眼光投向另一门技术Jsp。

Jsp介绍

Jsp特点:

  1. Jsp是j2ee的功能模块,由web服务器执行
  2. Jsp作用就是降低动态网页开发难度
  3. Jsp使用简单,有着HTML和Java基础就可以短时间上手
  4. Jsp将HTML和Java代码分离,降低开发难度
  5. Jsp的本质就是Servlet

Jsp的运行要求:

  1. 可正常运行的Tomcat
  2. 所有Jsp的页面扩展名必须是.jsp
  3. Jsp页面应放在web应用程序目录下

第一个Jsp页面

在Jsp页面中,Java代码需要使用<% %>包裹

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="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>工资年限计算表</title>
</head>
<body>
	<table>
		<tr>
			<th>year</th>
			<th>salary</th>
		</tr>
		<%
			for(int i = 0; i <= 50; i++) {
				out.println("");//Jsp中的打印输出语句,同servlet中代码
				out.println(""+ i +"");
				int salary = 0;
				if(i <= 5) {
					salary = salary + i * 150;//五年内,每年涨薪10%
				} else if(i > 5 && i <= 10) {
					salary = salary + 5 * 150 + 300 * (i - 5);//五年后,每年涨薪20%
				} else if(i > 10) {
					salary = salary + 5 * 150 + 300 * 5 + 375 * (i - 10);//十年后,每年涨薪25%
				}
				out.print(""+ salary +"");
				out.println("");
			}
		%>
	</table>
</body>
</html>

Jsp的执行过程

Jsp入门 学习_第2张图片
关于Jsp是Servlet的直接证明我们可以在Tomcat的work文件夹中找到。
Jsp入门 学习_第3张图片
所有我们在Jsp中所写的代码,无论是HTML还是Java都会被转译为Servlet代码。

Jsp基本语法-Scriptlet

Jsp的基本语法其实非常简单,可以分为以下四种:

  1. Jsp代码块
  2. Jsp声明构造块
  3. Jsp输出指令
  4. Jsp处理指令

Jsp代码块

用于在JSP中嵌入Java代码,语法:<% java代码 %>

Jsp声明构造块

Jsp声明构造块用于声明变量、方法、类,语法:<%! 声明语句 %>

现在已经不推荐使用了!
Jsp输出指令

用于在Jsp页面中显示java代码执行结果,语法:<%= Java代码 %>

Jsp处理指令

用于提供Jsp执行过程中的辅助信息,语法:<%@Jsp指令 %>

常用处理指令:

<%@ page %>定义当前Jsp页面全局设置
<%@ include %>将其他Jsp页面与当前Jsp页面合并
<%@ taglib %>引入Jsp标签库

Jsp注释
Jsp入门 学习_第4张图片
注意:HTML注释和Jsp注释不同,Jsp注释不会做任何处理;
而Jsp中的HTML注释仍然会被执行,但之后不会被浏览器解释;

Jsp综合训练

案例:质数算法
要求:列出1000以内的质数(除1以外,只能被1和自身整除的自然数)
任务:

  1. 使用List保存所有的有效的质数
  2. 将结果打印到页面,格式为

    X是质数

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<!-- 当前标签指示当前页面语言使用的是Java语言,contenType指明当前页面内容为text/html格式,并且字符集为UTF-8字符集 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="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>1000以内质数表</title>
</head>
<body>
<h1>1000以内质数表</h1>
<%-- 定义一个方法判断是否是质数 --%>
<%!	
	//该方法作用域在当前页面中,本页面任何位置都可以调用该方法,这也是jsp方法定义的局限性
	boolean isPrime(int num) {
		boolean flag = true;
		for(int j = 2; j < num; j++) {
			if(num % j == 0) {
				flag = false;
				break;
			}
		}
		return flag;
	}
%>
<%
	List<Integer> list = new ArrayList<Integer>();
	for(int i = 2; i <= 1000; i++) {
		/*boolean flag = true;
		for(int j = 2; j < i; j++) {
			if(i % j == 0) {
				flag = false;
				break;
			}
		} */
		boolean flag = isPrime(i);
		
		if(flag == true) {
			/* out.println("

"+ i +"

"); */
list.add(i); } } %> <% for(int p : list) { //out.println("

"+ p +"是质数

");
%> <h2 style="color:red;"><%=p %>是质数</h2> <% } %> </body> </html>

Jsp页面重用

对于页面来说,可能在整个项目中,每个页面都有着相同的头部和相同的尾部内容的。是否需要每个页面都写一遍这些内容呢?比如我们可以打开腾讯的门户首页,我们发现有些页面只有主体内容跟换,头尾并没有什么改变。
include指令可以复用页面

静态包含 include

include 是包含页面的指令,属于静态页面引入。
页面引入的好处在于:可以把多个页面共同的部分抽象出来定义。

<%@include file="head.jsp" %>
<h1>content</h1>
<%@include file="foot.jsp" %>

动态包含

<%
	String str = "HELLO";
%>
<jsp:include page="head.jsp"></jsp:include>
<h1><%=str %>,CONTENT</h1>
<jsp:include page="foot.jsp"></jsp:include>

静态引入和动态引入的区别

在静态引入中,子页面是原封不动的把页面的信息放到了父页面中,父页面把所有页面的页面信息都收集完成后,统一的进行解析,完成页面的输出。这样,如果在不同的页面中定义了相同名称的变量,那么就会产生冲突。

但是在动态引入中,由于每一个页面都是单独的进行解析的。再交给父页面合成生成一个 HTML 页面,每个子页面和父页面中定义的 Scriptlet 是不会产生冲突的。
在实际的开发中,我们一般都是用动态的引入。

你可能感兴趣的:(服务器开发技术,jsp)