文章目录:
1.JSP介绍
JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。
JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。
JSP文件后缀名为 *.jsp 。
JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows 上。
JSP是sun公司提供一个规范。JSP规范用于封装响应对象简化将Servlet处理结果写入到响应体。
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
2.JSP的优势
以下列出了使用JSP带来的其他好处:
- 与ASP相比:JSP有两大优势。首先,动态部分用Java编写,而不是VB或其他MS专用语言,所以更加强大与易用。第二点就是JSP易于移植到非MS平台上。
- 与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
- 与SSI相比:SSI无法使用表单数据、无法进行数据库链接。
- 与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
- 与静态HTML相比:静态HTML不包含动态信息。
- jsp文件"运行时"自动将文件内部所有与Java命令无关()的内容自动写入到响应体。
3.JSP文件中Java命令书写规范
3.1 执行标签
1) 格式: <%
Java命令行;
%>
2) 作用:用于提示JSP文件在运行时不要将执行标签中Java命令写入到响应体,通知JSP文件在运行时需要将执行标签中内容执行完毕后再做输出。
3) java命令行: 声明变量、声明运算表达式[数学,关系运算,逻辑运算]、声明控制语句和循环语句。
3.2 输出标签
1) 格式: <%=变量名%>
<%=运算表达式%>
2) 作用:在jsp文件运行时,通知JSP将指定变量内容或则表达式结果写入到响应体。
4.JSP中的九大内置对象、四大作用域
4.1 九大内置对象
pageContext:页面上下文对象,该对象封存了另外八个对象,每一个JSP文件单独拥有一个pageContext对象
request:封存当前请求数据的对象,由服务器创建
session:此对象用来存储用户的不同请求的共享数据
application:也就是ServletContext对象,以服务项目只有一个,存储用户共享数据的对象
response:响应对象,用来响应请求处理结果给浏览器的对象,设置响应头重定向
out:响应对象,带有缓冲区的响应对象,效率高于response,不能设置响应头重定向,所以response需要保留
page:代表当前JSP对象,相当于Java中的this
exception:异常对象,存储了当前运行的异常信息
config:也就是ServletConfig对象,主要用来获取web.xml中的配置数据,完成一些初始化数据的读取
4.2 四大作用域
page:其作用域只在一个页面保留
response:其作用域只在一个请求中保留数据
session:其作用域在一次会话中保留数据,仅供一个用户使用
application:其作用域在服务器中保留数据,全部用户共享
5.Servlet与JSP文件之间的关系
1.Servlet: 接收请求并处理请求,但是Servlet不负责将处理结果返回——相当于"大厨"
2.JSP: 不负责处理请求,负责将Servlet生成的处理结果写入到响应体——相当于"传菜员"
3.Servlet与jsp之间调用关系
请求转发
浏览器 ------> Servlet(处理请求)-----------> jsp -----> 处理结果写入到响应体4.Servlet与jsp之间如何共享数据——借助于request
6.JSP运行原理
1.JSP文件不是静态资源文件也不是动态资源文件
2.JSP文件不能被编译不能被调用执行
运行原理: 1) tomcat接收到调用jsp文件(one.jsp)请求时,tomcat将被访问 jsp【编辑】为 java 文件(one_jsp.java)。
2) tomcat调用JVM将 java 文件【编译】为 class 文件(one_jsp.class)。
3) 这个 class 文件是一个Servlet接口实现类。
4) tomcat通过反射机制生成这个 class 文件的实例对象。
5) tomcat通过实例对象调用 _jspService 方法,这个方法在运行时,负责通过输出流将 jsp 文件内容写入到响应体 。
7.应用举例
7.1 第一组实例——纯JSP
7.2 第二组实例——Servlet+JSP
package com.songzihao.controller;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class OneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str="Hello JSP!!!";
request.setAttribute("info",str);
request.getRequestDispatcher("/one.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>OneServlet</servlet-name>
<servlet-class>com.songzihao.controller.OneServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OneServlet</servlet-name>
<url-pattern>/one</url-pattern>
</servlet-mapping>
</web-app>
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String value= (String) request.getAttribute("info");
%>
运行结果: <%=value%>
</body>
</html>