1.Jsp基础

1.1 简介

Jsp,全称 Java Server Page java服务页面,能提供java服务的页面

jsp vs html

html: 由html标签组成的,输出静态内容。

jsp: 可以写html标签,还可以java代码。

1.2 特点

1)既可以写html代码,也可以写java代码

2)jsp页面需要交给tomcat服务器运行!!!

1.3 Jsp运行的目录

tomcat的work目录,这个目录下存放jsp页面运行过程中产生的临时文件。

1.4 体验jsp页面如何编写和运行

向浏览器输出当前的系统时间

如何访问jsp页面?

直接通过浏览器访问即可!!(把当前html页面访问)

1.5 Jsp页面如何被tomcat服务器运行

第一次访问jsp:

1)tomcat服务器把jsp页面翻译成java源文件。(01hello.jsp  -》  _01hello_jsp.java)

2)tomcat服务器把java源文件编译成class文件。_01hello_jsp.java -> _01hello_jsp.class

3)读取class文件,创建类对象。_01hello_jsp

4)执行类中的方法。_01hello_jsp类的方法

第n次访问jsp:

4)执行类中的方法。_01hello_jsp类的方法

直接走第4个步骤

注意:

修改了jsp页面时,重新走翻译和编译的过程。

<%@page language="java" import="java.text.SimpleDateFormat"%>
<%@ 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//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>第一个jsp页面</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 my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<center>
<h3>输出当前系统的时间</h3>
</center>
<%
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String curDate = sdf.format(new Date());
//向浏览器输出
out.write("当前时间为:" + curDate);
%>
</body>
</html>

问题:运行的class类是什么类?

public final class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBase

public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {

我们的jsp的源文件是一个servlet!

结论: jsp就是一个servlet!!!!

servlet的技术可以用在jsp上。

servlet的生命周期:

构造方法:

init方法:

service方法

destory方法

jsp的生命周期

翻译(java文件)

编译(class文件)

构造方法

_jspInit方法

_jspService方法

_jspDestroy方法

2.Jsp语法

2.1 Jsp模板

Jsp页面的html代码就是模块

3.2 Jsp表达式

语法: <%=变量或表达式%>

作用: 向浏览器输出变量的值或表达式技术的结构

注意:

1)原理是使用out.print()方法向浏览器输出内容

<body>
<!-- jsp表达式 -->
<%
String name = "eric";
int a = 10;
int b = 20;
%>
<%=name%><br />
<%=a + b%> </body>

2.3 Jsp脚本

语法:<% java语句  %>

作用: 执行java语句

原理: 脚本就是原封不动地翻译到java文件的_jspServcice方法中执行。

<!-- jsp脚本 -->
<%
Random rand = new Random();
float num = rand.nextFloat();
out.write("随机生成一个小数:" + num);
%>
<hr />
<%
for (int i = 1; i <= 6; i++) {
%>
<h<%=i%>> 标题<%=i%></h<%=i%>>
<%
}
%>

2.4 Jsp声明

语法:<%! 变量或方法   %>

作用:用于声明变量或方法

原理: 声明的变量是成员变量,声明的方法是成员方法

注意:

1)不要声明和翻译后的java文件相同的方法名

2)jsp脚本不能声明方法

2.5 Jsp注释

语法: <%-- jsp注释 --%>

作用: 注释jsp页面内容

注意:

html的注释会被翻译和执行,而jsp的注释不会被翻译和执行。

3.Jsp的三大指令

语法: <%@ 指令  %>

3.1 taglib指令

暂时不学,在jsp标签时学习

3.2 include指令

作用:用于包含其他页面(作用类似于c语言中的导包,别的页面写过的东西可以直接倒进来用)

原理:

直接把包含与被包含页面的内容先合并在一起,然后翻译成一个java源文件,最后编译执行。(先合并再翻译)

(源码包含,也叫做静态包含)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>include指令</title> </head> <body>
<%--包含头部页面 --%>
<%@ include file="/common/header.jsp"%>
主界面内容
</body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>头部页面</title> </head> <body>
这是头部页面
<hr />
</body>
</html>

3.3 page指令

作用:告诉浏览器如何翻译jsp文件

<%@ page
language="java" -- 使用什么语言来翻译jsp文件
import="java.util.*" --导包。导入多个使用逗号
jsp文件的编码相关的:
pageEncoding="utf-8" -- 使用什么编码翻译jsp文件
contentType="text/html; charset=utf-8" --服务器发送给浏览器的数据类型和内容编码格式
异常页面相关的:
errorPage="/common/error.jsp" -- 指定jsp错误处理页面
isErrorPage="true" --指定当前页面为错误处理页面,如果是错误处理页面,就可以使用exception内置对象,使用exception对象可以查询错误信息。
配置全局的错误处理页面
session="true" -- 是否打开session功能,true:打开,false:关闭
buffer="8kb" -- jsp页面的缓存区大小
isELIgnored="false" --是否忽略EL表达式。true:忽略。false:不忽略。
%>
<!-- 配置全局的错误处理页面 -->
<error-page>
<error-code>404</error-code>
<location>/common/404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/common/500.jsp</location>
</error-page>
<%@ page
language="java"
import="java.util.*"
pageEncoding="utf-8"
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>异常处理</title>
</head> <body>
jsp页面
<%
String name = null;
name.split(",");
%>
</body>
</html>

