1.什么是JSP
JSP全名是Java Server Page,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在。Html代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。
例:
<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
String path =request.getContextPath();
String basePath request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'simple.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is mypage">
<!--
<link rel="stylesheet"type="text/css" href="styles.css">
-->
</head>
<body>
当前访问时间是:
<%
out.print(newjava.util.Date().toLocaleString());
%>
</body>
</html>
2.jsp运行原理
1.servlet运行原理:首先Servlet运行时需要在web.xml配置文件中查找匹配的,然后将请求发给指定的Servlet程序去处理。
Jsp运行有的是:JSP则不需要在web.xml配置,因为在Tomcat服务器的web.xml中实现了JSP的相关配置.
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
2.其实JSP文件也可以像Servlet程序一样,在web.xml文件中进行注册和映射虚拟路径。注册JSP页面的方式与Servlet类似,只需将元素修改为元素即可。
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<jsp-file>/simple.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
3.jsp所生成的servlet代码
当用户第一次访问JSP页面时,该页面都会被JspServlet翻译成一个Servlet源文件,然后将源文件编译为.class文件.
myeclipse生成的源码:Servlet源文件和.class文件都放在“tomcat安装目录/work/Catalina/localhost/应用名/”目录下。
idea生成的源码:C:\Users\Administrator.IntelliJIdea2017.3\system\tomcat\Tomcat_8_0_47_demo1\work\Catalina\localhost\ROOT\org\apache\jsp
3.jsp基本语法
1.JSP模板元素
JSP页面中的静态HTML内容称之为JSP模版元素。JSP模版元素定义了页面的结构和外观。
2.Jsp脚本
(1) <%=expression%>:JSP表达式
JSP表达式(expression)用于将程序数据输出到客户端,数据封装在“<%=” 开头 “%>”结尾的标记中。
然后针对JSP表达式的使用,重点讲解以下几点:
l 表达式将要输出的变量或者表达式直接封装在“<%”和“%>”标记中。
l 表达式中的变量或表达式的计算结果将被转换成一个字符串,然后插入JSP页面输出结果的相应位置处。
l JSP表达式中的变量或表达式后面不能有分号(;)
(2)JSP脚本片段
JSP脚本片断是指嵌套在<% 和%>之中的一条或多条Java程序代码,这些Java代码必须严格遵守Java语法规范,否则编译会报错。
然后针对JSP脚本片段的使用,重点讲解以下两点:
l JSP脚本片断是嵌套在<% 和 %>之中的Java程序代码,必须严格遵守Java语法规范,否则编译会报错。每个执行语句后都使用分号(;)结束。
l 单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句。
例:
标题党
<%int x=3;
Out.println(x);
%>
一个jsp页面中,可以出现多个脚本片段,在两个或者多个脚本片段之间可以嵌套文本、html标记等。
例:<%int x=3;
%>
标题党
<% Out.println(x);
%>
(3)JSP声明
当JSP页面被翻译成Servlet程序时,JSP中包含的脚本片段、表达式、模板元素都将转换为Servlet中_jspService()方法的程序代码。这时,JSP脚本片段中定义的变量都将成为_jspService()方法中的局部变量,而JSP脚本片段中定义的方法都将插入_jspService()方法,从而会出现程序的方法再定义方法,这样的语法是错误的。
为了解决上述问题,在JSP技术中提供了声明,以“<%!”开始,以“%>”结束。
<%!static{
System.out.println(“static code block”);} %>
(4)JSP注释
<%--注释信息--%>
<%@ page language="java"contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%-- 这个是注释内容--%>
</body>
</html>
注释信息不会打印在客户端
jsp注释与html注释的区别:是否打印在客户端
4.JSP 指令
为了设置JSP页面中的一些信息,SUN公司提供了JSP指令。 JSP 2.0中共定义了page、include和taglib三种指令
1.page指令
在JSP页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式,JSP页面采用的语言等,这时,可以通过page指令来实现
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
pageEncoding指定了jsp页面是采用了什么编码方式,与当前页面的编码方式一定要一致。当前页面的编码可以通过右键来查看。
ContentType:设置的是响应编码。
这两个可以一致,也可以不一致。如果只设置一个的话,那么另外一个会和设置的一样。
Import:导包,可以重复出现
errorPage 指定错误页面
例:page.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Insert titlehere</title>
</head>
<body>
<%
int a=1/0;
%>
</body>
</html>
此时会出现错误
在page指令中加入errorPage=“error.jsp”
<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="error.jsp"%>
Web.xml中配置通用的错误页面
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
注意:1.如果设置了jsp页面的errorPage属性,那么在web.xml文件中设置的异常错误处理将对该页面不起作用
2.使用ie浏览器测试时,页面可能会无法显示出错误信息,这时,单击”IE工具”-“Internet选项”-“高级”命令,取消勾选选项“显示友好http错误提示”复选框。
2.include指令
在JSP页面静态包含一个文件,例HTML文件,文本文件等,可以通过include指令来实现
<%@ page language="java"contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>欢迎你</title>
</head>
<body>
欢迎你,现在的时间是:
<%@ include file="simple.jsp"%>
</body>
</html>
注意:
1.被引入的文件必须遵循jsp语法,其中的内容可以包含静态html,jsp脚本元素和jsp指令等普通jsp页面所具有的一切内容。
2.除了指令元素之外,被引入的文件中的其他元素都被转换成相应的java源代码,然后插入当前jsp页面所翻译成的Servlet源文件中,插入位置与include指令在当前jsp页面中的位置保持一致。这两个相当于源码放在一块进行编译。
3.file属性的设置必须使用相对路径,如果以”/”开头表示相对于Web应用程序的根目录,否则,相对于当前文件。