1.1 JSP简介
1.1.1 JSP概述
- JSP概述
- 全称是Java Server Pages,他和Servlet一样,也是Java所提供的一门用于开发动态WEB资源的技术,
- JSP也是JavaEE的规范之一,JSP的底层其实就是Servlet。
- JSP的特点
- 编写JSP就像编写HTML一样
- JSP和HTML的区别
- HTML只能向客户端提供静态数据
- JSP技术允许我们在页面中嵌套Java代码,从而可以向客户端提供动态的数据
1.1.2 JSP与Servlet的区别
- Servlet本身的缺点
- 每一个Servlet都需在web.xml进行配置
- 显示html元素的时候非常麻烦
- jsp = html + java + jsp自身的东西 本质Servlet
- 02-08年 基本上开发全部都是用jsp 可读性非常(html里面加了java代码)
- 缺点 :单纯的jsp页面不适合做这种大型项目
1.2 JSP的原理
- 原理:
- 一个JSP文件第一次被客户端访问时(也包括JSP文件修改后的第一次被访问),WEB服务器会把JSP文件翻译成一个Servlet,
- 客户端访问JSP文件,其实访问的就是JSP文件翻译后的Servlet,
- JSP的底层原理其实就是Servlet。
- 一些对Servlet和jsp理解
- jsp本质是一个Servlet,他的运行也需要容器(tomcat)支持
- 在jsp和Servlet文件中都可以编写java和html代码,不同的是
- Servlet虽然可以动态的生成页面内容,但是更加偏向于逻辑的控制
- jsp最终被转换成 Servlet 在jvm里面执行,在jsp里面虽然可以编写java代码,但是他更加偏向于页面内容的展示
- 在MVC架构模式中,C通常是由Servlet充当,V通常是由jsp充当
1.3 JSP入门案例
在网页上显示当前时间
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>hello JSP</h1>
<%
//脚本片段
//向客户端发送当前的系统时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String now = sdf.format(new Date());
//使用内置对象out,可以把数据发送给客户端
out.println(now);
%>
</body>
</html>
1.4 JSP默认编码设置
在入门案例案例中可以看到三个编码属性
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
- contentType服务器端发给客户端的内容编码的设置(与response.setContentType("")作用是相同)
- pageEncoding 当前jsp页面本身的编码
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- 是告诉浏览器 生成的页面(这个页面是用来展示服务器发来的数据) 所使用的格式和编码,浏览器会根据此来调用相应的字符集来显示网页内容
- http-equiv类似我们http的头部协议,他回应浏览器一些有用的信息,以帮助浏览器正确和精确的显示网页内容
- 建议:工作空间 项目 外加jsp页面 都设置成UTF-8
- 步骤:window - preference -搜索jsp 把Encoding改成UTF-8即可
1.5 模版元素&脚本片段
- 模版元素
- JSP页面中的HTML标签,CSS样式,以及JS都称之为JSP的模版元素,模版元素定义了页面的结构和外观,
- JSP翻译后的Servlet中,模版元素会被输出流对象直接发送到客户端。
- 脚本片段
- JSP页面中可以嵌套Java代码,Java代码要定义在JSP的脚本片段中,也就是<%%>里面,
- JSP页面中可以有多个脚本片段,
- 多个脚本片段之间,可以嵌套文本,嵌套HTML的标签,嵌套其他的JSP元素。
- 注意: 不能在脚本片段里面定义方法,因为方法不能嵌套定义
- 总结
- 模板元素其实就是页面上一堆的html代码
- 在html中添加java代码,java代码就是脚本片段
- 代码事例
<%@ page language="java" 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>Insert title here</title>
</head>
<body>
<%
HttpSession s = request.getSession();
Object username = s.getAttribute("username");
%>
<h1>itheima</h1>
<%
if(null == username){
%>
<a href="LoginUI.jsp">登录</a>
<%
}else{
%>
<a href="OUT.jsp">注销</a>
<%
}
%>
<hr />
</body>
</html>
1.6声明
- 在JSP页面里定义方法,定义成员变量等,<%! %>
- 注意:不能在声明里面写语句
- 平时也很少去定义成员变量 ,他是有线程安全问题 用处不大
<%@ page language="java" 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>Insert title here</title>
</head>
<body>
<!--声明方法 -->
<%!
public int sum(int a,int b) {
return a + b;
}
%>
<%
int result = sum(1,2);
out.println(result);
%>
</body>
</html>
1.7脚本表达式
- 在JSP页面中将数据发送到客户端,替代JSP页面里的输出语句,
格式:<%=变量/常量/表达式%> //1 + 1
-
注意:在脚本表达式中不可以写分号
-
总结: 用syso输出的语句,都可以用脚本表达式输出
-
代码实例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//要使用脚本表达式将当前系统时间发送到客户端
//获取当前系统时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String now = sdf.format(new Date());
%>
<!-- 脚本表达式 -->
<%=now %>
<%="<h1>hello JSP</h1>" %>
<%=1 + 1 %>
</body>
</html>
1.8 注释
-
HTML的注释:
-
Java代码的注释://,/**/
-
脚本片段的注释:<%-- --%>
-
注意:
- HTML的注释:被注释的文本和代码,会翻译到Servlet中,然后发送到客户端
- java的注释:被注释的文本和代码,会翻译到Servlet中,不会发送到客户端
- jsp的注释: 被注释的文本和代码,不会翻译到Servlet中,不会发送到客户端
-
建议使用第三个 功能最强大 什么都可以注释,也不会翻译最后html中
1.9 总结
- 模板元素: Html + css + js 对于模板元素,会被翻译到out.println(参数);
- 脚本片段;java 原样复制到翻译后的java文件里面,复制到service方法 <% %>
- java声明;翻译到类中,方法外,成员的位置上,可以用来定义成员变量,成员方法<%! %>
- 脚本表达式:翻译到out.println(参数),注意不能有分号 <%= %>
- 注释:HTML的注释 java的注释 jsp的注释 <%-- --%>
网友评论