Java学习之路006——Servlet开发

文章介绍了如何在Web项目中引入ServletAPI,包括在模块设置中添加库,创建Servlet子类,并配置Servlet。接着详细阐述了Servlet的生命周期,展示了init,service,destroy方法的执行顺序。此外,文章对比了基于web.xml配置和使用注解的方式,并给出一个简单的登录Servlet示例,演示了处理POST和GET请求的方法。
摘要由CSDN通过智能技术生成

1、 Servlet api引入

【STEP 1】在创建Web项目中引入Tomcat里面提供servlet-api.jar类库

项目右键 -> 打开模块设置

【STEP 2】选择依赖页面,进行新建一个库。

【STEP 3】如果不使用默认的库,就新增库->Java

【step 4】找到tomcat下的servlet-api.jar包

【STEP 5】选择成功,确定即可。

【6】选中servlet-api库进行添加

【7】在依赖选项卡可以看到servlet-api库有关信息

【8】在项目目录的外部库,也可以看到servelt-api库被添加进来了

2、 创建一个Servlet

public class MyServlet extends HttpServlet {     }

【1】新建一个类,例如Myservlet,继承自HttpServlet

【2】快速生成Get、Post重写的方法。用来提供给外部(客户端)调用的Get、Post请求。

【3】在Html页面里面新增两个触发按钮,用来测试使用

```

   
   

```

3、使用Servlet

3.1 基于原始配置

【1】在web.xml配置文件内,进行添加配置

【2】配置servlet有关信息

【3】其中,引用的类路径为,在对应的写Get、Post等方法的类右键,选择复制引用,即可寻找到复制引用的选项。

<!--配置Servlet--> <servlet>    <servlet-name>weskyServlet</servlet-name>    <servlet-class>com.wesky.servlet.demo.MyServlet</servlet-class> </servlet> ​ <!--配置Servlet映射--> <servlet-mapping>    <servlet-name>weskyServlet</servlet-name>    <url-pattern>/wesky</url-pattern> </servlet-mapping>

【4】对类做个输出,以便于测试

【5】修改页面请求的代码,填写action的路径,action路径和配置文件的路径保持一致(前缀没有斜杠,映射路径有斜杠)

【6】然后启动程序

【7】先后点击Post请求和Get请求按钮。在第一次点击的时候,类型会被实例化,后续就没有继续实例化了。并且也都可以看到点击进入到了对应的方法里面。

3.2 Servlet生命周期

测试生命周期

【1】重载三个方法,分别是init,service,destroy;他们分别代表servlet服务的初始化、服务分发、以及销毁。

【2】然后再启动程序,看下效果。

第一次执行:

构造函数 -> init() -> service() -> doXXX()

第二次:service() -> doXXX()

第三次:service() -> doXXX()

【3】关闭服务的时候,执行一次销毁动作。

【4】super.service()方法反编译,可以看到具体实现效果

【5】所以我们可以对super.service进行一些自定义改造,或者不管什么请求,都可以指定为Post请求。例如,判断Post和Get请求走正常渠道,其他请求全部引导向Post方法里面去。

3.3 servlet上使用注解

【注意】Servlet版本必须是3.0以上才可以使用注解

例如查看我当前的servlet版本是6.0

【1】注解说明:

@WebServlet(name = "weskyServlet", urlPatterns = "/wesky2") name: 代表servlet的名称 urlPatterns: 定义映射路径

【2】html静态页面里面也修改action为wesky2,与注解写的保持一致,用于区分和配置文件实现的差别

【3】对原先配置的xml文件进行注释

【4】运行程序,并点击请求按钮,可以看到也能被访问成功。如果访问不成功,action没有成功跳转,可以清理缓存再试试。

3.4 servlet编程实现

【1】为了节省工作时间,此处就不手写了,直接问ChatGPT要了份代码,我们接下来做个简单的解析

【2】前端代码(login.html)说明:在 HTML 页面中,我们创建了一个简单的登录表单,其中包含用户名和密码的输入框。该表单将提交到 login Servlet。在 Servlet 中,我们可以获取并验证用户输入的用户名和密码,然后决定是否允许用户登录。

```

    Login Page

Login Page

 

         

 

         

 

```

【3】servlet部分代码,做了点小调整以后:

import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; ​ ​ @WebServlet(name = "loginServlet",urlPatterns = "/login") public class LoginServlet extends HttpServlet {    private static final long serialVersionUID = 1L; ​    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 显示登录页面        request.getRequestDispatcher("/login.html").forward(request, response);   } ​    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                response.setContentType("text/html;charset=UTF-8"); // 设置字符编码 ​        PrintWriter writer = response.getWriter(); ​ ​        // 处理登录请求        String username = request.getParameter("username");        String password = request.getParameter("password");        if ("admin".equals(username) && "admin123".equals(password)) {            // 登录成功,重定向到欢迎页面            response.sendRedirect("hello.html");       } else {            // 登录失败,重定向到登录页面并显示错误消息            writer.write("<script>alert('登录失败!');location.href='login.html';</script>");       } ​        // 释放操作流资源        writer.flush();        writer.close();   } } ​

【4】一些说明:

<form method="post" action="login"> post代表访问到doPost里面;action=login代表通过注解的urlPatterns找到/login,从而可以确定servlet服务所在的入口; Java代码:String username = request.getParameter("username"); 前端标签代码:<input type="text" name="username" /> HttpServletRequest request 参数的getParameter方法,传递一个字符串参数,该参数用于匹配前端name与之对应的内容

【5】现在启动程序运行一下,看下效果。看来机器人写的登录页面还是可以用的。

【6】输入错误的用户名或密码,显示失败,点击确定会回到登录页。

【7】输入正确的密码以后,就会跳转到预设的页面了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值