JSP概述
JSP是Java Server Page ,它是建立在Servlet规范之上的动态网页开发技术。在jsp文件中,HTML代码和Java代码同时存在。HTML实现网页中的静态内容,Java实现网页中的动态内容。用于简化书写。
本质上是一个Servlet。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello,我是西山彭于晏
<%
out.print("电话:187****8839")
%>
</body>
</html>
-
JSP的脚本:JSP定义Java代码的方式
- <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。(普通的Java代码)
- <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。在_jspService()方法之外。即成员变量,成员方法,静态方法,静态代码块,静态变量等
- <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。(System.out.println中可以放什么就可以写什么,比如可以计算出结果的java表达式:3+2;被定义的变量,前面已经定义int a =3,<%=a%>。不能存放方法)
-
JSP的内置对象:
* 在jsp页面中不需要获取和创建,可以直接使用的对象
* jsp一共有9个内置对象。
* 目前讲解3个:
* request:得到用户的请求信息
* response:服务端向客户端的回应信息。
* out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似* response.getWriter()和out.write()的区别: * 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。 * response.getWriter()数据输出永远在out.write()之前
- 在jsp页面中不需要创建,直接使用的对象
* 一共有9个:
变量名 真实类型 作用
1. pageContext PageContext当前页面共享数据,还可以获取其他八个内置对象
2. request HttpServletRequest 一次请求访问的多个资源(转发)
3. session HttpSession 一次会话的多个请求间
4. application ServletContext 所有用户(servlet)间共享数据
5. response HttpServletResponse 响应对象
6. page Object 当前页面(Servlet)的对象 this
7. out JspWriter 输出对象,数据输出到页面上
8. config ervletConfig Servlet的配置对象
9. exception Throwable 异常对象
域对象:请求响应中产生的数据,需要保存到不同范围。
前四个为域对象。pageContext,request,session,application。
分析JSP生成的Servlet代码:


当用户第一次访问JSP页面时,该页面都会被JspServlet发已成一个Servlet.java源文件,然后将源文件编译为.class文件。存放在C:\Users`xuPeng\.IntelliJIdea2017.3\system\tomcat\_lala\work\Catalina\localhost\loginAndDownload`\org\apache\jsp
以IDEA为例,存放路径为上述路径,标红的为电脑用户名,项目名,工程名。由上图可以看出index.jsp文件被翻译成class和java文件。文件名分别为index_jsp.class和index_jsp.java。

又上述代码可以看出index.jsp文件翻译后为的Servlet类名为index_jsp。他没有实现Servlet接口但是继承了org.apache.jasper.runtime.HttpJspBase类。从HttpJspBase源码中可以看出HttpJspBase是HttpServlet的一个子类。由此可预见index_jsp类就是一个Servlet`
指令
作用:用于配置JSP页面,导入资源文件。
格式:<%@ 指令 名称 属性名1=属性值1 属性名2=属性值2 … %>
分类:
1. page:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- contentType:等同于response.setContentType()
1. 设置响应体的mime类型以及字符集
2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使 用低级工具,则需要设置pageEncoding属性设置当前页面的字符集) - import:导包。一个导一行
- errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
- language:java 指明JSP文件采用得语言,默认JAVA,也只有javae
- buffer:指定缓冲的大小。
- isErrorPage:标识当前页面是否是错误页面。
1. true:是,可以使用内置对象exception
2. false:否。默认值。不可以使用内置对象exception
除了import属性以外,其余属性均只出现一次,否则编译失败。page指令得属性名称都是区分大小写的
使用errorPage属性指定错误页面:
那运算异常演示:启动Tomcat访问指定错误页面报500错误,对于用户来说不是哦特别友好,因此就与要errorPage属性跳转到相对友好的界面。eg:

使用errorPage属性跳转页面:

使用web.xml文件配置整个Web应用程序指定错误页面:

代码演示如下:注意配置的路径要有 / 这个符号。配置的转跳页面在WEB-INF文件夹下。
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
errorPage的优先级高于web.xml也就是说,如果在某个JSP页面设置了errorPage属性,那么web.xml文件的配置将对该页面不起作用
2 include: 页面包含的。导入页面的资源文件,eg:HTML文件,文本文件
<%@include file="top.jsp"%>//file属性用于指定被引入文件的相对路径。
可以将指定文件B.jsp中的代码合并到A.jsp文件中。
include指令注意的问题:
- 被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素和JSP指令等普通JSP页面所具有的一切内容。
- 引入的文件被翻译成Servlet源代码时,插入指令的位置就是该文件中元素被转换的位置。也就是说插入位置显示的就是插入文件的内容或者说是效果。
- file属性必须用相对路径。否则表示相对于当前文件。这里的相对路径是相对于(file)文件,而不是当前页面(page)。
3. taglib : 导入资源
* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
* prefix:前缀,自定义的
注释
-
html注释:Tomcat在翻译Jsp页面时,会将HTML注释当作一段普通的文本,并且对嵌入的JSP元素进行解释处理
<!-- -->:只能注释html代码片段 -
jsp注释:推荐使用
<%-- 注释信息 --%>:可以注释所有
MVC开发模式
1. jsp演变历史
- 早期只有servlet,只能使用response输出标签数据,非常麻烦
- 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作
- 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
2. MVC:
- M:Model,模型。JavaBean
* 完成具体的业务操作,如:查询数据库,封装对象 - V:View,视图。JSP
* 展示数据 - C:Controller,控制器。Servlet
* 获取用户的输入
* 调用模型
* 将数据交给视图进行展示
1799

被折叠的 条评论
为什么被折叠?



