20210201-javaee-课程jsp_servlet_tomcat基础02

1 搭建java web开发环境

1.1 web开发背景知识

WEB访问的基本原理

  • 客户端

  • 服务器

  • HTTP协议

  • 请求

  • 处理

    	- 静态页面
    		- 动态页面
    
  • 响应


JAVA的处理方式

  • WEB服务器
    • nginx
    • apache
    • iis
      • HTML页面
  • tomcat容器
    • jsp页面
    • servlet
  • 后台组件
    • spring全家桶,容器
  • 核心思想:组件+容器

1.2 超文本传输协议

HTTP = Hypertext Transfer Protocol

  • 简单,快速
    • 给出URL
    • 给出method,一般有post和get两种请求方式
    • 给出data
  • 灵活
    • 可以传输任意类型
    • Content-Type
  • 无状态
    • 无记忆能力
  • 无连接
    • 不保持,一次连接,处理一次请求【最早】
    • 1.1版:一次tcp连接,处理多次http请求,长连接
    • 2.0版:新格式,头压缩,多路复用,安全可靠,可服务推送

TCP = Transmission Control Potocol 面向连接的、可靠的、基于字节流的传输层通信协议

1.3 静态网页与动态网页

  • 静态:内容不变化
    • 基于访问【本地js动作不计】
    • 页面内容【html dom】
    • 没有变化
  • 动态:数据在变—CRUD,从库中获取
    • 服务端,有脚本运行
      • asp
      • jsp
      • php
    • 不同请求,给出不同响应
  • JAVA服务端技术
    • jsp
    • servlet
      • 将html嵌入Java中,向客户端推送html流
  • 其它CGI技术
    • c/c++
      • 比如腾讯公司的TARS框架
    • python
      • DJ
    • golang
    • javascript
      • nodejs
      • webpack

1.4 WEB浏览器和WEB服务器

浏览器技术

  • 浏览器就是一个解释器:js
  • 浏览器就是一个组合器:html+css+js
  • 浏览器就是一个可视化工具:html dom树,将所有资源集中,并展示出来

浏览器厂商

  • google
  • mozilla
  • 国内

服务器技术

  • 商务级
    • IBM
    • Oracle
  • 开源
    • nginx/apache
    • tomcat

2 JSP简介

本质上,JSP是Servlet的一种推流应用,以约定的固定格式来输出html

Servlet = JAVA + HTML

  • 本质上是JAVA类

  • 做WEB服务,接请求,给响应

JSP = HTML + JAVA

  • 本质上是Servlet,但对用户而言,以页面形式呈现

  • 专门用于生成html页面的服务脚本技术

  • 在HTML中嵌入了JAVA脚本

  • 动静分离

    • HTML标签
    • JSP标签

JSP是JAVA WEB早期解决方案里的一种前端视图技术

2.1 特点

  • 简单方便
  • 跨平台【随JAVA】
  • 高效率,高性能【每个请求一个线程,一次编译,处处执行】
  • 低成本【开源】

2.2 执行顺序

Jsp的本质是servlet, 通过response的printWriter返回,response的getOutputStream只能调用一次,返回流就不能返回页面刷新

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

具体的请求和响应过程

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

  1. 容器按web.xml初始化,提供服务
  2. 首次发起url请求,请求到达容器
  3. 容器将.jsp文件转为.java文件
  4. 编译器将.java编译为.class文件
  5. 容器载入bean,即.class文件,再读配置文件,即web.xml文件的初始化参数
  6. 容器创建对象,开启线程,拿到request
  7. 初始化对象init
  8. 处理请求service
  9. 得到响应,给出response
  10. 响应到客户端,浏览器显示页面

2.3 JSP原理和时序

JSP的生命周期

1)翻译: jsp->java文件
2)编译: java文件->class文件(servlet程序)
3)构造方法(第1次访问)
4)init方法(第1次访问):_jspInit()
5)service方法:_jspService()
6)destroy方法:_jspDestroy()

更详细的内部原理

1、翻译(jsp文件->java文件)

2、编译(java源文件->class字节码文件(servlet程序))

3、构造函数 (第一次运行)【容器中的对象产生】

4、调用init方法 (第一次运行) – 对应jsp编译的java文件的方法就是_jspInit()

5、调用service方法 --对应jsp编译的java文件的方法就是_jspService()

6、调用destroy方法 --对应jsp编译的java文件的方法就是_jspDestroy()

