您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

JSP学习总结

JSP简介

JSP(Java Server Pages)一种Java servlet,主要实现Java
web应用程序的用户界面部分。标签通常以<%开头 以%>结束。

JSP是一种Java servlet,主要实现Java
web应用程序的用户界面部分,结合HTML、XML元素来编写。

JSP可以通过网页获取用户输入数据、访问数据库以及其它数据源,然后动态创建网页。

JSP与JavaScript相比,JavaScript很难与服务器交互,所以不能提供复杂的服务(访问数据库、图像处理)。

JSP结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeBU60ul-1617925538821)(media/0fe4da520f46d487e238fc6250130adb.png)]

网络服务器需要一个JSP引擎(容器)来处理来自客户端的JSP页面的请求。

JSP处理流程

浏览器发送一个HTTP请求给服务器。

web服务器识别出这是一个对JSP网页的请求,将该请求交给服务器的JSP容器来处理。

JSP容器从磁盘中载入JSP文件,然后将其转换为Servlet,并且将所有的JSP元素转换成Java代码。

JSP容器将Servlet编译成可执行的类,并且将原始请求传递给Servlet引擎。

web服务器某组件会调用Servlet引擎,然后载入并执行Servlet类。之后Servlet产生HTML格式的输出嵌入HTTP
response中交给服务器。

web服务器以静态HTML网页形式将HTTP response返回给浏览器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vnW26gLm-1617925538827)(media/8d400a1d79bf769296a3f586a292215e.png)]

JSP生命周期

JSP生命周期就是从创建到销毁的过程:1.编译阶段:servlet容器编译servlet源文件;2.初始化阶段:加载JSP对应的servlet类,创建实例,并调用方法;3.执行阶段:调用JSP对应的servlet实例的服务器方法;4.销毁阶段:调用与JSp对应的servlet销毁方法,然后销毁实例。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D7nPj02U-1617925538830)(media/ec3b3ae43f0928b39bdde49e0e3538ac.png)]

JSP编译:当浏览器请求JSP页面时,JSP容器会检查是否要编译这个页面,如果这个文件没有编译过或者上次编译被修改过,那么就会编译这个文件。

编译步骤:

1.解析JSP文件

2.将JSP文件转换为servlet

3.编译servlet

JSP初始化:容器载入JSP文件后,JSP容器调用jspInit方法。如果需要自行执行自定义的JSP初始化任务,则覆盖jspInit()方法就可以了。

public void jspInit( ){

//初始化代码

//可以初始化数据库连接,打开文件和创建查询

}

JSP执行:JSP容器将会调用_jspService()方法,该方法需要一个HttpServletReques对象和一个HttpServletResponse对象作为参数。

void _jspService(HttpServletReques a, HttpServletResponse b){

//服务器处理代码

}

JSP清理:JSP网页从容器中被移除,调用jspDestroy()方法等价于servlet中的销毁方法,你也可以自定义覆盖该方法。

public void jspDestory( ){

//清理代码

}

实例:

<%@pagelanguage=」java」contentType=」text/html」;charset=UTF-8」pageEncoding=」UTF-8」%>

<html>

<head>

<title>life.jsp</title>

</head>

<body>

<%!

priavte int initVar=0;

priavte int serviceVar=0;

priavte int destroyVar=0;

%>

<%!

public void jspInit( ){

initVar++;

System.out.println(「jspInit( ):JSP被初始化了」+initVar+」次」);

}

public void jspDestroy( ){

destroyVar++;

System.out.println(「jspDestroy( ):JSP销毁了」+destroy+」次」);

}

%>

<%

serviceVar++;

System.out.println(「_jspService():JSP共响应了」+serviecVar+」次请求」);

String content1=」初始化次数:」+initVar;

String content2=」响应客户请求次数:」+serviceVar;

String content3=」销毁次数:「+destroyVar;

%>

<h1>JSP测试</h1>

<p><%=content1 %></p>

<p><%=content1 %></p>

<p><%=content1 %></p>

</body>

</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ivJJWDzk-1617925538834)(media/a126d7f49bdf291193a9361f82a0eaf7.png)]

JSP语法

脚本程序:包含任意量的Java语句、变量或表达式。任何文本、HTML标签、JSP元素必须写在脚本程序外面。

格式:

<% 代码片段 %>

或者

<jsp:scriptlet>

//代码片段

</jsp:scriptlet>

<% out.println(「你的IP地址」+request.getRemoteAddr( )); %>

JSP声明:在JSP文件中必须先声明变量和方法后,才能使用它们。

格式:

<%! declaration; [ declaration; ]+ … %>

或者

<jsp:declaration>

//代码片段

</jsp:declaration>

