1.<!--脚本片段,就是在jsp中嵌入java代码-->
<%
Date date = new Date();
String time =date.toLocaleString();
%>
2.<%=time %> <!--脚本表达式 :他的作用就是用于向浏览器输出数据 和out.write(time)一样 -->
3.<!--代码片段中的代码要完整-->
<%
for (int i = 0; i < 5; i++) {
%>
<h1>www.Baidu.com</h1>
<%
}
%>
4.<%--jsp注释,不会打给浏览器--%>
<!--html注释,会打给浏览器,查看源代码能看到,不能注释脚本代码-->
5.jsp指令
5.1 page 指令
(1)<%--page指令,
其中session标签如果设为true会为我们在当前项目的servlet中创建session对象,
isThreadSafe为false让线程安全就是实现singleMode接口
errorPage 配置错误处理的界面,也能在xml中配置但前者优先级高
isErrorPage="true" 是否是错误处理页面,有什么好处?能得到异常处理对象 看当前项目下生成的servlet中是否有exception 九大隐式对象之一
contentType 页面类型
pageEncoding 页面编码
isELIgnored 是否忽略el表达式
--%>
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="false" isThreadSafe="false"%>
(2)<%--当page标签中的session标签设为false时,我们也可以手动去获取session,因为即使界面关闭了,服务器仍然会保留30分钟 --%>
<%
request.getSession();
%>
(3)jsp乱码问题
<%--
要解决中文乱码问题
为什么会有中文乱码问题?1.我在硬盘中保存 中文是gb2312的格式,而服务器解析格式不一致导致乱码2.修改pageEncoding和charset
当pageEncoding设置过后,charset就不用配置了
--%>
5.2 include指令(静态包含,它包含的所有jsp会编译成一个servlet,性能好) 和android 界面引用一个想法
<%--静态包含和动态包含的区别:
1.静态包含 会把所有jsp合成一个servlet
2.动态包含会把所有的jsp区分开来生成对应的servlet
--%>
<%--用include指令引用header 和 footer--%>
<%@include file="/public/header.jsp"%>
aaaaaaaaaa<br/>
<%@include file="/public/footer.jsp"%>
5.3 taglib指令
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 对jstl包进行导包,uri在配置文件中直接找
prefix是个命名名字
6.动态包含(在开发中尽量使用静态包含,不要使用动态包含,因为会耗性能)
<%
request.getRequestDispatcher("/public/header.jsp").include(request, response);
%>
<%--
aaaaaaaaaa<br/> 这样写出现在html中间,因为缓存
想让代码能在header和footer中间显示就得如下:
--%>
<%
response.getWriter().write("aaaaaaa<br/>");
%>
<%
request.getRequestDispatcher("/public/footer.jsp").include(request, response);
%>
7.out隐式对象(有缓冲,buffer,推荐使用)
<%--
jsp九大隐式对象(源代码中)
Request
Response
Session
Application
Config
Page
Exception
Out
pageContext
--%>
<%-- out对象有缓冲buffer,我们可以在page中关闭,在开发中我们推荐用隐式对象 --%>
<%
out.write("hahahh");
response.getWriter().write("wowowo");
%>
8.pageContext隐式对象(封装了其他8大隐式对象)就是page域,最小
9.pageContext对象访问其他域
<%--
1.在request域中设置值
2.利用pageContext去获取request域中的值
3.out对象输出
4.pageContext.findAttribute()方法是说从最小的page域到最大的Servlet域中去
--%>
<%
request.setAttribute("data", "aaaa");
String data = (String)pageContext.getAttribute("data",PageContext.REQUEST_SCOPE);
out.write(data);
pageContext.findAttribute("data"); // page->requset->session->application
%>
<%--
el表达式
${data} //实际上就是 pageContext.findAttribute("data"); // page->requset->session->application
--%>
10.pageContext对象的常用方法
<%--
1.跳转到某个页面
2.引入某个页面
--%>
<%
pageContext.forward("/1.jsp");
pageContext.include("/footer.jsp");
%>
11.jsp常用标签
<%--
1.跳转标签 <jsp:forward
2.引入标签 <jsp:include
3.传参标签 <jsp:param
--%>
<%--当web.xml中访问/14.jsp时 跳转到IndexServlet--%>
<jsp:forward page="/servlet/IndexServlet">
<jsp:param value="username" name="xxxx"/>
</jsp:forward>
<jsp:include page="/public/footer.jsp"></jsp:include> <%--就相当于pageContext.include()方法--%>
12.对Person类,使用jsp:usebean标签
person类
public class Person {
private String name;
private int age;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
jsp:usebean标签
<!--userbean标签体只在userbean标签实例化的时候才执行-->
<jsp:useBean id="person" class="com.boom.domain.Person" scope="page">
aaa
</jsp:useBean>
<%=person.getName()%>
13..对Person类,使用jsp:setProperty标签
<jsp:useBean id="person1" class="com.boom.domain.Person" scope="page"></jsp:useBean>
<%--手动为bean属性赋值 --%>
<%--<jsp:setProperty name="person1" property="name" value="xxxxx"/> --%>
<%=person1.getName()%>
<%--用请求参数给bean的属性赋值 http://localhost:8080/day09/2.jsp?name=xiaoming&age=21--%>
<jsp:setProperty name="person1" property="name" param="name"/>
<jsp:setProperty name="person1" property="age" param="age"/>
<jsp:setProperty name="person1" property="birthday" value="<%=new Date()%>"/>
<!--支持8种基本数据类型的转换(把客户提交的字符串,转成相应的8种基本数据类型,赋到bean中) -->
<%=person1.getName() %><br/>
<%=person1.getAge() %><br/>
<%=person1.getBirthday() %><br/>
<br/>------------------<br/>
<%--用所有的请求参数为bean赋值 --%>
<jsp:setProperty name="person1" property="*" />
<%=person1.getName() %><br/>
<%=person1.getAge() %><br/>
<jsp:getProperty name="person1" property="name" />
<jsp:getProperty name="person1" property="age" />
<jsp:getProperty name="person1" property="birthday" />
<%--之后用el表达式,就不用在代码中进行判断,若无对象就会返回一个空字符串--%>
14.友好界面
14.1 对错误设置的界面
404.jsp
代码:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>404错误</title>
</head>
<body>
对不起,出错了
</body>
</html>
500.jsp
代码:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>505</title>
</head>
<body>
对不起,资源未找到
</body>
</html>
14.2 对固定样式设置界面共用一些东西
header.js
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
这是页头<br/>
footer.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
这是页脚<br/>