JavaWeb基础学习笔记
什么是JSP
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入 Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
JSP的基础语法
JSP页面的构成元素
JSP页面的生命周期
脚本
格式:<% 代码片段 %>
代码片段中可写任意java代码,可定义变量、方法、表达式。
例:
out.println("Your IP address is " + request.getRemoteAddr());
声明
格式:<%! 声明 %>
代码片段中可写任意的java声明:声明变量、方法。
例:
<%! int i = 0;%>
<%! int a, b, c;%>
<%! Cicle a = new Circle(2,0);%>
表达式
格式:<%=表达式%>
表达式中的值会被转化成String,然后在插入HTML中。
例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
今天的日期是: 2017-1-30 12:03:07
注释
Jsp中有三种注释方法:
第一种:
<!-- -->
这是HTML的注释,注释的内容可以在浏览器中查看。
第二种:
<%-- 代码片段 --%>
这是jsp注释,注释的内容无法在浏览器中查看。
第三种:
<%
//String s = new String();
/*for(int i = 0; i < 10; i++){
out.println("这是第"+i+"行");
}*/
%>
这是java代码注释。
JSP内置对象
什么是内置对象
jsp内置对象是Web容器创建的一组对象,不能使用new关键字,就能直接使用的对象。
<%
int [] value = {60, 70, 80};
for(int i: value){
out.println(i);//out是常用的内置对象之一
}
%>
九种JSP内置对象
常用的内置对象共有5种:
- out
- request
- response
- session
- application
内置对象——out
内置对象——request
内置对象——response
内置对象——session
生命周期:
Session生命周期的设置方法:
内置对象——application
其他4类非常用内置对象
- page
- pageContext
- exception
- config
内置对象——page
内置对象——pageContext
内置对象——config
内置对象——exception
Tip:
处理错误的页面中的page指令中必须表明该页面是错误处理页面,即:page中必须有属性:isErrorPage=”ture”。出现错误的页面中的page指令中必须有errorPage=”xxx.jsp”表示:当前页面出现异常之后,交给哪个页面处理异常。
如下图:
内置对象的作用域分为四类:
名称 | 作用域 |
---|---|
page | 仅在当前页面有效 |
request | 仅在当前请求有效 |
session | 仅在当前会话有效 |
application | 在所有web程序(服务器)中有效 |
内置对象 | 名称 | Java 类 | 作用域 |
---|---|---|---|
request | 请求对象 | 类型 javax.servlet.ServletRequest | 作用域 Request |
response | 响应对象 | 类型 javax.servlet.SrvletResponse | 作用域 Page |
pageContext | 页面上下文对象 | 类型 javax.servlet.jsp.PageContext | 作用域 Page |
session | 会话对象 | 类型 javax.servlet.http.HttpSession | 作用域 Session |
application | 应用程序对象 | 类型 javax.servlet.ServletContext | 作用域 Application |
out | 输出对象 | 类型 javax.servlet.jsp.JspWriter | 作用域 Page |
config | 配置对象 | 类型 javax.servlet.ServletConfig | 作用域 Page |
page | 页面对象 | 类型 javax.lang.Object | 作用域 Page |
exception | 例外对象 | 类型 javax.lang.Throwable | 作用域 page |
JavaBean
什么是JavaBean
JavaBean的设计原则
JavaBean与Jsp动作标签
什么是Jsp动作标签
使用Jsp动作标签调用JavaBean
- useBean
- 在作用范围内,如果之后使用的usebean的id已在作用范围内存在,则表示直接使用之前建立的对象。
- 除了使用jsp:useBean再次调用范围内已存在的javabean,还可以使用内置对象如application.getAttribute(“Javabean id”),获取javabean对象(不过需要类型转换)。
- 点击一次超链接相当于一次重定向,request会新建,上一个request范围的对象就无法调用了。
- setProperty
- 第一个:property = “*”:与提交过来的表单相对应,对应的input name写入数据到javabean,例如:input name=“username”,则javabean中的私有属性username就会等于input中的数据。(全部匹配)。
- 第二个:property = “javabean属性”:与表单中的部分属性匹配。
- 第三个:给javabean属性value的值。
- 第四个:param中的属性名除了是表单还可以是URL传参。
- getProperty
JSP的状态管理
保存用户状态的两大机制:
1. Session:将用户数据保存在服务器。
2. Cookie:将用户数据保存在本地Cookie,用于不重要或非隐私的数据。
- 两者都是时间限制,即有效期。
Session
服务器为不同的客户端在内存中创建了用于保存数据的Session对象,并将用于标识该对象的唯一Id发回给与该对象对应的客户端。当浏览器再次发送请求时,SessionId也会被发送过来,服务器凭借这个唯一Id找到与之对应的Session对象。在服务器端维护的这些用于保存与不同客户端交互时的数据的对象叫做Session。
Cookie
Cookie:中文名称为“小甜点”,是web服务器保存在客户端的一系列文本信息。
作用:
1. 对特定对象的追踪;
2. 保存用户网页浏览记录与习惯;
3. 简化登录;
安全风险:容易泄露用户信息;
典型应用一:判断注册用户是否已登录网站。
典型应用二:“购物车”的处理。
jsp中创建与使用Cookie:
1. 创建Cookie对象:
Cookie cookie=new Cookie(String key,Object value);
2. 写入Cookie:
response.addCookie(cookie);
3. 读取Cookie:
Cookie[] cookies=request.getCookies();
Note:在cookie中保存中文字符串
1. 使用request.setCharacterEncoding(“utf-8”);
2. 需要使用 URLencoder 工具类中的encode(String, 编码名)方法编码。
3. 使用URLencoder类中的decode(String, 编码名)方法解码。
4.
Session和Cookie的对比
JSP指令与动作元素
include指令
语法: <%@ include file = "URL" %>
include动作
语法:
<jsp:include page="URL" flush ="true| false" />
include指令include动作的区别
- 指令:两个页面的源代码一起放置到一起,因此只有一个servlet。
- 动作:包含页面将被包含页面输出打印到自己页面上,因此有两个servlet。
jsp:forward 动作
语法:
<jsp:forward page = "URL"/>
等同于:
request.getRequestDispatcher("/URL").forward(request,response);
jsp:param 动作
<jsp:param name = "参数名" value = "参数值">
Tip:常常与<jsp:forward>
一起使用,作为其子标签。