4.Jsp的最佳实践

servlet技术: 使用java语言开发动态网页。功能:写java代码,输出html代码

jsp技术: 使用java语言开发动态网页。功能:写java代码,输出html代码

分工问题:

servlet技术: 写java代码(写普通java类)

jsp技术: 输出html代码(类似于html页面)

项目中涉及的功能:

1)接收参数信息    (servlet做)

2)执行业务逻辑(CURD)  ( servlet做 )

3)返回结果,输出结果  (jsp做)

4)跳转页面            (servlet做)

案例:

显示用户信息

1)查询用户数据(servlet)

List<User>  list

把用户数据保存到域对象,发送到jsp页面

2)显示用户数据  (jsp)

package cn.jxufe.entity;

public class User {
private String id;
private String name;
private String password; public User() {
super();
// TODO Auto-generated constructor stub
} public User(String id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }
package cn.jxufe.web;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cn.jxufe.entity.User; public class ListUserServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1)查询用户数据
List<User> list = new ArrayList<User>(); list.add(new User("1", "eric", "123456"));
list.add(new User("2", "rose", "123456"));
list.add(new User("3", "jacky", "123456"));
list.add(new User("4", "lucy", "123456"));
list.add(new User("5", "lily", "123456")); // 2)把list数据保存到域对象
/**
* context域
* request域:必须使用转发
* session域:
*/
request.setAttribute("list", list);
// 转发
request.getRequestDispatcher("/04listUser.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }
<%@ page language="java" import="java.util.*,cn.jxufe.entity.*"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>显示用户信息</title> </head> <body>
<table border="1" align="center" width="500px">
<tr>
<th>编号</th>
<th>姓名</th>
<th>密码</th>
</tr>
<%
//从request域中获取list数据
List<User> list = (List<User>) request.getAttribute("list");
for (User u : list) {
%>
<tr>
<td><%=u.getId()%></td>
<td><%=u.getName()%></td>
<td><%=u.getPassword()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>

5.Jsp的内置对象

5.1 简介

  在jsp开发有些对象使用频率比较高,(例如:requesst,respone,session,servletcontext。。。)如果每次要使用这些对象都自己去获取对象才能使用,会显示太麻烦了。jsp把这些对象都创建或获取好了,我们开发者之间使用这些对象即可!!!这些对象就叫做内置对象。

5.2 9大内置对象

jsp对象名       类型

request          HttpServletRequest   请求对象

response       HttpServletResponse  响应对象

config            ServletConfig        配置对象

application    ServletContext      servlet上下文对象

session         HttpSession          会话对象

exception     Throwable            异常信息对象

page            Object      代表jsp文件翻译后的java类

out              JspWriter     代表输出对象,response.getWriter() PrintWriter

相当于带缓存功能的PrintWriter

pageContext   PageContext    代表jsp的上下文对象

5.3 out对象

out对象的类型JspWriter类,相当于带缓存功能的PrintWriter类

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
buffer="1kb"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>My JSP '05out.jsp' starting page</title> </head> <body> <%
//for(int i=1;i<=1023;i++){
out.write("123");
//}
System.out.println("当前缓存区大小:" + out.getBufferSize());
System.out.println("缓存区剩余的大小:" + out.getRemaining());
//手动刷新
//out.flush();
response.getWriter().write("abc");
%>
</body>
</html>

5.4 pageContext对象

作用:

1)通过pageContext对象获取其他8个内置对象

场景:使用自定义标签的时候

2)作为域对象使用

2.1 保存到page域

pageContet.setAttribute("name",Object);

2.2 保存到其他域