针对jsp的运行原理中的四个步骤,平常程序里是怎么运行的呢?

    它分为两种情况,第一次运行和第n次运行
    1、第一次运行的顺序:走的是(1)->(2)->(3)->(4)
    2、第n次运行的顺序:走的是(4)
	在这里,大家就要思考了,为什么除了第一次运行走(1)、(2)、(3)步骤,第n次就走这个步骤的呢?

再简化一下

1.客户端发送请求给web容器
2.web容器将jsp首先转译成servlet源代码
3.web容器将servlet源代码编译成.class 文件
4.web容器执行.class 文件
5.web容器将结果响应给客户端

也就是

  1. 请求
  2. 转化
  3. 运行
  4. 响应

2.4 示例jsp的执行过程分析

hello.jsp文件

<% @ page languange="java" Content-Type="text/html;UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>  
    <head>  
        <title> HelloWorld </title>  
    </head>  
    <body>  
        <%  
        out.println("HelloWorld");  
        %>  
    </body>  
</html>  

web.xml文件

<servlet>  
    <servlet-name>jsp</servlet-name>  
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>   
</servlet>  

<servlet-mapping>  
    <servlet-name>jsp</servlet-name>  
    <url-pattern>*.jsp</url-pattern>  
</servlet-mapping>

如果jsp第一次使用,要将它编译成servlet。编译好后将生成我们相关的文件即

hello_jsp.java

再生成hello_jsp.class文件

再执行它


3 JSP语法基础

4 JSP内置对象

4.1 九大内置对象

  1. PageContext javax.servlet.jsp.PageContext 容器:JSP的页面容器
  2. request javax.servlet.http.HttpServletrequest 请求:获取用户的请求信息
  3. response javax.servlet.http.HttpServletResponse 响应:服务器向客户端的回应信息
  4. session javax.servlet.http.HttpSession 会话:用来保存每一个用户的信息
  5. application javax.servlet.ServletContext 全局:表示所有用户的共享信息
  6. config javax.servlet.ServletConfig 配置:服务器配置信息,可以取得初始化参数
  7. out javax.servlet.jsp.jspWriter 输出:页面输出流
  8. page java.lang.object 类:根对象
  9. exception java.lang.Throwable 异常

4.2 四种属性范围

page(pageContext): 只在一个页面中保存属性。 跳转之后无效。
request: 只在一次请求中有效,服务器跳转之后有效。 客户端跳无效
session: 在一次会话中有效。服务器跳转、客户端跳转都有效。 网页关闭重新打开无效
application: 在整个服务器上保存,所有用户都可使用。 重启服务器后无效

注意:

如果设置过多的application属性范围会影响服务器性能。
pageContext.PAGE_SCOPE
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE

设置方法:

pageContext.setAttribute(“name”, “liuyang”, pageContext.APPLICATION_SCOPE);


JSP有九个内置对象(又叫隐含对象),不需要预先声明就可以在脚本代码和表达式中随意使用【事实上,在jsp转为servlet类后,就可以在源码中观察到这些对象,都是参变量或是局部成员变量】

JSP九大内置对象分为四类:

输入输出对象:out对象、response对象、request对象
通信控制对象:pageContext对象【也可以叫做上下文对象】、session对象【会话对象】、application对象【服务器对象】
Servlet对象:page对象、config对象  
错误处理对象:exception对象

九种对象简介:

out对象:			输出		用于向客户端、浏览器输出数据。
request对象:		请求		封装了来自客户端、浏览器的各种信息。
response对象:		响应		封装了服务器的响应信息。
exception对象:	异常		封装了jsp程序执行过程中发生的异常和错误信息。
config对象:		配置		封装了应用程序的配置信息。
page对象:			页面		指向了当前jsp程序本身。
session对象:		会话		用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
application对象:	上下文		代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
pageContext对象:	全部		提供了对jsp页面所有对象以及命名空间的访问。

4.3 request对象

获取浏览器,客户端信息

  • url参数
  • form参数

表单

  • action
    • 另一个url地址
    • 即将要请求的服务器地址
  • method 提交方式
    • GET
    • POST

请求头信息

  • accept 可以接受的MIME
  • accept-language 浏览器首选语言
  • user-agent 浏览器信息
  • host 服务器信息
  • ua-cpu CPU类型
  • connection 是否长连接HTTP
  • accept-encoding 可处理的编码
  • cookie 客户端会话信息
  • referer 向页面发起请求的地址
  • content-type 表单的MIME类型
    • text/plain
    • text/html
    • multipart/form-data【表单上传文件用】
    • application/x-www-form-urlencoded【默认】
    • application/json
  • content-length 数据长度
  • cache-control 网页缓存控制

