JavaWeb基础上
一. Java Web技术架构的演变
Java Web,是用 Java 技术来解决相关 WEB 互联网领域的技术栈。
WEB 包括:WEB 服务端和 WEB 客户端两部分。Java 在客户端的应用有 Java Applet,不过使用得很少。
Java在服务器端的应用非常的丰富,比如 Servlet,JSP、SpringBoot 等等。
JavaWeb 架构演变过程大致分为以下几个阶段:

二. Servlet (服务器端组件)
1.1 什么是Servlet?
Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。(实现网站的具体某个小功能的后端代码,用于处理客户端请求并生成响应)

比如,我们打开一个网站有个注册功能,在填写完信息后,点击提交,所填写的信息传输到后端,根据所指向的路径,来匹配对应的servlet,专门用于处理注册流程。

当然,我们还可以有登录Servlet,个人信息Servlet等等。从代码上来说,Servlets 是 Java 类,服务于 HTTP 请求并实现了 javax.servlet.Servlet 接口
1.2 Servlet 生命周期
Servlet 生命周期就是从创建到毁灭的过程。
大致是四个阶段。
- init():初始化阶段,只被调用一次,也就是在第一次创建 Servlet 时被调用。
- service():服务阶段,主要处理来自客户端的请求,并可以根据 HTTP 请求类型来调用对应的方法,比如 doGet(),doPost(),doPut() 等等。
- doGet(),doPost():处理阶段,将主要代码逻辑写在此处。根据不同 HTTP 请求对应不同方法。
- destroy():销毁阶段,该方法只会被调用一次,即在 Servlet 生命期结束时被调用。一般都是在关闭系统时执行。

1.3 实验:
1.创建项目,稍等片刻,自行会自行加载相关依赖,如果有报错请尝试退出重进,注意Archetype的内容要一直

2.在 pom.xml 中引入 servlet 依赖,写在
1 | |

- 配置tomcat服务器


如果没有工件:自行百度
1.4 编写 Servlet 并运行:
- 鼠标右键点击 main 目录,选择 New - Directory ,创建名为 java 的主目录,后面我们的代码都写在此处。
- 鼠标右键点击 java 目录,选择 New - Java Class ,创建名为 FirstServlet 的class文件,在这
里面编写我们的代码,最终如下图所示

想要真正运行起来 Servlet 程序,我们需要继承 HttpServlet ,重写部分方法。
1 | |
编写代码,响应 Get 和 Post 请求内容:
1 | |
在 servlet 中,需要根据 URL 路径匹配映射到对应的 servlet。即在 web.xml 中注册 servlet:
1 | |
映射匹配流程: /FirstServlet 路径绑定的 Servlet-name为FirstServlet ,而 FirstServlet绑定的class是FirstServlet ,最终访问 /FirstServlet ,调用的类也就是 FirstServlet.class 。

servlet 注册有两种方式:一是通过上述 web.xml 进行注册,二是在 servlet3 以后可以通过@WebServlet() 注解方式进行注册。

重启tomcat服务
浏览器访问 127.0.0.1:8080/FirstServlet

三. 过滤器、监听器和拦截器
**过滤器 (Filter):**在 servlet 中,过滤器也就是 Filter ,它主要用于过滤字符编码,做一些统一的业务等等。是使用 javax.servlet.Filter 接口进行实现的。在代码安全中,他常被用于防止 XSS,防 SQL注入,防任意文件上传等。再配置了Filter之后,它可以统一过滤危险字符,省时省力。
监听器(Listener):在servlet中,监听器也就是 Listener ,它主要用于做一些初始化的内容**。是使用javax.servlet.ServletContextListener 接口进行实现的。如果同时有监听器和过滤器,监听器是在过滤器之前启动。
拦截器(Interceptor)**:**依赖 WEB 框架,在 SrpingMvc 中就依赖 SpringMVC 框架。是属于面向切面变成的一种运用。
过滤器和拦截器的区别,分为以下五种:
- 拦截器是基于 Java 的反射机制的,而过滤器是基于函数回调
- 过滤器依赖与 servlet 容器,而拦截器不依赖与 servlet 容器
- 拦截器只能对 action 请求起作用,而过滤器则可以对几乎所有的请求起作用
- 拦截器可以访问 action 上下文、值栈里的对象,而过滤器不能
- 在 action 的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
四. JSP基础 (动态网页技术)
JSP 全称 Java Server Page,基于 Java 语言,是一种 动态网页技术。
它使用 JSP 标签在 HTML 网页中插入 Java 代码。标签通常以 <% code %> 显示。
JSP 本质是简化版的 Servlet,JSP 在编译后就变成了 Servlet。JVM 只能识别 Java 的类,是无法识别 JSP 代码的。所以 WEB 服务器会将 JSP 编译成 JVM 能识别的 Java类。
JSP 跟 Servlet 区别在于,JSP 常用于动态页面显示,Servlet 常用于逻辑控制。在代码中常使用 JSP 做前端动态页面,在接收到用户输入后交给对应的 Servlet 进行处理。当然 JSP 也可以当做后端代码进行逻辑控制。
Jsp文件后缀 *.jsp
1 | |
JSP 生命周期:
编译阶段 -> 初始化阶段 -> 执行阶段 -> 销毁阶段 ,对比 Servlet 此处多了一个编译阶段,是将JSP 编译成 Servlet 的阶段。
而这个阶段也是有三个步骤的: 解析 JSP 文件 -> 将 JSP 文件转为 Servlet -> 编译 Servlet 。
JSP 指令:
是用来设置 JSP 整个页面属性的。格式为: <%@ directive attribute=”value” %> 。JSP 中的三种指令标签:
| 指令 | 描述 |
|---|---|
| <%@ page …%> | 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等 |
| <%@ include … %> | 包含其他文件 |
| <%@ taglib … %> | 引入标签库的定义 |
JSP的九大内置对象(隐式对象),这九个对象,可以不用声明直接使用。
| 名称 | 类型 | 描述 |
|---|---|---|
| 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页面所发生的异常,在错误页中才起作用 |
实验:
在原来的基础上加上两个界面:

login.jsp代码如下所示:(红色波浪不用管)
1 | |
do_login.jsp
1 | |
重启tomcat即可:
