Servlet基本操作需知

简介: Servlet基本操作需知

文章目录


Servlet基础代码

Servlet的实现

Servlet的生命周期

获取请求参数

请求乱码处理

请求转发

request作用域


Servlet基础代码


Servlet的实现


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * Servlet的实现
 * 1、新建包,并新建普通class类
 * 2、继承HttpServle 类(实现Servlet规范)
 * 3、重写HttpServlet 类中的service()方法(service方法在servlet类接受请求,自动调用。作用:响应结果)
 * 4、在Servlet上添加注解@WebServlet("/"),设置 Servlet访问路径(资源的对外访问路径:浏览器通过访问该路径,从而访问到Servlet类)
 *
 *
 *
 */
@WebServlet("/ser")
public class Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello");
        resp.getWriter().write("hello");
    }
}

Servlet的生命周期


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * Servlet的生命周期
 * 1、初始化
 *      init()
 *      系统方法,服务器自动调用,只执行一次。
 *      当第一次访问Servlet时触发
 * 2、就绪/调用
 *      servlet()
 *      系统方法,服务器自动调用,可以执行多次。
 *      当有请求访问servlet时,servlet就会被调用
 * 3、销毁
 *      destory()
 *      系统方法,服务器自动调用,只执行一次。
 *      当服务器关闭时触发。
 *
 */
@WebServlet("/ser01")
public class Servlet01 extends HttpServlet {
    /**
     *  init()
     *      系统方法,服务器自动调用,只执行一次。
     *      当第一次访问Servlet时触发
     *
     *
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
        System.out.println("init....");
    }
    /**
     *  servlet()
     *      系统方法,服务器自动调用,可以执行多次。
     *       当有请求访问servlet时,servlet就会被调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service....");
    }
    /**
     *  destory()
     *        系统方法,服务器自动调用,只执行一次。
     *        当服务器关闭时触发。
     */
    @Override
    public void destroy() {
        System.out.println("destroy....");
    }
}

获取请求参数


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ser02")
public class Servlet02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        http://localhost/servlet01_war_exploded/ser02?name=zs&pwd=123&hobby=sing&hobby=dance
        String queryString = req.getQueryString();
        System.out.println("获取请求行中的参数部分"+ queryString);
        /**
         *
         * 获取请求参数
         *    1.通过参数名获取参数,返回字符串
         *
         *      参数名:
         *         1.表单元素的name属性
         *         2.Ajax的data属性的值的键
         *         3.超链接参数的键
         *    2.通过参数名获取所有参数,返回数组
         *
         *
         */
        //获取用户名
        String name = req.getParameter("name");
        String pwd = req.getParameter("pwd");
        System.out.println("姓名:"+name+",密码:"+pwd);
        //通过参数名获取所有参数,返回数组
        String[] arr = req.getParameterValues("hobby");
        for (int i = 0; i < arr.length ;i++){
            System.out.println(arr[i]);
        }
    }
}

请求乱码处理


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     <form action="ser03" method="post">
         姓名:<input type="text" name="names">
         <button>登录</button>
     </form>
</body>
</html>
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 请求乱码处理
 *   req.setCharacterEncoding("UTF-8");
 */
@WebServlet("/ser03")
public class Servlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //在参数获取前,设置编码
        req.setCharacterEncoding("UTF-8");
        System.out.println(req.getParameter("names"));
    }
}

请求转发


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="ser04" method="post">
        姓名:<input type="text" name="names">
        密码:<input type="password" name="paw">
        <button>登录</button>
    </form>
</body>
</html>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<%--    数据共享 Servlet04--%>
      <%
        String name = request.getParameter("names");
        String paw = request.getParameter("paw");
        out.print("名字:"+name+",密码:"+paw);
      %>
      <br>
      <%
         //获取request作用域 Servlet05
          String names = (String) request.getAttribute("username");
          //在浏览器中打印
          out.print(names);
          //获取集合
//          List<String> list = (List<String>) request.getAttribute("list");
//          out.print(list.get(0));
      %>
<br/>
<a href="hello-servlet">Hello Servlet</a>
</body>
</html>
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 *
 * 请求转发
 *     服务端的一种跳转方式
 *     格式:
 *          req.getRequestDispatcher("路径").forward(req,resp);
 *     特点:
 *         1.地址栏不发生改变
 *         2.服务端行为
 *         3.请求转发只有一次请求
 *         4.request对象可以共享
 *
 */
