Java后端01(初识servlet)

这篇具有很好参考价值的文章主要介绍了Java后端01(初识servlet)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

servlet

添加依赖坐标(maven)

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
</dependency>

小测试

​ 所有请求都会固定携带一个参数(method)代表请求的方式(GET,POST,PUT,DELETE,OPTION)

public class HelloServlet extends HttpServlet {
    @Override
    // req 对应的是请求对象,代表的是请求
    // resp 对应的是响应对象,代表的是响应
    // Java依然按照面向对象的设计方式,开发者如果想操作请求和响应,只需要使用对应的对象调用方法即可,对象实例化也是由 tomcat 自行完成
    
    // 此方法表示处理的是 get 请求,如果发送的 post 请求,那么网页就会报错405
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 通过响应对象,设置响应内容
        // 准备响应内容
        String content = "This is a text content!";
        // 获取响应对应的输出流,和 socket 变成的流的获取类似
        PrintWriter printWriter = resp.getWriter();
        // 将数据读取到输出流中
        printWriter.write(content);
        // 当doGet方法运行完成之后,响应会被 tomcat 自动返回给客户端
    }
}

// 在 web.xml 文件中配置路由
<servlet>
	<servlet-name>HelloServlet</servlet-name>
	<servlet-class>com.iweb.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>HelloServlet</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

一个post请求的全流程

<!--页面代码-->
<body>
<!--action:点击提交按钮的时候所发送的请求路径-->
<!--method:请求方式,如果不写默认get-->
    <form action="login" method="post">
      用户名:<input type="text" name="username"><br>
      密码:<input type="password" name="password"><br>
      <input type="submit" value="提交">
    </form>
</body>
// 服务端代码
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 中文处理:在请求的参数接受之前,设置请求中的参数的字符串
        req.setCharacterEncoding("UTF-8");
        // 借助请求对象,获取form表单中所对应的参数
        // getParameter对应的参数,是form表单中input所对应的name属性
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        // req.getParameterValues("name") 获取多个值
        System.out.println(username + " : " + password);
        String html = "";
        if("admin".equals(username)&& "123".equals(password)){
            html = "<div style='color:red'>login success!</div>";
        }else{
            html = "<div style='color:green'>login failed!</div>";
        }
        // 在响应返回之前,设置响应中的内容类型和指定字符集编码
        // 1. 在Java层面将想用中的字符设置为UTF-8编码
        // 2. 通知浏览器使用UTF-8编码显示数据
        resp.setContentType("text/html;charset=UTF-8");
        // 响应返回
        resp.getWriter().write(html);
    }
}
<!--web.xml-->
<servlet>
	<servlet-name>LoginServlet</servlet-name>
	<servlet-class>com.iweb.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>LoginServlet</servlet-name>
	<url-pattern>/login</url-pattern>
</servlet-mapping>

Get请求的几种情况

  1. 浏览器地址栏输入地址访问
  2. 通过超链接点击发送的请求方式
  3. form表单的默认提交方式
  4. ajax指定get方式发送的请求

Post请求方式

  1. form表单指定post方式提交
  2. ajax指定post方式发送请求

POST 和 GET 的区别

  1. get 请求匹配 doGet 方法,post请求匹配 doPost 方法,如果不匹配,会出现405
  2. post 请求中如果携带参数,参数不会出现在 url 中,get 请求中如果携带参数,参数会出现在 url 中
  3. get 请求中参数大小是有限的,过大的参数无法携带,port 请求中参数大小远大于 get 方式

servlet生命周期

  1. 实例化(特性:延迟加载,单例)

    ​ tomcat 运行的时候,servlet 并不会立刻实例化,直到有用户发送请求,并且根据 web.xml 中所配置的映射关系,找到了对应的 servlet 类的类路径的时候,tomcat 这个时候会利用反射创建出对应 servlet 类的对象,为了保证效率,servlet类是单例的。

  2. 初始化

    ​ init方法来自于从HttpServlet 的继承,该方法是成员方法,所以一定是在实例化之后调用的,会在构造方法运行之后运行,但是无论访问多少次,Servlet init,只会初始化一次。

  3. 提供服务

    ​ 正常执行 Service 方法,开发者在方法中借助 req 和 resp 进行请求和响应的处理,方法运行结束之后,响应自动返回

  4. 销毁

    ​ tomcat 服务器关闭的时候,destory 方法被调用。这个过程不是很直观的能被观察到

  5. 被回收

    ​ servlet 被销毁之后,不再有引用存储实例的内存地址,这个时候,servlet实例就满足了被 GC 回收的条件

