JavaWeb之Servlet入门(零基础教程)

    技术2024-11-01  54

    此文章承接上篇文章XML(从是什么到怎么用),篇幅较长,可以收藏慢慢学习

    优质文章导读: XML入门(零基础教程) 一文了解Java反射

    文章目录

    文章概述与TomcatTomcat安装与运行Tomcat的配置 Servlet创建与生命周期标准Java Web 工程结构Servlet 开发步骤Servlet访问方法请求参数划重点Servlet接收请求参数Get与Post请求方法Get与Post应用场景 Servlet生命周期 注释配置Servlet注释简化配置启动时加载Servlet

    文章概述与Tomcat

    通过本文,可以了解到:

    了解Browser-Server (B/S) 模式掌握Servlet开发技巧掌握Servlet执行原理

    Browser-Server(B/S)模式即浏览器和服务器架构模式 优点: 开发简单,无需安装客户端,数据易于共享 缺点: 相较于C/S模式,执行速度与用户体验相对较弱

    B/S模式执行流程 举个例子,一个用户 打开了浏览器, 然后输出了www.baidu.com ,然后浏览器会根据这个网址去查询这个网址所对应的IP地址是什么,这个转换过程是由DNS 来完成的,然后查询到IP地址之后,浏览器就会将刚刚我们输出的网址或者一些附加的信息通过http协议发送给远程的服务器主机,然后服务器主机根据刚刚发送过来的数据包利用里面编写好的程序动态的去生成了HTML,然后服务器程序会将这份HTML返回给浏览器,然后浏览器将对HTML进行解释,展示给用户 请求与响应

    从浏览器发出送给服务器的数据包称为"请求(Request)"从浏览器返回给浏览器的结果称为"响应(Response)"

    J2EE 在Java中如何开发BS应用程序呢,这就需要J2EE了

    J2EE (Java 2 Platform Enterprise Edition) 是指"Java 2企业版"

    开发BS(Web)应用程序就是J2EE最核心的功能

    J2EE由13个功能模块组成 Apache Tomcat 如果想要我们的web应用程序能够动态的生成网页的话,就需要有一台web服务器,简略介绍一下在Java领域大名鼎鼎的一款web服务器程序

    Tomcat是Apache软件基金会旗下一款免费的开放源代码的Web应用服务器程序

    J2EE与Tomcat的关系

    J2EE是一-组技术规范与指南,具体实现由软件厂商决定Tomcat是J2EE Web (Servlet与JSP) 标准的实现者J2SE是J2EE运行的基石,运行Tomcat离不开J2SE

    Servlet 而有了Tomcat还不够,Tomcat装上了以后可以让我们的电脑变成一台服务器,而在服务器内部,程序是如何处理的,就要用到J2EE的核心组件Servlet来进行编码 Tomcat与Servlet的关系

    Tomcat安装与运行

    这里只是先学习Servlet,可以先在windows下进行安装 参考: win10下Tomcat的安装与运行

    Tomcat的配置

    建议参考这篇博文 使用IDEA配置Tomcat

    Servlet创建与生命周期

    标准Java Web 工程结构

    组织结构描述tomcat安装目录/webapps/Tomcat应用根目录/web应用目录/Java Web应用目录/web应用目录/index.html |.jsp默认首页/WEB-INFWEB应用的安全目录,用于存放配置文件/WEB-INF/web. xmIweb.xml是“部署描述符文件”,是该Web项目核心配置文件/NWEB-INF/classes存放编译后的classes文件/WEB-INF/lib用于存放web应用依赖的jar文件/META-INF/MANIFEST.MF包含Web应用的版本等信息

    Servlet 开发步骤

    创建Servlet类,继承HttpServlet重写service方法,编写程序代码配置web.xml,绑定URL

    在配置好Tomcat的前提下,我们来创建一个FirstServelet类,实现最基本的操作

    import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; //HttpServlet是所有我们自己写的Servlet服务器小程序的父类,必须进行继承才可以开发我们自己的程序 public class FirstServlet extends HttpServlet { @Override //重写service函数,req 代表的是request(请求) 包含浏览器向服务器发送的请求的数据 // resp 代表的是response(响应) 包含从服务器生成,要发送回浏览器的信息 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //接收请求发来的参数 String name = req.getParameter("name"); String html = "<h1 style='color:red'>Hi," + name +"! </h1><hr/>"; //这相当于从服务器向浏览器返回的输出流 PrintWriter out = resp.getWriter(); //将html返回给浏览器 out.println(html); } }

    我们写好这个之后,还需要在web.xml中进行配置 打开web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 声明Servlet --> <servlet> <!-- servlet的别名 --> <servlet-name>first</servlet-name> <!-- 类的完整路径 --> <servlet-class>FirstServlet</servlet-class> </servlet> <!-- 将Servlet与URL绑定 --> <servlet-mapping> <!-- 此处的<servlet-name>与上方的声明必须保持一致 --> <servlet-name>first</servlet-name> <url-pattern>/hi</url-pattern> </servlet-mapping> </web-app>

    J2EE设置这个别名,有两个好处

    使用别名,比较简洁,让配置看起来比较舒服而我们的类的完整路径,在系统中是敏感信息,不应该轻易的暴露,这样使用别名来绑定URL,这样可以提高程序的安全性

    Servlet访问方法

    http://IP地址:端口/context-path/url-mapping远程访问使用IP地址,本地访问localhost(127.0.0.1)context- path为"上下文路径"默认为工程名

    请求参数

    请求参数是指浏览器通过请求向Tomcat提交的数据请求参数通常是用户输入的数据,待Servlet进行处理参数名1=值1&参数名2=值2&参数名n=…

    划重点

    在我们上述过程中,浏览器和Tomcat之间是如何互动的呢,我做一个解释: 首先,对于浏览器来说,我们在地址栏里面输入了 localhost:8080/FirstServe_war_exploded/hi?name=yumao 以后,这个信息会通过请求发送给Tomcat,当Tomcat收到了这个信息以后,会从web.xml文件中去查找有没有与之匹配的servlet-name(我们设置的映射为hi,它的servlet-name是first),接着去查找对应的类,然后会创建一个和寻找到的类相同名的对象并且执行其中的service()方法(这就是之前为什么要重写service()方法的原因 ,service()方法用意就是为了为servlet提供响应和支持),之后Tomcat会将输出的字符串(也就是html代码)通过response响应原封不同的发送给浏览器,然后浏览器会解析这串代码并展示出来.

    Servlet接收请求参数

    request.getParameter() - 接收单个参数request.getParameterValues() -接收多个同名参数

    Get与Post请求方法

    Get方式是将数据通过在URL附加数据显性向服务器发送数据。http://localhost:8080/FirstServlet/sample?name=zhangsanPost方式会将数据存放在”请求体”中隐性向服务器发送数据 http://localhost:8080/FirstServlet/sample 请求体: name= zhangsan 这两个方法比较而言,Get方法可读性更好,Post方法数据更加的隐秘 如果想用Post请求,可以在后面加上 method=“post”

    Get与Post应用场景

    Get常用于不包含敏感信息的查询功能 例如:https://www.baidu.com/s?wd=yumao&rsv_ spt=1Post用于安全性要求较高的功能或者服务器的”写"操作 用户登录 用户注册 更新公司账目

    Servlet生命周期

    装载 - web.xml创建 - 构造函数初始化 - init()提供服务 - service()销毁 - destroy()

    注释配置Servlet

    注释简化配置

    Servlet 3.x之后引入了"注解Annotation" 特性注解用于简化Web应用程序的配置过程Servlet核心注解: @WebServlet import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /*写了注解@WebServlet(映射URL) 之后就不用切换去写web.xml里面的东西了 *因为有了这句话之后,在启动的时候,Tomcat会扫描所有的字节码文件,这个类里面写了@WebServlet并且配置了 * 对应的URL,就会按照这个规则加载进去,其实@WebServlet就像是一个标志,告诉Tomcat当前的类是一个Servlet, * 要将它绑定到/anno就可以了 */ @WebServlet("/anno") public class AnnotationServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().println("I'm annotationServlet servlet!"); } }

    启动时加载Servlet

    web.xml使用< load-on-startup>设置启动加载<load-on-startup>0~9999 </load-on-startup> (0~9999为优先级)启动时加载在工作中常用于系统的预处理

    其实很简单

    import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** * urlPatterns 是URL的值,即使可能不会用到,也要写入 * loadOnStartup 是优先级的值 0最大 9999最小 */ @WebServlet(urlPatterns = "/anno",loadOnStartup = 0) public class AnnotationServlet extends HttpServlet { @Override public void init() throws ServletException { System.out.println("正在创建"); } }

    若有错误,请各位指正,文章持续更新,关注羽毛,我们一同成长

    Processed: 0.009, SQL: 9