@WebServlet("/ser04")
public class Servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        System.out.println("Servlet....");
        String name = req.getParameter("names");
        String paw = req.getParameter("paw");
        System.out.println("名字:"+name+",密码:"+paw);
        //请求转发跳转到首页
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}

request作用域


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="ser05" method="post">
    姓名:<input type="text" name="names">
    密码:<input type="password" name="paw">
    <button>登录</button>
</form>
</body>
</html>
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 *  request作用域
 *     设置作用域
 *       request.setAttribute("参数名",参数值);
 *     获取作用域
 *       request.getAttribute("参数名");
 *     移除作用域
 *       request.removeAttribute("参数名");
 *
 *
 */
@WebServlet("/ser05")
public class Servlet05 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        System.out.println("Servlet05....");
        String name = "李祥";
        String paw = "asd.123";
        List<String> list = new ArrayList<>();
           list.add("ada");
           list.add("aaa");
        //设置到request作用域中
        req.setAttribute("username",name);
        req.setAttribute("password",paw);
        req.setAttribute("list",list);
        //请求转发跳转到首页
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}


相关文章
|
人工智能 自然语言处理 算法
谷歌推出”自我发现“框架,极大增强GPT-4等大模型推理能力
【4月更文挑战第20天】谷歌DeepMind团队推出了SELF-DISCOVER框架,让大型语言模型能自我发现并构建推理结构,提升在复杂任务中的性能。该框架模仿人类解决问题方式,分两阶段选择和适应原子推理模块,以解决挑战。在多任务测试中,SELF-DISCOVER相比传统方法表现出色,性能提升42%,计算量减少10至40倍。它具有跨模型应用的普适性,并与人类思维方式相通。然而,它在某些任务类型上仍有优化空间,且需解决计算成本问题。论文链接:https://arxiv.org/abs/2402.03620
230 1
|
监控 关系型数据库 MySQL
MySQL创建索引的注意事项
在数据库设计和优化中,索引的合理使用是提高查询性能和加速数据检索的关键因素之一。通过选择适当的列、了解数据分布、定期维护和监控索引性能,我们能够最大程度地发挥索引的优势,提高数据库的效率和响应速度。
365 0
|
机器学习/深度学习 存储 人工智能
【中国大学生计算机大赛二等奖】智能中医-中e诊简介(一)
【中国大学生计算机大赛二等奖】智能中医-中e诊简介(一)
525 0
|
Oracle Java 关系型数据库
idea配置jdk、淘宝镜像
idea配置jdk、淘宝镜像
1039 0
idea配置jdk、淘宝镜像
|
测试技术 开发工具 Android开发
跨平台的视频采集、直播SDK SmarterStreaming
SmarterStreaming 跨平台的视频采集、直播SDK(支持Windows/android/iOS,支持私有协议和RTMP推流),也许是国内最靠谱的视频直播推流、播放SDK之一,助您轻松实现类似于花椒、映客、斗鱼手机直播推送与播放。
2116 0
|
11月前
|
数据安全/隐私保护
设备巡检管理系统选购指南,看这一篇就够了
在生产型企业中,设备巡检是确保设备正常运行和延长设备寿命的重要环节。面对人力、时间和资金的挑战,选择合适的巡检系统至关重要。系统需满足功能实用、操作简便、性价比高、数据安全及扩展性强等要素。二维码技术因其低成本、易用性,成为设备巡检的理想选择,尤其推荐使用草料二维码,它提供从搭建到管理的全流程服务,帮助企业管理设备巡检数据,提升效率。
|
11月前
|
人工智能 小程序 算法
微信小程序地图定位的核心技术与实际应用详解
在移动互联网时代,微信小程序凭借其轻量化和普及性,成为室内地图导航的理想平台。本文探讨了微信小程序在室内定位领域的创新应用,包括蓝牙iBeacon定位、高精度地图构建及AI路径规划等核心技术,及其在购物中心、医院、机场火车站和景区等场景的应用,展示了其为用户带来的高效、智能的导航体验。
534 0
|
JavaScript
vue列表导出word文档
vue列表导出word文档
184 0
|
机器人
GitLab与钉钉集成
在您做需求管理、创建/更新/完成议题、Push代码、合并请求、触发CI/CD等一系列操作的时候,可以通过配置钉钉机器人,来接受这些消息通知。