// 重写方法观察生命周期
public class HelloServlet extends HttpServlet {

    public HelloServlet() {
        System.out.println("HelloServlet -> HelloServlet()");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("HelloServlet -> init()");
    }

    @Override
    public void destroy() {
        System.out.println("HelloServlet -> destroy()");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 通过响应对象,设置响应内容
        // 准备响应内容
        String content = "This is a text content!";
        // 获取响应对应的输出流,和 socket 变成的流的获取类似
        PrintWriter printWriter = resp.getWriter();
        // 将数据读取到输出流中
        printWriter.write(content);
        // 当doGet方法运行完成之后,响应会被 tomcat 自动返回给客户端

        // 定义 url 映射,让服务器知道客户端发送的哪一个请求,会由当前 servlet 处理
    }
}

CDN快速构建前端页面

布局网站:https://www.runoob.com/try/bootstrap/layoutit/

<link href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
<script src="//cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>

页面跳转(至静态页面)

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 模拟页面跳转
    // 通过转发方式跳转到指定页面(或者发送指定请求)
    req.getRequestDispatcher("页面文件路径").forward(req,resp);
    // 通过重定向方式跳转到指定页面(或者发送指定请求)
    req.sendRedicrect("页面文件路径");
}

转发和重定向的区别:转发是一次请求(将请求资源直接发送给客户端),重定向是两次请求(通知客户端去访问资源),如果用户访问的资源不可以被直接获取,那么重定向可以判断该用户有没有权限获得这些资源,转发并不可以,转发则是可以保护页面资源,因为不知道该页面是从何而来

servlet自启动(通过注解去启动servlet)

​ 一般在自启动的servlet类中配置init方法,可以在tomcat启动的时候,该servlet类会自动被实例化以及初始化,但是并不会调用service文章来源地址https://www.toymoban.com/news/detail-601981.html

@WebServlet(loadOnStartup = 10)
// 取值范围为1-99 值越大,优先级越低,反之值越小,优先级越高

req,resp常用方法

req常用方法

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 浏览器发送请求时候的完整url,包括协议,主机名,端口号
    System.out.println(req.getRequestURL());
    // 将url去除掉协议和主机名,并输出(上下文,访问资源路径)
    System.out.println(req.getRequestURI());
    // 获取请求中的参数数据,也就是 ? 之后的信息,只能获取GET方式请求的参数,无法获取POST
    System.out.println(req.getQueryString());
    // 获取客户端的ip地址
    System.out.println(req.getRemoteAddr());
    // 获取客户端的主机名
    System.out.println(req.getRemoteHost());
    // 获取服务器端自己的ip地址
    System.out.println(req.getLocalAddr());
    // 获取服务器端自己的主机名
    System.out.println(req.getLocalName());
    // 获取客户端返送请求的请求方式
    System.out.println(req.getMethod());
}

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 接收单个值的参数
    System.out.println(req.getParameter("jerk"));
    // 接收多值参数
    System.out.println(Arrays.asList(req.getParameterValues("hobby")));
    // 使用ParamMap进行参数和参数值的读取,其中该Map的Key类型为String,值类型为String[]
    Map<String,String[]> params = req.getParameterMap();
    Set<String> paramNames = params.keySet();
    for (String name : paramNames) {
        String[] value = params.get(name);
        System.out.println(name + " : " + Arrays.asList(value));
    }
}