pageContext.setAttribute("name,Object,PageContext.PAGE_SCOPE)

PAGE_SCOPE

REQUEST_SCOPE

SESSION_SCOPE

APPLICATION_SCOPE

2.3 获取page域

pageContext.getAttribute("name")

2.4 从其他域中获取

pageContext.getAttribute("name,PageContext.PAGE_SCOPE)

PAGE_SCOPE

REQUEST_SCOPE

SESSION_SCOPE

APPLICATION_SCOPE

2.5 自动搜索四个域数据

pageContext.findAttribute("name")

6.jsp的四个域对象

request域: HttpServletREquest

application域: ServletContext

session域: HttpSession

page域: PageContext

6.1 域对象的作用

共享数据,保存数据,获取数据

6.2 域对象的方法

setAttribute()

getAttribute()

removeAttribute()

6.3 域的作用范围

从小到大:

page域: 在同一个jsp页面中数据有效!

request域: 在同一个请求中数据有效的!

session域: 在同一个会话中数据有效的!

application域: 在同一个网站中数据有效的!

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
session="true"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>pageContext对象</title>
</head> <body>
<%
//session.setAttribute("name","eric");
//作用一: 可以获取其他8个内置对象
out.write("相等吗?" + (pageContext.getRequest() == request) + "<br/>");
out.write("相等吗?" + (pageContext.getResponse() == response)); out.write("<br/>");
//作用二: 作为域对象 //1)可以保存到page域中
//保存数据(默认情况下,保存到page域)
pageContext.setAttribute("message","page's message");
//2)保存到其他三个域中(request,session,application)
//pageContext.setAttribute("message","request's message",PageContext.REQUEST_SCOPE);//保存到requet域
//等价于: request.setAttribute("message","request's message");
//pageContext.setAttribute("message","session's message",PageContext.SESSION_SCOPE);
pageContext.setAttribute("message", "application's message", PageContext.APPLICATION_SCOPE); /**
注意:
1)在哪个域中保存,就必须从哪个域中获取 */ //获取数据
//1)从page域中取出
/**
String message = (String)pageContext.getAttribute("message");
out.write("pages' message="+message+"<br/>");
//2)从其他域中取出
message = (String)pageContext.getAttribute("message",PageContext.REQUEST_SCOPE);
out.write("request's message="+message+"<br/>");
message = (String)pageContext.getAttribute("message",PageContext.SESSION_SCOPE);
out.write("session's message="+message+"<br/>");
message = (String)pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE);
out.write("application's message="+message+"<br/>");
*/ //3)自动从四个域中搜索数据
//搜索顺序: 从小到大: page->request->session->application
out.write("message=" + pageContext.findAttribute("message")); //跳转页面
//request.getRequestDispatcher("/06pageContext2.jsp").forward(request,response);
//response.sendRedirect("/day11JSP/06pageContext2.jsp");
%>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP '06pageContext2.jsp' starting page</title>
</head> <body>
<%
String message = (String) pageContext.getAttribute("message");
out.write("pages' message=" + message + "<br/>");
//2)从其他域中取出
message = (String) pageContext.getAttribute("message", PageContext.REQUEST_SCOPE);
out.write("request's message=" + message + "<br/>");
message = (String) pageContext.getAttribute("message", PageContext.SESSION_SCOPE);
out.write("session's message=" + message + "<br/>");
message = (String) pageContext.getAttribute("message", PageContext.APPLICATION_SCOPE);
out.write("application's message=" + message + "<br/>");
%>
</body>
</html>

11JSP基础的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

随机推荐

  1. Dmango cxrf 自定义分页 缓存 session 序列化 信号量 知识点

    参考https://www.cnblogs.com/wupeiqi/articles/5246483.html

  2. 快速构建Spring Cloud工程

    spring cloud简介 spring cloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环境 ...

  3. scipy几乎实现numpy的所有函数

    NumPy和SciPy的关系?   numpy提供了数组对象,面向的任何使用者.scipy在numpy的基础上,面向科学家和工程师,提供了更为精准和广泛的函数.scipy几乎实现numpy的所有函数, ...

  4. mysql5.7多实例安装

    [root@vhost1]# cd /opt/source[root@vhost1]#ls mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz[root@vhost1 ...

  5. 如何实现免登陆功能(cookie session?)

    Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...

  6. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_13-ArrayList集合概述和基本使用

    新建类 多了个尖括号,大写字母E,这是什么意思呢? 尖括号当中叫做泛型.存储的统一的类型,这个类型就在尖括号里面写上,我们用一个字母占位表示. 如何创建呢 构造方法有三个,最常用的就是无参构造 先掌握 ...

  7. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_15-ArrayList集合存储基本数据

    泛型必须是引用类型,不能是基本类型 里面的泛型用int就会报错 集合里面保存的都是地址值.基本类型的数据没有地址值,所以你想要往里面存int是不可以的 基本类型可以往ArrayList里面放,但是必须 ...

  8. shell习题-输入数字执行对应命令

    要求: 写一个脚本实现如下功能:输入一个数字,然后运行对应的一个命令.显示命令如下:*cmd meau**  1—date 2–ls 3–who 4–pwd当输入1时,会运行date, 输入2时运行l ...

  9. Jmeter之正则表达式提取器

    在很多情况下,我们需要提取响应结果中的一些信息,供后续功能使用.可以使用后置处理器中的正则表达式提取器. 一.正则表达式提取器 二.配置说明 1.姓名:标识 2.注释:备注 3.Apply to:正则 ...

  10. JsonDatetime

    ToDatetime public DateTime JsonDateTimeConvert(string time) { //try //{ if (String.IsNullOrEmpty(tim ...