request请求对象具体方法

隐藏对象request是javax.servlet.ServletRequest类的实例,代表客户端的请求。

request包含客户端的信息以及请求的信息,如请求那个文件,附带的地址参数等。每次客户端的请求都会产生一个request实例。request对象的常用方法如下:
1   object getAttribute(String name)    返回指定属性的属性值
2   Enumeration getAttributeNames()    返回所有可用属性名的枚举
3  String getCharacterEncoding()    返回字符编码方式
4   int getContentLength()   返回请求体的长度(以字节数)
5   String getContentType()   得到请求体的MIME类型
6   ServletInputStream getInputStream()   得到请求体中一行的二进制流
7   String getParameter(String name)   返回name指定参数的参数值
8   Enumeration getParameterNames()   返回可用参数名的枚举
9   String[] getparameterValues(String name)    返回包含参数name的所有值的数组
10   String getProtocol()   返回请求用的协议类型及版本号
11   String getScheme()   返回请求用的计划名,如:http https及ftp等
12   int getServerPort()   返回服务器接受此请求所用的端口号
13   String getServerName()    返回接受请求的服务器主机名
14   BufferedReader getReader()    返回解码过了的请求体
15   String getRemoteAddr()    返回发送此请求的客户端IP地址
16   String getRemoteHost()   返回发送此请求的客户端主机名
17   void setAttribute(String key Object obj)   设置属性的属性值
18   String getRealPath(String path)   返回一虚拟路径的真实路径
19   void setCharacterEncoding(“gb2312”)   设置接受参数的字符集

4.4 response对象

response响应对象

隐藏对象response是javax.servlet.ServletResponse类的实例,代表客户端的响应。

服务器端的任何输出都通过response对象发送到客户端浏览器。

每次服务器端都会响应一个response实例。

response对象的常用方法如下:
1   String getCharacterEncoding()    返回响应用的是何种字符编码
2   ServletOutputStream getOutputStream()   返回响应的一个二进制输出流
3   PrintWriter getWriter()   返回可以向客户端输出字符的一个对象
4    void setContentLength(int len)   设置响应头长度
5   void setContentType(String type)   设置响应的MIME类型
6   sendRedirect(java.lang.String location)   重新定向客户端的请求
7   void setCharacterEncoding(“gb2312”)   设置响应头的字符集


4.5 out对象

out输出流对象

隐藏对象out是javax.servlet.jsp.JspWriter类的实例服务器向客户输出的字符内容可以通过out对象输出。

获取方法:

PrintWriter out = response.getWriter();

out对象常用的方法如下:
1   void clear()   清除缓冲区的内容
2   void clearBuffer()   清除缓冲区的当前内容
3   void flush()   将缓冲内容flush到客户端浏览器
4   int getBufferSize()   返回缓冲大小,单位KB
5   int getRemaining()   返回缓冲剩余大小,单位KB
6   isAutoFlush()   返回缓冲区满时,是自动清空还是抛出异常
7   void close()    关闭输出流


4.6 config对象

config配置对象

隐藏对象config是javax.servlet.ServletConfig类的实例,ServletConfig封装了配置在web.xml中初始化JSP的参数。

JSP中通过config获取这些参数。

每个JSP文件中共有一个config对象。

config对象的常用方法如表:
1  String getInitParameter(String name)  返回配置在web.xml中初始化参数
2  Enumeration getInitParameterNames()   返回所有的初始化参数名称
3  ServletContext getServletContext()  返回ServletContext对象
4  String getServletName  返回Servlet对象


4.7 session对象

session会话对象

隐藏对象session是javax.servlet.http.HttpSession类的实例。

session与cookie是记录客户访问信息的两种机制

  • session是用于服务器端保存用户信息
  • cookie用于在客户端保存用户信息

Servlet中通过request.getSession()来获取session对象,而JSP中可以直接使用。
如果JSP中配置了<%@page session=”false”%>,则隐藏对象session不可用。
每个用户对应一个session对象。

session对象的常用方法如下:
1   long getCreationTime()   返回Session创建时间
2   public String getId()   返回Session创建时JSP引擎为它设的唯一ID号
3   long getLastAccessedTime()   返回此Session里客户端最近一次请求时间
4   int getMaxInactiveInterval()   返回两次请求间隔多长时间此Session被取消(ms)
5   String[] getValueNames()   返回一个包含此Session中所有可用属性的数组
6   void invalidate()  取消Session,使Session不可用
7   boolean isNew()   返回服务器创建的一个Session,客户端是否已经加入
8   void removeValue(String name)   删除Session中指定的属性
9   void setAttribute(String key,Object obj)   设置Session的属性
10  Object getAttribute(String name)   返回session中属性名为name的对象