<%! int i = 0 %>

JSP表达式:在JSP页面执行的语法;先转化成String,然后插入到表达式出现的地方。

格式:

<%= 表达式 %>

或者

<jsp:expression>

//表达式

</jsp:expression>

<%= (new java.util.Date()).toLocaleString( )%>

JSP注释:为代码作注释以及将某段代码注释掉

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jDFUqQuo-1617925538836)(media/c25202ef7c859669fb421f7a5bca796e.png)]

JSP指令:用来设置JSP页面的属性

格式:

<%@ directive attribute=」value」%>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rGH9GMQm-1617925538839)(media/120bae09c20f0acd3a4cc2dd33ea0704.png)]

JSP字面量:JSP定义了布尔类型:true和false;整型(int);浮点型(float);字符串(string)以单引号或者双引号结束。

JSP指令

Page指令:为容器提供当前页面使用说明,一个JSP页面可以包括多个page指令。

格式:

<%@ page attribute=」value」%>

或者

<jsp:directive.page attribute=」value」/>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VVsVAeP-1617925538840)(media/526a153900e483efe162bc99d61caa97.png)]

include指令:被包含的文件可以是JSP文件、HTML文件或文本文件

格式:

<%@ include file=」文件相对url 地址」%>

Taglib指令:JSP API允许用户自定义标签,引入自定义标签(库路径、自定义标签)

格式:

<%@ taglib url=」uri」prefix=」prefixofTag」%>

JSP动作元素

JSP动作元素:在请求处理时起作用,利用JSP动作元素可以动态插入文件、重用JavaBean组件、用户重定向到另外的页面、为Java插件生成HTML代码。

格式:

<jsp:action_name attribute=」value」/>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRFgrx3p-1617925538842)(media/959d86b4ca8d2afc414ba5c65d844e89.png)]

常见的属性:所有的动作要素都有两个属性:id属性和scope属性。

id属性:动作元素的唯一标志,可以在JSP页面中引用

scope属性:识别元素的生命周期,scope属性定义了相关联id对象的寿命。具体体现在(a)page
(b)request ©session (d)application

JSP隐式对象

JSP隐式对象:JSP容器为每个页面提供的Java对象,开发者可以直接使用它们。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qILgoBFW-1617925538844)(media/c385a33443f69f6c72dc246057716b87.png)]

JSP客户端请求

JSP客户端请求:当浏览器请求一个网页时,会向网络服务器发送HTTP
request请求,JSP容器会产生request对象来获取HTTP的信息表头,包括表单数据、cookies、HTTP方法。

<%

Enumeration headerNames = request.getHeaderNames( );

while(headerNames.hasMoreElements( ){

String paramName = (String)headerNames.nextElement( );

out.print(「<tr><td>」+paramName+」</td>\n」);

String paramValue = request.getHeader(paramName);

out.print(「<td>」+paramValue +」</td></tr>\n」);

}

%>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvSRznwr-1617925538846)(media/ecb6603a5a83321119050017250be012.png)]

JSP服务器响应

JSP服务器响应:JSP容器处理后结果传回到客户端,可以通过response变量设置HTTP状态和客户端发送数据。JSP容器会创建response对象来处理创建HTTP信息头的接口,通过使用这个对象,开发者可以添加新的cookie或时间戳,还有HTTP状态码。

<%

//设置每隔5秒自动刷新

response.setIntHeader(「Refresh」,5);

//获取当前时间

Calendar calendar = new GregorianCalendar( );

String am_pm;

int hour=calendar.get(Calendar.HOUR);

int minute=calendar.get(Calendar.MINUTE);

int second=calendar.get(Calendar.SECND);

if(calendar.get(Calenndar.AM_PM)==0)

am_pm = 「AM」;

else

am_pm=」PM」;

String CT = hour+」: 」+second+」: 」+am_pm;

out.println( 「当前时间:」+CT+」\n」);

%>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0cLnLyN-1617925538847)(media/f24f2ccea1a4d1bc96f9ffe7d1774d07.png)]

JSP过滤器:可以动态地拦截请求和响应。具体体现在1.在客户端的请求后访问后端资源之前,拦截请求
2.在服务器的响应发送客户端之前,处理响应。

根据类型区分可以为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-orqxVDQp-1617925538849)(media/1267ec3b2181e6d0bfb78bcd9a766514.png)]

过滤器通过Web部署描述符(web.xml)中的XML标签来声明。然后映射到各个部署的Servlet名称或URL模式。当web容器启动web应用程序时,会通过web.xml中的声明来为每一个过滤器创建一个实例。过滤器(Filter)的执行顺序与在web.xml配置文件中的配置顺序一致,一般把Filter配置在所有Servlet之前。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v89Sxdpe-1617925538850)(media/c98e604d363f660c49046b024851d8f2.png)]

FilterConfig使用:

Filter的init方法提供一个FilterConfig对象。

web.xml配置

定义过滤器,映射到一个URL或Servlet。

<filter>//指定一个过滤器

<file-name>LogFilter</file-name>//为只当过滤器指定一个名字

//指定过滤器完整的限定类名

<file-class>com.runoob.test.LogFilter</file-class>

//为过滤器指定初始化参数

<init-param>

<param-name>Site</param-name>//指定参数名字

<para-value>测试</para-value>//指定参数的值

</init-param>

</filter>

<!–Servlet映射–>

//设置一个Filter所负责拦截的资源;通过Servlet名称或者访问的请求路径

<filter-mapping>

//设置filter注册名称,过滤器的名字

<filter-name>LogFilter</filter-name>

//设置filter所拦截的路径

<url-pattern>/*</url-pattern>

</filter-mapping>

<servlet>

<!–类名–>

//过滤器所拦截的Servlet名称

<servlet-name>DisplayHeader</servlet-name>

<!–所在包–>

<servlet-class>com.runoob.test.DisplayHeader</servlet-class>

</servlet>

//将URL模式映射到某个Servlet,即该Servlet处理的URL

<servlet-mapping>

//servlet名字

<servlet-name>DisplayHeader</servlet-name>

<!–访问网址–>

//指定相对于Servlet的URL的路径

<url-pattern>/TomcatTest/DisplayHeader<url-pattern>

</servlet-mapping>

在init方法使用FilterConfig对象获取参数:

public void init(FilterConfig config) throws ServletException {

//获取初始化参数

String site = config.getInitParameter(「Site」);

//输出初始化参数

System.out.println(「网站名称:」+site);

}

JSP XML数据处理

使用JSP发送XML

格式:

<%@ page contentType =」text/xml」%>

使用JSP处理XML

格式:

book.xml文件

<books>

<book>

<name>Padam History</name>

<author>ZARA</author>

<price>100</price>

</book>

<book>

<name>Great Mistry</name>

<author>NUHA</author>

<price>2000</price>

</book>

</books>

main.jsp

<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8”%>

<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

<%@ taglib prefix=“x” uri=“http://java.sun.com/jsp/jstl/xml” %>

<html>

<head>

<title>JSTL x:parse Tags</title>

</head>

<body>

<h3>Books Info:</h3>

<c:import var=“bookInfo” url=“http://localhost:8080/books.xml”/>

<x:parse xml="${bookInfo}" var=“output”/>

<b>The title of the first book is</b>:

<x:out select="$output/books/book[1]/name" />

<br>

<b>The price of the second book</b>:

<x:out select="$output/books/book[2]/price" />

</body>

</html>

JSP JavaBean

JavaBean是特殊的Java类:提供一个默认的无参构造函数;需要被序列化并且实现了Serializable接口;可能有一系列可读写属性;可能有一系列的getter()或setter()方法。

JSP自定义标签

JSP自定义标签:用户自定义的JSP语言元素。当JSP页面包含一个自定义标签时,转换为servlet,标签转化为tag
handler的对象操作。JSP标签扩展可以让创建的新标签插入到一个JSP页面。

创建一个自定义标签。格式:

<ex:Hello />

要想创建自定义的JSP标签,首先必须先创建处理标签的Java类。

package com.runoob;

import javax.servlet.jsp.tagext;

import javax.servlet.jsp.*;

import java.io;

public class HelloTag extends SimpletagSupport {

public void doTag( )throws JspException ,IOException {

JspWriter out = getJspContext( ).getOut( );

out.println( “Hello Custom Tag!”);

}

}

重写了doTag( )方法,该方法使用了getJspContext(
)方法获取JspContext对象,并将“Hello Custom Tag!”传给JspWriter对象。

编译以上类,就必须将其复制到环境变量CLASSPATH目录中,在webapps\ROOT\WEB-INF\custom.tld,创建标签库。

<taglib>

<tlib-version>1.0</tlib-version>

<jsp-version>2.0</jsp-version>

<short-name>Example TLD</short-name>

<tag>

<name>Hello</name>

<tag-class>com.runoob.HelloTag</tag-class>

<body-content>empty</body-content>

</tag>

</taglib>

这个时候,就可以在JSP文件中使用Hello标签了。

<%@ taglib prefix=”ex”uri=”WEB-INF/custom.tld”%>

<html>

<head>

<title>A sample custom tag</title>

</head>

<body>

<ex:Hello />

</body>

</html>

输出结果:Hello Custom Tag!


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进