您的位置:首页 > 编程语言 > Java开发

java--jsp(Java Server Page)_1

2017-07-05 18:37 435 查看
作者:xanlv------感谢作者!!

JSP技术简介 

JSP是Java Server Page的缩写,它是Servlet的扩展,它的作用是简化网站的创建和维护。 

JSP是HTML代码与Java代码的混合体。 

JSP文件通常以JSP或JSPX的扩展名。 

JSP拥有自己的语法。 

JSP形式上像HTML,但本质上是Servlet。 

JSP的出现,使得将Web开发中的HTML与业务逻辑代码有效分离成为可能。通常JSP只负责生成动态的HTML文档,而业务逻辑由其他Java组件如JavaBean来实现。JSP可以通过Scriptlet来访问这些组件。 

< % %> 
ContentType与pageEncoding的区别: 

pageEncoding是jsp文件本身的编码 ,把jsp文件编译成java的时候给编译器用的 。 

contentType的charset是指服务器发送给客户端时的内容编码 ,是浏览器解析网页的时候用的 

如果两个任意设置了其中一个,另一个即会与此保持一致。但,contentType除可以设置charset外,还可以设置MIME类型,如text/html 
Tomcat首次访问JSP的过程: 

当浏览器(客户端)首次请求时,如果没有此jsp对应的servlet的class文件,tomcat会把jsp文件翻译成servlet源文件.java,再编译成servlet的.class文件,把.class 文件发送给浏览器,让浏览器解析.class文件。如果有,就调用。 
容器按照以下顺序处理JSP请求

1、查找与JSP文件对应的Servlet,如果已经存在,就调用它的服务方法。 
2、如果与JSP对应的Servlet不存在,就解析文件系统中的JSP文件,将它翻译成Servlet源文件,接着把Servlet源文件编译成Servlet类,然后再去初始化并运行Servle。 
下是经过翻译的JSP文件,可见在它的服务方法中存在以下对像 

PageContext pageContext = null; 

HttpSession session = null; 

ServletContext application = null; 

ServletConfig config = null; 

JspWriter out = null; 

Object page = this; 

JspWriter _jspx_out = null; 

PageContext _jspx_page_context = null;

JSP语法: 
SP指令 < %@ 指令名 属性=“值”%> 
JSP声明 成员变量,或是成员方法。<%! …. %> 
Java程序片段 不论有多少这样的代码块,都将包含_jspSerivice方法中。<% … %> 
Java表达式 快速输出信息. _jspSerivice。<%= …%> 
JSP隐含对像 pageContext.request,response,session,confing,application

JSP指令-page:

语法:<%@ 指令名 属性=“值”%> 

Page指令-用于指定所使用的语言,及导入的包。 
属性说明: 

language – 示例:language=“java” 

import -如: (注意多个引用之间使用逗号分开。) 

<%@ page import=“java.util.,java.sql.”%> contentType – 指定响应结果的MIME类型。默认为text/html;charset=ISO-8859-1 

session = true | false –指定jsp页面是否使用session. 

errorPage = url – 指定当发生异常时转发到哪一个页面。 

isErrorPage = true|false, - 表示此页是处理异常的页面。 

pageEncoding – 设置页面的编码方式,此编码方式,会自动应用到contentType中的charset上,如果没有设置content-Type的话。显示时以content-Type为准。建议这两个值应该设置一个或至少应该一致。建议设置content-Type 

buffer = none | 8kb | sizeb – 设置页面缓冲区大小。-建议不要修改此值。

JSP指令-taglib—标签库: 

taglib指令,用于在页面上声明要使用的自定义标签。 

<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%> 

uri – 指定自定义的标签的引用URI。 

Prefix-指定使用时的前缀。 

如: 

此内容将在讲自定义标签时具体讲。 

JSTL :java Standard Tag Lib 

URL – 统一资源定位符 

URI – 统一资源标识符.—XML namespace=“http://hncu.cn” 





<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" import="java.util.*,java.awt.*" errorPage="jsps/error.jsp" pageEncoding="UTF-8"%>
<!-- jsp中的导报:1.import   2.","+包 -->
<!-- isErrorPage="true":错误页面 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>JSP技术演示</title>
</head>

<body>
<h2>这是主页</h2>
cForEach:<c:forEach begin="0" end="10">
这里相当于for循环...<br/>
</c:forEach>
<%
for(int i=3;i<10;i++){  //注意JSP表达式不能用;号结束
%>
<%=i %><br/>
<%
}
%>

<%//JSP的Java程序片段和JSP表达式:
//可以声明多个Java片段,它们都位于_jspService方法中。
int a=100;
out.println(a+"<br/>");//JspWriter
//jsp八个隐藏对象--用PageContext()可以获取

Button b=new Button("测试导报");//在page指令中import属性添加,java.awt.*
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=sdf.format(d);
out.println(time+"<br/>");

//JSP中的局部变量---在底层函数 _jspService()内都有效
String str="湖南城院";

//错--底层函数_jspService()内不可嵌套函数
//void hello(){
//}

//pageContext.setAttribute("name", "page1111");
//request.setAttribute("name", "req22222");
//session.setAttribute("name", "session33333");
application.setAttribute("name", "app44444");

%>

<%!//JSP声明
//声明函数或者变量,JSP中的成员变量或方法----在index_jsp.java中和  _jspService()并列的方法
//语法:
int t=1;
String hello(){
return "hello";
}
//可以声明静态变量,也可以声明静态方法。可以多个JSP声明的代码块。
%>

<%out.println("out.println_str:"+str+"<br/>");//在底层函数 _jspService()内访问它的的局部变量
out.println("out.println_hello():"+hello()+"<br/>");//在底层函数 _jspService()内访问它的的成员变量

//依次从pageContext开始request,session,application,从小到大寻找一个name属性的值
String name=(String)pageContext.findAttribute("name");
out.println("out.println_name:"+name+"--pageContext.,request,session,application中之一的name属性值<br/>");

String name2=(String)pageContext.findAttribute("name2");
out.println("out.println_name2:"+name2+"<br/>");//null
%>

$_name:${name}--pageContext.,request,session,application中之一的name属性值<br/><!-- el表达式 -->
$_name2:${name2}若4个容器中都不存在该属性,什么也不输出(不会输出null)<br/><!-- 若4个容器中都不存在该属性,什么也不输出(不会输出null) -->

<!-- 快速输出, 小细节: %=两者紧挨着,结尾处不要添加";"号 -->
<%="快速输出str:"+str+"<br/>" %>
<%="快速输出hello():"+hello()+"<br/>" %>
<%="快速输出name:"+name+"<br/>" %>
<%="快速输出name2:"+name2+"<br/>" %><!-- 输出null -->

<% //exception.getStackTrace();//必须在page指令中添加属性isErrorPage="true"
//使用exception,必须在Page指令中添加属性:isErrorPage="true"
%>

<%
//以下用于测试erroPage属性
//int i = 100/0;
%>

</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<%@ page session="false" language="java" import="java.util.*,java.awt.*" isErrorPage="true" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>错误...</title>
</head>

<body>
<h1>这是错误页面</h1>

<%
out.println(exception);
//session.getAttribute("aa");
%>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

查看原文>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: