JSP简介 1、定义 JSP(Java Server Pages) 是一种运行在 WEB 服务器的脚本语言,它的本质就是 Servlet 当jsp页面第一次被访问时,服务器会把jsp编译成java文件,然后再把java编译成.class,然后创建
JSP简介
1、定义
- JSP(Java Server Pages) 是一种运行在 WEB 服务器的脚本语言,它的本质就是 Servlet
- 当jsp页面第一次被访问时,服务器会把jsp编译成java文件,然后再把java编译成.class,然后创建该类对象,最后调用它的service()方法,第二次请求同一jsp时,直接调用service()方法。
- jsp 生成的xxx_jsp.java 文件和xxx_jsp .class 文件存放在tomcat的目录下的work\Catalina\localhost\部署文件\org\apache\当前 WEB 应用 的 路径 \包名的目录下。例如D:\software\Tomcat\apache-tomcat-8.0.38\work\Catalina\localhost\jsp\org\apache\jsp\jsp
- jsp和servlet的关系
2、组成
- jsp页面主要由6大元素组成:指令、脚本、声明、表达式、注释、静态内容(html)
- 指令:程序通过 JSP 源码 向 JSP 容器 ( Tomcat ) 下达的命令
<%@ 指令名称 属性名称 = "属性值" %>
例如
<%@ page language = "java" %> - 表达式
<%=
表达式
%>
例如
<%= reqeust.getContextPath() %>
- 声明
<%!
声明属性或方法
%>
例如
<%! public String name = "Java Server Pages" ; %> - 脚本
<%
直接书写 Java 代码块
%>
例如
<% for ( int i = 0; i<5 ;i++ ){System.out.println(i);
}
%>
- 注释:只存在于 JSP 文件中,相应的 .java 文件和 .class 文件中都不存在
<%-- Jsp注释--%>
指令
1、page指令
- 通过 page 指令的属性可以命令 Tomcat 按照要求去处理 JSP
- page.jsp --"翻译"--> page_jsp.java --"编译"--> page_jsp.class
2、include指令
- 使用 include 指令可以包含 一个 .html 、.jsp 、 .txt 文件(只能是字符文件,不能是图片(inner.jpg)等文件,也不能是 Servlet(InnerServlet.java) )
- 使用 include 包含一个文件,包含操作发生在 .jsp 被翻译成 .java 阶段
- 包含,与RequestDispatcher的include()方法的功能相似
- 解决乱码问题
方法一:在文件设置pageEncoding编码,即添加<%@page pageEncoding="UTF-8"%>,尽管不能识别该指令,但通过include指令引入时该指令就能起作用
方法二:在web.xml里统一配置pageEncoding的编码,在web-app标签里添加如下配置:
<jsp-config> <jsp-property-group> <description>html encoding</description> <display-name>JSPConfiguration</display-name> <url-pattern>*.html</url-pattern> <el-ignored>true</el-ignored> <page-encoding>UTF-8</page-encoding> <scripting-invalid>false</scripting-invalid> <include-prelude></include-prelude> <include-coda></include-coda> </jsp-property-group> </jsp-config>
测试案例:
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8 "%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>include 指令</title> </head> <body> <div> 使用 include 指令可以包含 一个 .html 、.jsp 、 .txt 文件(只能是字符文件,不能是图片(inner.jpg)等文件,也不能是 Servlet(InnerServlet.java) )</div> <div style="border: 1px solid blue ;">
<%@ include file = "inner.jsp"%> </div> <div style="border: 1px solid blue ;">
<%@ include file = "inner.html"%> </div> <div style="border: 1px solid blue ;">
<%@ include file = "inner.txt"%>
</div> <div>使用 include 包含一个文件,包含操作发生在 .jsp 被翻译成 .java 阶段</div> <div><b>坑:</b> 怎么解决被包含的文件的 乱码问题 ( 在 .jsp 转换成 .java 文件阶段,怎么控制编码 ) ?</div> </body> </html>
inner.jsp
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8 "%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>inner</title> </head> <body> <% for( int i = 0 ; i < 10 ; i++ ) { out.println( i ) ; // 这个 out 是 JSP 内置对象 } %> </body> </html>
inner.html
<%@page pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>我是内部的HTML页面</h1> </body> </html>
inner.txt
<%@page pageEncoding="UTF-8"%> 你好,我是文本文件
运行结果如下:
3、taglib 指令
- 导入标签库
测试案例:
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8 "%>
<%@ taglib prefix = "c" uri= "http://java.sun.com/jsp/jstl/core" %> <!-- prefix前缀 对应的uri--> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>taglib指令</title> </head> <body> <c:forEach begin="1" step="2" end="11" var="x"> <!-- EI表达式 --> ${ x } </c:forEach> </body> </html>
表达式
1、定义
- 表达式可以是 1 + 1 ,或者是 request , 或者是 request.getContextPath()
- 表达式都会有自己的 "运算" 结果
- 表达式被用来用作 输出 或 赋值
测试案例:
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8 "%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JSP表达式</title> </head> <body> <h4>
<%= 1 + 1 %> </h4> <h4>
<%= request %> </h4> <h4>
<%= request.getContextPath() %> </h4> </body> </html>
声明
1、定义
- 在JSP中可以通过声明来声明属性和方法
- 被声明的属性和方法都被包含在 jsp 对应的那个 servlet 类中
测试案例:
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8 "%>
<%@ page import= "java.io.IOException "%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>声明</title> </head> <body> <%-- 声明属性 加到类里面直接作为成员,全局 --%>
<%! public String name = "Java Server Pages" ; %>
<%-- 声明方法--%> <%! public void hello( JspWriter out ) throws IOException { System.out.println( name ); out.print( name ); }
%>
<%-- 通过脚本来调用方法 --%> <%! hello( out ); %> </body> </html>
脚本
1、定义
- 在JSP中可以嵌入Java代码
测试案例:
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page contentType = "text/html; charset= UTF-8 "%>
<%-- jsp注解--%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>脚本</title> </head> <style> h1 { /*css 注释*/ color: blue; } </style> <script> //js单行注释 var i = 0; /*js多行注释 function f1(){ alert(i); }*/ </script> <body> <!--HTML注释 -->
<% for (int i = 1; i < 5; i++) { //java注释 %> <h1>哈</h1>
<% } %>
</body>
</html>
注释
1、各类注释
jsp注释:<%-- jsp注解--%>
js注释://js单行注释 /*js多行注释*/
css注释: /*css注释*/
java注释://java单行注释 /*Java多行注释*/ /**Java文本注释*/
html注释:<!--HTML注释 -->
xml注释:<!--XML注释 -->
转载请于明显处标明出处
http://www.cnblogs.com/AmyZheng/p/9051076.html