一、jsp简介
JSP全称是Java Server Page,它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。JSP的本质其实就是一个Servlet。
1、jsp和HTML以及servlet的使用场景
类别 适用场景 HTML 只能开发静态资源,不能包含java代码,无法添加动态数据。 Servlet 写java代码,可以输出页面内容,但是很不方便,开发效率极低。 JSP 它包括了HTML的展示技术,同时具备Servlet输出动态资源的能力。但是不适合作为控制器来用。
二、jsp简单入门
1、创建javaWeb工程
2、web下创建index.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP的入门</title>
</head>
<body>
这是第一个JSP页面
</body>
</html>
3、jsp说明
写在之前: 明确JSP就是一个Servlet。是一个特殊的Servlet。
4、jsp的原理:
三、jsp应用
1、jsp语法
1、Java代码块
在jsp中,可以使用java脚本代码。形式为:<% 此处写java代码 %>但是,在实际开发中,极少使用此种形式编写java代码
代码:
<!--Java代码块-->
<% out.println("这是Java代码块");%>
2、jsp表达式
在jsp中,可以使用特定表达式语法,形式为:<%=表达式%>
jsp在翻译完后是out.print(表达式内容);
所以:<%out.print("当前时间);%>和<%="当前时间"%>是一样的。
在实际开发中,这种表达式语法用的也很少使用。
代码:
<!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%>
3、jsp声明
在JSP中也可以声明一些变量,方法,静态方法,形式为:<%! 声明的内容 %>
使用JSP声明需要注意:
<%!
需要注意的是: 写在里面的内容将会被tomcat翻译成全局的属性或者类方法。
%>
代码演示
<!--JSP声明-->
<%! String str = "声明语法格式";%>
<%=str%>
4、jsp注释
在使用JSP时,它有自己的注释,形式为:<%--注释--%>
代码演示
<%--JSP注释--%>
<!--HTML注释-->
5、语法的实例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP语法</title>
</head>
<body><!--Java代码块-->
<% out.println("这是Java代码块");%>
<hr/><!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%><hr/>
<!--JSP声明-->
<%! String str = "声明语法格式";%>
<%=str%><hr/>
<%--JSP注释--%>
<!--HTML注释--></body>
</html>
四、jsp指令
1、page指令
<%@ page 属性名=属性值 属性名=属性值 … %>
属性名 作用 contentType 响应正文支持的类型和设置编码格式 language 使用的语言,默认是java errorPage 当前页面出现异常后跳转的页面 isErrorPage 是否抓住异常,如果为true则页面中就可以使用异常对象,默认是false import 导包 import=“java.util.ArrayList” session 是否创建HttpSession对象,默认是true pageEncoding 翻译jsp时所用的编码格式 isElgnored 是否忽略EL表达式,默认是false
2、include指令
语法格式:<%@include file="" %>该指令是包含外部页面。 属性:file,以/开头,就代表当前应用。
1、根据指令的不同分为以下两种:
1 静态包含 2 动态包含
2、语法格式( 静态包含)
<%@ include file="文件相对 url 地址" %>
3、语法格式(动态包含)
1 <jsp:include page="文件相对 url 地址" />
2 <jsp:include page="文件相对 url 地址"></jsp:include>
3、taglib指令
语法格式:<%taglib uri="" prefix=""%>
作用:该指令用于引入外部标签库。html标签和jsp标签不用引入。
属性:
uri:外部标签的URI地址。
prefix:使用标签时的前缀。
代码演示:使用JSTL标签库
<%@ page contentType="text/html; charset=gb2312"%>
<%--声明页面中将要引用的标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>taglib指令使用示例</title>
</head>
<body>
<%--使用JSTL标签输出字符串 --%>
<c:out value="Hello World!" />
</body>
</html>
五、九大隐式对象
什么是隐式对象呢?它指的是在jsp中,可以不声明就直接使用的对象。它只存在于jsp中,因为java类中的变量必须要先声明再使用。其实jsp中的隐式对象也并非是未声明,只是它是在翻译成.java文件时声明的。所以我们在jsp中可以直接使用。
隐式对象名称 类型 备注 request javax.servlet.http.HttpServletRequest 请求对象 response javax.servlet.http.HttpServletResponse 响应对象 session javax.servlet.http.HttpSession 会话范围内 application javax.servlet.ServletContext 整个应用范围内共享 page Java.lang.Object 当前jsp对应的servlet引用实例 config javax.servlet.ServletConfig 配置对象 exception java.lang.Throwable 异常对象 out javax.servlet.jsp.JspWriter 字符输出流,相当于printwriter pageContext javax.servlet.jsp.PageContext 很重要,页面范围
1、PageContext对象
1、简介
它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。
2、生命周期
它是一个局部变量,所以它的生命周期随着JSP的创建而诞生,随着JSP的结束而消失。每个JSP页面都有一个独立的PageContext。
2、四大域对象
域对象名称 范围 级别 备注 PageContext 页面范围 最小,只能在当前页面用 因范围太小,开发中用的很少 ServletRequest 请求范围 一次请求或当期请求转发用 当请求转发之后,再次转发时请求域丢失 HttpSession 会话范围 多次请求数据共享时使用 多次请求共享数据,但不同的客户端不能共享 ServletContext 应用范围 最大,整个应用都可以使用 尽量少用,如果对数据有修改需要做同步处理
六、MVC模型
1、jsp演变历史
1、早期只有servlet,只能使用response输出标签数据,非常麻烦
2、后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作
3、再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
2、MVC模型
1、M:Model,模型。JavaBean
具体的业务操作,如:查询数据库,封装对象
2、V:View,视图。JSP
展示数据
3、C:Controller,控制器。Servlet
1、获取用户的输入
2、调用模型
3、将数据交给视图进行展示
3、优缺点
1、优点:
1、耦合性低,方便维护,可以利于分工协作
2、重用性高
2、缺点:
1、 使得项目架构变得复杂,对开发人员要求高