4.8 application对象

application应用程序对象

隐藏对象application是javax.servlet.ServletContext类的对象。

application封装JSP所在Web应用程序的信息,例如web.xml中国配置的全局的初始化信息。

Servlet中application对象需要通过ServletConfig.getServletContext()来获取。

整个Web应用程序对应一个application对象。

application对象常用的方法如下:
1,  Object getAttribute(String name)  返回application中属性为name的对象
2,  Enumeration getAttributeNames()   返回application中的所有属性名
3,  void setAttribute(String name,Object value)  设置application属性
4,  void removeAttribute(String name)   移除application属性
5,  String getInitParameter(String name)  返回全局初始话函数
6,  Enumeration getInitParameterNames()  返回所有的全局初始话参数
7,  String getMimeType(String filename)  返回文件的文档类型,例如getMimeType(“abc.html”)将返回“text.html”
8,  String getRealPath(String relativePath)  返回Web应用程序内相对网址对应的绝对路径

4.9 page对象

page页面对象

隐藏对象page是javax.servlet.jsp.HttpJspPage类的实例。

page对象代表当前JSP页面,是当前JSP编译后的Servlet类的对象。

page想当于Java类中的关键字this


4.10 pageContext对象

pageContext页面上下文对象

隐藏对象pageContext为javax.servlet.jsp.PageContext类的实例。

pageContext对象代表当前JSP页面编译后的内容。

通过pageContext能够获取到JSP中的资源。

pageContext常用方法如下:
1    JspWriter getOut()   返回out对象
2    HttpSession getSession()    返回Session对象(session)
3    Object getPage()   返回page对象
4    ServletRequest getRequest()    返回request对象
5    ServletResponse getResponse()    返回response对象
6    void setAttribute(String name,Object attribute)    设置属性及属性值 ,在page范围内有效
7    void setAttribute(String name,Object obj,int scope)   在指定范围内设置属性及属性值 ,int1=page,2=request,3=session,4=application
8   public Object getAttribute(String name)   取属性的值
9   Object getAttribute(String name,int scope)   在指定范围内取属性的值
10   public Object findAttribute(String name)   寻找一属性,返回起属性值或NULL
11   void removeAttribute(String name)   删除某属性
12   void removeAttribute(String name,int scope)    在指定范围删除某属性
13   int getAttributeScope(String name)   返回某属性的作用范围
14  Enumeration getAttributeNamesInScope(int scope)   返回指定范围内可用的属性名枚举
15   void release()   释放pageContext所占用的资源
16  void forward(String relativeUrlPath)    使当前页面重导到另一页面
17   void include(String relativeUrlPath)    在当前位置包含另一文件


4.11 Exception对象

Exception异常对象

隐藏对象exception为java.lang.Exception类的对象。

exception封装了JSP中抛出的异常信息。

要使用exception隐藏对象,需要设置<%@page isErrorPage”true”%>。

隐藏对象exception通常被用来处理错误页面


5 页面的跳转

  • 请求转发,使用request对象的forward方法
  • 响应重定向,使用response对象的sendRedirect方法

6 session和cookie

  • 一一对应
  • session在服务器端,cookie在客户端,即浏览器端
  • sessionID
  • session保存用户的登录信息,如用户名,角色权限等

ope)   返回指定范围内可用的属性名枚举
15   void release()   释放pageContext所占用的资源
16  void forward(String relativeUrlPath)    使当前页面重导到另一页面
17   void include(String relativeUrlPath)    在当前位置包含另一文件


4.11 Exception对象

Exception异常对象

隐藏对象exception为java.lang.Exception类的对象。

exception封装了JSP中抛出的异常信息。

要使用exception隐藏对象,需要设置<%@page isErrorPage”true”%>。

隐藏对象exception通常被用来处理错误页面


5 页面的跳转

  • 请求转发,使用request对象的forward方法
  • 响应重定向,使用response对象的sendRedirect方法

6 session和cookie

  • 一一对应
  • session在服务器端,cookie在客户端,即浏览器端
  • sessionID
  • session保存用户的登录信息,如用户名,角色权限等

猜你喜欢

转载自blog.csdn.net/matrixbbs/article/details/113882570
今日推荐