赞
踩
jsp虽然已经被大部分公司淘汰,原因是前后端无法分离增加维护成本 但是学生用来写个毕业设计还是比较轻松的减少了后端的开发 小项目部署也比较简单
JSP简介
JSP全称是Java Server Page,跟Servlet一样可以动态生成HTML响应, JSP文件命名为 xxx.jsp。
JSP的本质其实就是一个Servlet,但与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容。
类别 | 适用场景 |
---|---|
HTML | 只能开发静态资源,不能包含java代码,无法添加动态数据。 |
Servlet | 写java代码,可以输出页面内容,但是很不方便,开发效率极低。 |
JSP | 它包括了HTML的展示技术,同时具备Servlet输出动态资源的能力。但是不适合作为控制器来用。 |
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello Time</title>
</head>
<body>
这是第一个JSP页面
</body>
</html>
明确JSP就是一个Servlet。是一个特殊的Servlet。
JSP的原理:
客户端提交请求
Tomcat服务器解析请求地址
找到JSP页面
Tomcat将JSP页面翻译成Servlet的java文件
将翻译好的.java文件编译成.class文件
返回到客户浏览器上。
当我们打开index.jsp翻译的java文件看到的就是public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
类的声明,然后我们在Tomcat的源码中找到类的声明,如下图:
这张图一出场,就表明我们写的JSP它本质就是一个HttpServlet了。
内容总结
同时,我们在index_jsp.java文件中找到了输出页面的代码,并且在浏览器端查看源文件,看到的内容是一样的。这也就是说明,我们的浏览器上的内容,在通过jsp展示时,本质都是用out.write()输出出来的。
讲到这里,我们应该清楚的认识到,JSP它是一个特殊的Servlet,主要是用于展示动态数据。它展示的方式是用流把数据输出出来,而我们在使用JSP时,涉及HTML的部分,都与HTML的用法一致,这部分称为jsp中的模板元素,在开发过程中,先写好这些模板元素,因为它们决定了页面的外观。
基本语法:
<%! %>
说明:可以定义全局变量、方法、类。
<%!
int i;
public void setName(){… …}
%>
基本语法:
<%程序代码区%>
说明:可以定义局部变量以及放入任何的Java程序代码。
<%
int j;
for (int k=0; k<10; k++) {
… …
}
%>
基本语法:
<%=… …%>
说明: 可以输出一个变量或一个具体内容,但=后面必须是字符串变量或者可以被转换成字符串的 表达式。
注意:
不需要以;结束,只有一行
jsp在翻译完后是out.print(表达式内容);
所以:<%out.print("当前时间);%>和<%=“当前时间”%>是一样的。
在实际开发中,这种表达式语法用的也很少使用。
<!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%>
基本语法:
格式:
<!--… …--> HTML文件的注释,浏览器可以查看到
<%--… …--%> JSP文件的注释,浏览器看不到
<%//… …%> Java语言中的单行注释,浏览器看不到
<%/*… …*/%> Java语言中的多行注释,浏览器看不到
注释的内容不会被执行
JSP语法完整示例代码
<%@ 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语法运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dfX3JO2Q-1632734223444)(…/…/images/mysql多表 外键 数据库设计/image-20210927022644255.png)]
指令格式:
<%@指令 属性=“属性值”%>
指令的属性可以设定多个。
JSP常用指令有:page、taglib、include。
page指令用于导包和设置一些页面属性,常用属性如下:
参数名 | 参数说明 | |
---|---|---|
import | 导入相应的包,惟一允许在同一文档中多次出现的属性 | |
contentType | 设置Content-Type响应报头,标明即将发送到浏览器的文档类型 | |
pageEncoding | 设置页面的编码 response.setContentType(“text/html;charset=UTF-8”); | |
language | 告知引擎,脚本使用的是java,默认是java,支持java。不写也行 | |
session | 告知引擎是否产生HttpSession对象,即是否在代码中调用request.getSession()。默认是true | |
isErrorPage | 当前页是否可以作为其他页面的错误处理页面 | |
errorPage | 处理当前页面中抛出但未被捕获的任何异常 | |
extends | 告知引擎,JSP对应的Servlet的父类是哪个,不需要写,也不需要改。 | |
buffer | JspWriter用于输出JSP内容到页面上。告知引擎,设定他的缓存大小。默认8kb | |
isELIgnored | 告知引擎,是否忽略EL表达式,默认值是false,不忽略。 |
注意事项
当在errorpage上使用了isErrorPage=true之后,ie8有时候不能正常显示
配置全局错误页面:web.xml
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
include指令用于引入另一个JSP程序或HTML文件等 语法格式:
<%@include file=“被包含的文件地址%>
JSP引擎会在JSP文件的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工 作。
属性:file,以/开头,就代表当前应用。
使用示例
taglib指令用来扩展JSP程序的标签元素,引入其他功能的标签库文件
语法格式:
<!-- prefix属性用于指定库前缀 -->
<!-- uri属性用于指定库的标识 -->
<%@taglib uri=“tagLibary” prefix=“prefix”%>
作用:
该指令用于引入外部标签库。html标签和jsp标签不用引入。
jsp:include动作用于引入另一个JSP程序或HTML文件等。
执行到include时,被include的文件才会被编译。
如果include的是jsp文件,那它不会被转换成Servlet文件。
<jsp:include page=“URLSpec” flush=“true”/>
<jsp:include page=“URLSpec” flush=“true”>
<jsp:param name=“key” value=“value”/>
</jsp:include>
forward动作用于在JSP中实现转发,将请求转发到另一个指定的JSP程序或者Servlet中处理。
<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
<!-- 用于指定参数和其对应的值 -->
<jsp:param name=“key” value=“value”/>
</jsp:forward>
基本概念
九大隐式对象
隐式对象名称 | 类型 | 备注 |
---|---|---|
out | javax.servlet.jsp.JspWriter | 字符输出流,相当于printwriter |
request | javax.servlet.http.HttpServletRequest | 请求信息 |
response | javax.servlet.http.HttpServletResponse | 响应信息 |
session | javax.servlet.http.HttpSession | 会话 |
application | javax.servlet.ServletContext | 全局的上下文对象 |
pageContext | javax.servlet.jsp.PageContext | JSP页面上下文 |
page | Java.lang.Object | JSP页面本身 |
config | javax.servlet.ServletConfig | Servlet配置对象 |
exception | java.lang.Throwable | 捕获网页异常 |
out内置对象是一个缓冲的输出流,用来给客户端输出信息
常用方法如下:
方法声明 | 功能介绍 |
---|---|
void println(String x) | 向客户端输出各种类型数据 |
void newLine() | 输出一个换行符 |
void close() | 关闭输出流 |
int getBufferSize() | 返回缓冲区的大小 |
int getRemaining() | 返回缓冲区中未使用的字节数 |
void flush() | 输出缓冲区里的数据 |
void clearBuffer() | 清除缓冲区里的数据,同时把数据输出到客户端 |
void clear() | 清除缓冲区里的数据,但不把数据输出到客户端 |
request对象封装的是调用JSP页面的请求信息,它是HttpServletRequest接口的一个实例。
该对象的属性值只在一个请求中保存。
常用方法如下:
方法声明 | 功能介绍 |
---|---|
String getMethod() | 返回客户端向服务器端传送数据的方式 |
String getParameter(String name) | 返回客户端向服务器端传送的参数值 |
String[] getParameterValues( String name) | 获得指定参数的所有值 |
String getRequestURI() | 获得请求地址 |
String getRemoteAddr() | 返回发送请求的客户端或最后一个代理的IP地址 |
int getRemotePort() | 返回发送请求的客户端或最后一个代理的端口号 |
String getServerName() | 获取服务器的名字 |
int getServerPort() | 获取服务器端的端口 |
void setAttribute(String name,Object o) | 在此请求中存储属性。属性在请求之间重置 |
Object getAttribute(String name) | 将指定属性的值作为对象返回,若不存在则返回空 值 |
response对象用于给客户端相应输出处理结果,它是HttpServletResponse接口的一个实例。
经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码 URL。
常用方法如下:
方法声明 | 功能介绍 |
---|---|
void addCookie(Cookie cookie) | 添加一个Cookie对象,用于在客户端保存特定的信 息 |
void addHeader(String name, String value) | 添加HTTP头信息,该Header信息将发送到客户端 |
boolean containsHeader(String name) | 判断指定名字的HTTP文件头是否存在 |
void sendRedirect(String location) | 重定向JSP文件 |
void setContentType(String type) | 设置类型与编码方式 |
session对象表示浏览器和服务器之间的一次会话,一次会话可以包含多次请求,在多次请求之间 可以借助session对象存储信息,它是HttpSession类型的一个实例。
该对象的属性值在一次会话范围中保存,保存在服务器端,只要不关闭浏览器,默认半个小时内都 可以访问
常用方法如下:
方法声明 | 功能介绍 |
---|---|
void setAttribute(String name, Object value) | 使用指定的名称将对象绑定到此会话 |
Object getAttribute(String name) | 返回在此会话中用指定名称绑定的对象,如果没有对象在该 名称下绑定则返回空值 |
application对象是一个web程序的全局变量,它是ServletContext类型的一个实例。
在整个服务器上保存数据,所有用户共享。
常用方法如下:
方法声明 | 功能介绍 |
---|---|
void setAttribute(String name, Object object) | 将对象绑定到此servlet上下文中的给定属性名 |
Object getAttribute(String name) | 返回给定名称的servlet容器属性,若没有该名称的属 性返回null |
简介
它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。
只在一个页面中保存数据。
生命周期
它是一个局部变量,所以它的生命周期随着JSP的创建而诞生,随着JSP的结束而消失。每个JSP页面都有一个独立的PageContext。
常用方法
方法声明 | 功能介绍 |
---|---|
void setAttribute(String name, Object value, int scope) | 使用适当的作用域设置指定的名称和值 |
Object getAttribute(String name, int scope) | 返回指定作用域中名称关联的对象,若找不到 则返回null |
ServletRequest getRequest() | 获取请求对象 |
ServletResponse getResponse() | 获取响应对象 |
HttpSession getSession() | 获取会话对象 |
ServletConfig getServletConfig() | 获取配置对象 |
JspWriter getOut() | 获取输出对象 |
Object getPage() | 获取页面对象 |
Exception getException() | 获取异常对象 |
exception 对象是Throwable的实例,表示的是JSP的异常信息
如果要使用它,必须将对应页面page指令的isErrorPage属性设置成true。
单个页面的处理方式
<%@page errorPage="error.jsp" %>
在web.xml中配置统一的异常处理页面。
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page
域对象名称 | 范围 | 级别 | 备注 |
---|---|---|---|
PageContext | 页面范围 | 最小,只能在当前页面用 | 因范围太小,开发中用的很少 |
ServletRequest | 请求范围 | 一次请求或当期请求转发用 | 当请求转发之后,再次转发时请求域丢失 |
HttpSession | 会话范围 | 多次请求数据共享时使用 | 多次请求共享数据,但不同的客户端不能共享 |
ServletContext | 应用范围 | 最大,整个应用都可以使用 | 尽量少用,如果对数据有修改需要做同步处理 |
基本概念
javaBean 是使用 Java 语言开发的一个可重用的组件,在 JSP 开发中可以使用 JavaBean 减少重复 代码,使整个 JSP 代码的开发更加简洁。
JavaBean本质上就是Java类,通常要求如下
属性:全部私有化,通过get和set方法进行访问。、
方法:必须是public关键字修饰。
构造器 :必须有无参构造方法。
使用方式
使用jsp:useBean的方式创建javaBean实例
<jsp:useBean id=“对象名” scope=“保存范围 class=“包名.类名” />
保存范围有:page|request|sessin|application,默认为page范围。
使用jsp:setProperty的方式设置javaBean的属性值
<jsp:setProperty name="对象名" property="属性名" value="属性值" param="参数名"/>
使用jsp:getProperty的方式获取javaBean的属性值
<jsp:getProperty name="对象名" property="属性名"/>
保存范围
JavaBean的保存范围有page、request、session以及application,默认是page范围。
删除方式
<%
内置对象.removeAttribute(“JavaBean的名字”);
%>
MVC是模型(Model)和视图(View)以及控制器(Controller)的简写,是一种将数据、界面显示和业务 逻辑进行分离的组织方式,这样在改进界面及用户交互时,不需要重新编写业务逻辑,从而提高了 代码的可维护性。
5.2 基本模型
例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQXMYlDp-1632734223449)(…/…/images/javaweb/assets/
)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。