JavaWeb|JavaWeb(一) Servlet

前言:经过最近学习,web阶段快要学完,最近要从头复习下JavaWeb的知识
一、Web和JavaWeb的区别 1.1 简介 Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。
例如:平常我们访问的网站,像百度,淘宝这些网站统称为Web
JavaWeb是Java提供的一门动态web资源开发技术,是用Java技术来解决相关web互联网领域的技术栈,像百度,腾讯等等都用java来开发系统。
其中用JavaWeb来开发有两大好处:
1.跨平台
在多人开发的条件下,由于JVM的存在,开发和部署服务器的系统可以随意挑选,只要有对应版本的JDK
2.开源多
开源社区活跃,可以降低开发成本
1.2 B/S架构 B/S架构 是 Browser/Server 的缩写,翻译过来就是 浏览器/服务器 架构模式,它的特点是,用户只需要用浏览器访问服务器,就可以获取web资源,具体如图
JavaWeb|JavaWeb(一) Servlet
文章图片

B/S架构的好处:易于维护升级;服务器端升级后,客户端无需任何部署就可以使用到新的版本。
1.3 静态资源 静态资源主要包含HTML、CSS、JavaScript、图片等,主要负责页面的展示。其特点就是,每个用户看到的都是一样的页面,而且是固定的,不能随着用户的变化进行动态的变化。
1.4 动态资源 动态资源主要包含Servlet、JSP等,主要用来负责逻辑处理。特点是,进行逻辑的处理,并且将逻辑的处理结果给静态资源进行动态展示,所以静态资源和动态资源要一起使用。
1.5 数据库 数据库主要用来存储数据。
例如:用户登录,在客户端请求服务器时,服务器会从数据库取出数据,并对客户端输入的数据进行比较,会把资源相应给用户,若正确则会放行,若匹配不成功则会提示用户。逻辑处理如下图
JavaWeb|JavaWeb(一) Servlet
文章图片


1.6 HTTP协议 这里简略说一下HTTP协议,目前我购入两本《图解TCP/IP》和《图解HTTP》目前读了一半,等读完会进行详细总结讲解
这里讲解在调试过程中经常出现到的集中HTTP响应状态码

  • 200 ok 客户端请求成功(一切成功!!!)
  • 404 Not Found 请求资源不存在(地址栏写错误)
  • 500 Internal Server Error 服务端发生不可预期的错误(一般是服务器内部报错-通常会有报错信息提示)JavaWeb|JavaWeb(一) Servlet
    文章图片

    二、Servlet使用
Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet。
JavaWeb|JavaWeb(一) Servlet
文章图片

2.1 实现Servlet 1)需要提前导入Servlet依赖坐标(也可以在Maven仓库中查找)
javax.servlet javax.servlet-api 3.1.0 provided

*这里需要注意:这题添加scope中添加了bean的作用域为provided,因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错
2)定义一个类,实现Servlet接口,并重写接口中所有方法(包含了Servlet的5个生命周期-其中三个常用的)
import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/Test") public class Test implements Servlet { /* 初始化方法 1.调用时机:默认情况下,Servlet被第一次访问时被调用 2.调用次数: 1次 */ @Override public void init(ServletConfig servletConfig) throws ServletException {} /* 获取Servlet的初始化参数 (当servlet配置了初始化参数后,web容器在创建servlet实例对象时, 会自动将这些初始化参数封装到ServletConfig对象中, 并在调用servlet的init方法时, 将ServletConfig对象传递给servlet。) */ @Override public ServletConfig getServletConfig() { return null; }/* 提供服务 1.调用时机:每一次Servlet被访问时,调用 2.调用次数: 多次(每访问一次就调用一次) */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //获取请求方式,根据不同的请求方式进行不同的业务处理 HttpServletRequest request = (HttpServletRequest)req; //1. 获取请求方式 String method = request.getMethod(); //2. 判断 if("GET".equals(method)){ // get方式的处理逻辑 }else if("POST".equals(method)){ // post方式的处理逻辑 } } /* 提供有关servlet 的信息 */ @Override public String getServletInfo() { return null; } /* 销毁方法 1.调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用 2.调用次数: 1次 */ @Override public void destroy() {} }

2.2继承HttpServlet实现Servlet 在实际开发中2.1中的方法创建很复杂,需要重写很多方法,并且我们大部分时间是在service方法中进行编写,所以可以通过继承HttpServlet简化创建步骤,若在需要时可以用2.1中的方法创建。
如图为Servlet的体系结构
JavaWeb|JavaWeb(一) Servlet
文章图片

package Servlet; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(value = "https://www.it610.com/Servlet") public class Servlet extends HttpServlet { /* get请求是调用的方法 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} /* post请求调用的方法 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }

2.3urlPattern配置 一个Servlet可以配置多个urlPattern路径,如下
package Servlet; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(urlPatterns = {"/Test03","/Test04"}) public class Servlet extends HttpServlet { /* get请求是调用的方法 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} /* post请求调用的方法 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }

urlPattern配置规则总共有四种匹配
  • 精确匹配
package Servlet; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(urlPatterns = "/Test04/Test03") public class Servlet extends HttpServlet { /* get请求是调用的方法 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} /* post请求调用的方法 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }

在浏览器成功访问
JavaWeb|JavaWeb(一) Servlet
文章图片

  • 目录匹配
package Servlet; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(urlPatterns = "/Test04/*") public class Servlet extends HttpServlet { /* get请求是调用的方法 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} /* post请求调用的方法 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }

运行结果
JavaWeb|JavaWeb(一) Servlet
文章图片

  • 扩展名匹配
package Servlet; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(urlPatterns = "*.a") public class Servlet extends HttpServlet { /* get请求是调用的方法 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} /* post请求调用的方法 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }

运行结果
JavaWeb|JavaWeb(一) Servlet
文章图片

  • 任意匹配

package Servlet; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(urlPatterns = "/*") public class Servlet extends HttpServlet { /* get请求是调用的方法 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} /* post请求调用的方法 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }


运行结果
JavaWeb|JavaWeb(一) Servlet
文章图片

2.4五种urlPatterns配置的优先级 精确匹配 > 目录匹配> 扩展名匹配 > /* > /
三、总结 【JavaWeb|JavaWeb(一) Servlet】学完这些基本的Servlet就可以创建了,后续会总结过呢更多的使用,努力学习的一天!

    推荐阅读