JavaWeb学习(六)

2021-10-08 16:42:48 浏览数 (1)

1.为什么要学习JSP

1.1.使用一个servlet往里面拼接原生html标签

Servlet往浏览器写数据,客户端输出是原样输出

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.write("哈哈哈哈哈");

那么既然原样输出,请问,如果我想要让文字加粗显示,怎么办呢?

使用servlet进行拼接html标签实现页面效果

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.write(""); writer.write(""); writer.write(""); writer.write(""); writer.write(""); writer.write(""); writer.write(""); writer.write("天气不错哦"); writer.write(""); writer.write(""); }

观察效果:

【开发总结】:使用一个servlet实现一个网站效果,代码太繁琐了!!生不如死!!

1.2.画图分析

2.JSP技术概述

JSP

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 [1] 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

它实现了Html语法中的java扩展(以 <%,>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。

Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

Jsp简单的说:html java代码!

3.JSP入门

3.1.使用Escplise新建一个jsp模板

新建一个模板之后,仔细观察,jsp页面中的东东和传统的html中的东东区别!

Html模板结构:

DOCTYPE html><< span="">html><< span="">head><< span="">meta charset="UTF-8"><< span="">title>Insert title heretitle>head><< span="">body>body>html>

Jsp模板结构:

<%@< span=""> page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><< span="">html><< span="">head><< span="">meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><< span="">title>Insert title heretitle>head><< span="">body>body>html>

经过观察:除了jsp中的第一行代码,没有见过,其他都见过,那么所以在jsp中写东西,你可以就像在html中写东西一样!!

<%@< span=""> page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><< span="">html><< span="">head><< span="">meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><< span="">title>Insert title heretitle>head><< span="">body><< span="">h1 style="color: red;font-size: 100px">im here!!!!!h1>body>html>

既然,在jsp写东西和html差不多一样,那为何需要这玩意呢?

3.2. jsp脚本和注释

3.2.1.jsp脚本:

<%java代码%>

<%=java变量或表达式>

<%!java代码%>

代码实战:

<%=java变量或表达式>

经过观察发现:第3种和第1种没有什么区别,对吧?

3.2.2.jsp注释

Html注释:

java注释://单行注释 /*多行注释*/

jsp注释:<%--注释内容--%>

4.JSP原理(本质)

4.1.原理概述

当我们在浏览器输入一个jsp对应的url地址,可以正常访问这个jsp页面,它到底内部做了哪些事情呢?

1)Tomcat目录:

2)Tomcat目录下的work目录:

3)再仔细对比文件名的变化:

思考:

1、tomcat将jsp翻译之后,文件名是怎么改的?

2、如果jsp本质是servlet,那么我们应该去找依据呢?

4)去寻找根源

当然我们还可以进一步去验证:如果是servlet,它里面应该具备servlet生命周期的几个方法??

一共有5个方法,咱们说重点就3个:init、service、destroy!!

那么再仔细观察源码:

【开发小结】:JSP的本质(真身)其实就是一个servlet程序而已!!

4.2.jsp三种脚本区别

经过观察,在翻译过后的servlet中的service方法有

<%%> ----- 内部的java代码翻译到service方法的内部

<%=%> ----- 会被翻译成service方法内部out.print()

唯独没有<%!%> 脚本的内容

而<%!%>

--- 会被翻译成servlet的成员的内容

现在,既然我们已经搞明白了区别,那我们这么做可以吗?

4.3.jsp三种注释区别

Html注释:

---可见范围 jsp源码、翻译后的servlet、页面显示html源码

java注释://单行注释 /*多行注释*/

--可见范围 jsp源码 翻译后的servlet

jsp注释:<%--注释内容--%>

----- 可见范围 jsp源码可见

jsp注释: 不同的注释可见范围是不同

【开发小结】:jsp的注释,是最安全的!给Java程序员看!

4.4.jsp原理深入

jsp在第一次被访问时会被Web容器翻译成servlet,在执行

过程:

第一次访问---->helloServlet.jsp---->helloServlet_jsp.java----> helloServlet_jsp.class 然后再去运行!!

PS:被翻译后的servlet在Tomcat的work目录中可以找到

第一次访问:准确的将,看你项目中jsp文件和work中翻译后信息是否一致,如果一致,以后就不再翻译了,如果不一致,那么就需要重新翻译!

谁帮你翻译的jsp?

【开发小结】:客户端访问Java服务端的任何请求,谁帮你响应的,都是servlet程序!

5.JSP指令

jsp的指令是指导jsp翻译和运行的命令

jsp包括三大指令:

page指令 --- 属性最多的指令(实际开发中page指令默认)

属性最多的一个指令,根据不同的属性,指导整个页面特性

格式:<%@ 1="属性值1" 2="属性值2" page="">

常用属性如下:

language:jsp脚本中可以嵌入的语言种类

pageEncoding:当前jsp文件的本身编码---内部可以包含contentType

contentType:response.setContentType(text/html;charset=UTF-8)

session:是否jsp在翻译时自动创建session

extends:告诉jsp是否要继承某个类

import:导入java的包

errorPage:当 当前页面出错后跳转到哪个页面

isErrorPage:当前页面是一个处理错误的页面

include指令

页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中

格式:<%@ include="" file="被包含的文件地址">

【思考】:在开发中,include指令有什么作用呢?

taglib指令

在jsp页面中引入标签库(jstl标签库、struts2标签库)

格式:<%@ taglib="" uri="标签库地址" prefix="前缀">

引入标签库

使用标签库

<< span="">c:if>c:if><< span="">a:xx>a:xx>

6.JSP内置(隐式对象)

jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,我们在jsp 脚本中可以直接使用这9个对象

名称

类型

描述

out

javax.servlet.jsp.JspWriter

用于页面输出

request

javax.servlet.http.HttpServletRequest

得到用户请求信息,

response

javax.servlet.http.HttpServletResponse

服务器向客户端的回应信息

config

javax.servlet.ServletConfig

服务器配置,可以取得初始化参数

session

javax.servlet.http.HttpSession

用来保存用户的信息

application

javax.servlet.ServletContext

所有用户的共享信息

page

java.lang.Object

指当前页面转换后的Servlet类的实例

pageContext

javax.servlet.jsp.PageContext

JSP的页面容器

exception

java.lang.Throwable

表示JSP页面所发生的异常,在错误页中才起作用

7.JSP标签(动作)

1.页面包含(动态包含):

2.请求转发

静态包含与动态包含的区别?

8.EL技术

9.JSTL技术

0 人点赞