到了这里,关于Java后端01(初识servlet)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Tomcat的安装与Maven依赖Servlet的使用

    Tomcat 是一个 HTTP 服务器. 前面我们已经学习了 HTTP 协议, 知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式. 同时也通过 ajax 和 Java Socket 分别构造了 HTTP 客户端. HTTP 服务器我们也同样可以通过 Java Socket 来实现. 而 Tomcat 就是基于 Java 实现的一个开源免费,也是

    2024年02月06日
    浏览(108)
  • Maven添加Oracle的依赖及驱动

    上篇文章刚介绍了Oracle数据库的安装,下面小白我来配置一下项目中Maven对于Oracle的依赖。 跟之前一篇配置SQLserver的很像,由于maven中没有Oracle的jar包,所以需要自己导入。下面简单的说一下步骤。 第一步 :查看电脑中Oracle对应jdbc的jar包(Oracle安装文件夹里有)。 第二步 :

    2024年02月15日
    浏览(33)
  • 将本地jar包手动添加到Maven仓库依赖处理

    在日常开发中,经常会遇到一些情况,就是在更新Maven时,从网上下载jar包的时候网络不稳定或者其他原因导致jar包数据缺失而导致的依赖无法正常引入的情况. 还有一些其他情况如个人jar包一类的。 以前以上这些情况,通常我是将本地jar包复制到Maven仓库根据目录结构替换相

    2024年02月09日
    浏览(46)
  • java-初识Servlet,Tomcat,JDBC

    java入门须知的重要概念/名词/技术 等 Servlet是Java Web开发中的一个核心组件,它是 基于Java语言编写的服务器端程序,可以接收Web容器(如Tomcat)发送过来的HTTP请求 ,并向客户端发送HTTP响应。Servlet通常用来处理动态Web页面、Web表单数据、管理会话(session)等任务。 实际上,

    2024年02月11日
    浏览(40)
  • GIS工具maptalks开发手册(四)01——渲染地图信息框之添加绘制工具、获取点的坐标数据信息框进行展示

    GIS工具maptalks开发手册(四)01——渲染地图信息框之添加绘制工具、获取点的坐标数据信息框进行展示 1、官网示例 官网示例-地图信息框——https://maptalks.org/examples/cn/ui-control/ui-map-infownd/#ui-control_ui-map-infownd 效果 代码 index.html 2、官网示例改造版 效果 index.html 3、获取图层的坐标

    2024年02月05日
    浏览(70)
  • Java后端05(初识MyBatis)

    mybatis配置文件(XML配置文件) user.xml(实现增删改查的sql语句) 使用做sql查询(Test) 配置文件(⭐注意:每一个配置文件都需要在 mybatis-config.xml 中进行注册!!!!!!!!!) 测试类 配置文件(⭐注意:每一个配置文件都需要在 mybatis-config.xml 中进行注册!!!!!!

    2024年02月14日
    浏览(39)
  • 【后端开发】01-Java基础语法

    Java基础语法 目录 1. 概述 1.1. 语言特性 1.2. 开发平台 1.3. 开发环境 1.4. 开发步骤 1.5. 注释 2. 变量与运算符 2.1. /保留字 2.2. 标识符 2.3. 变量 2.4. 常用数据类型 2.4.1. 基本数据类型(8种) 2.4.2. 引用数据类型 2.4.3. 数据类型转换 2.5. 运算符 2.5.1. 算术运算符(7个) 2.5.2. 关

    2024年02月08日
    浏览(36)
  • 【Java——maven的使用与idea创建maven项目,导入maven依赖(jar包)】

    1.1、打开maven安装路径下的conf文件夹,找到里面的settings.xml文件,(如果使用的是maven安装程序安装的maven,则settings.xml文件和本地仓库位置在默认位置:C:Userspenglei.m2)将下面的代码复制里面,切记不要放到注释里面 1.2、maven项目全局默认配置jdk版本信息,将下面的代码复制

    2024年02月08日
    浏览(90)
  • 学习 Java 报表技术导入 Maven 依赖出错:jacob 无法下载、jasperreports 依赖错误

    最近在做一个可视化项目,用到了 Java 报表技术。在跟着「黑马」课程导入 pom.xml 文件的时候提示下载依赖错误。 com.jacob 包无法下载 Failed to read artifact descriptor for com.lowagie:itext:jar:2.1.7.js6 电脑系统版本:Windows 10 64bit Idea:2023.2 (Ultimate Edition) Maven:apache-maven-3.6.0 解决 jacob 包

    2024年02月11日
    浏览(44)
  • Java项目作业~ 通过html+Servlet+MyBatis,完成站点信息的添加功能

    通过html+Servlet+MyBatis,完成站点信息的添加功能。 以下是站点表的建表语句:     RegisterServlet: UserDao: User: MyBatisUtil: UserDao.xml: jdbc.properties: mybatis-config.xml:  web.xml: register.html: RegTest:    点击网址跳转到浏览器:  填写信息如下:  点击提交按钮:  数据库中查

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包