java中的Servlet学习

1,Servlet
简介:servlet实际上就是运行在服务端的小程序,用来接收用户发送的请求,然后根据用户的请求内容调用其它的java程序来处理请求,最后根据处理结果,借用浏览器的界面返回给用户。
注意:servlet本质上是一段java代码,这段java代码无法独立运行,必须放在Servlet容器中,比如tomcat服务器,由容器调用才可以执行。
2,开发Sevlet程序的步骤

  • 创建一个类,实现Servlet接口,并添加未实现的方法。
  • 在web.xml文件中配置Servlet对外访问的虚拟路径,再将web应用部署到虚拟主机中。
  • <servlet>
    <servlet-name>别名</servlet-name>
    <servlet-class>类名</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>别名</servlet-name>
    <url-pattern>servlet的请求地址</url-pattern>
    </servlet-mapping>

    servlet的继承关系

  • Servlet接口: 通用的接口提供一个servlet应该具有的功能。

  • | - Generic Servlet类,实现了Servlet接口,并实现了其中大部分的方法,但是service方法没有实现,这个方法需要开发人员自己实现。

  • |HttpServlet类,继承了GenericServlet,并实现了service方法,在service方法中判断请求方式,根据不同的请求方式xxx调用不同的doxxx

  • |XxxServlet类,在开发中,我们只需要写一个类继承HttpServlet,并覆盖doget和doPost方法,来处理GET请求和POST请求即可。
    这里写图片描述

Servlet调用过程:
开发一个Sevrlet,放在web应用中,并将web应用部署在服务器中,启动服务器,通过浏览器访问Servlet,可以访问到Servlet处理的结果,具体过程如下图:
这里写图片描述
Servlet的生命周期:

  • Serlvet在第一次被访问的时候创建Servlet实例(),之后服务器会立即调用init方法对其进行初始化。创建之后Servlet实例会一直驻留在服务器的内存中,为后续的请求提供服务(注意:Servlet是单例模式,也就是说Servlet实例只会创建一次),只要有请求来访问这个Servlet,服务器就会调用service方法来处理请求,直到服务器关闭,或者web应用被移除容器,随之web应用的销毁,Servlet实例也会被跟着销毁,在销毁之前服务器会调用destroy方法进行收尾工作,释放资源。
    Servlet的开发细节:
  • Servle虚拟路径的配置方式可以有两种:
  • 1.直接写一个路径
  • 如:/SeondServlet
  • <servlet>
    <servlet-name>SeondServlet</servlet-name>
    <servlet-class>cn.rute.servlet.SecondServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>SeondServlet</servlet-name>
    <url-pattern>/SeondServlet</url-pattern>
    </servlet-mapping>

    后期我们需要通过/SeondServlet这个路径来访问该Servlet,当然你也可以改成/aaa,那么你就需要通过/aaa来访问你的这个Servlet了。
  • 2.还可以使用星号*匹配符来设置路径:
  • 斜杠(/)开头,以斜杠星(/*)结尾
    • 如:/* ; /a/*
  • 以星点后缀的方式(*.后缀)
    • .html ; .abc
      使用匹配的弊端是一个url导致被多个mapping所匹配。
  • 匹配符的优先级规则:
  • a.哪一个更接近更像更精准哪一个起作用。
  • b.*.后最的优先级永远是最低

    Servlet请求的中文乱码问题

  • 我们发现当用户通过表单向Servlet发送中文请求参数时,Servlet获取到的内容会产生乱码问题,其实乱码的根本原因就是编码格式不一。在这里我将GET请求和POST请求分开处理

  • GET请求:
//先获取表单中的数据
String username = request.getParameter("username");
// 将乱码格式的数据再反向转成字节,这里我们需要指定iso-8859-1
byte[] bytes = username.getBytes("iso-8859-1");
//然后把数据重新指定编码格式进行编码
username = new String(bytes , "utf-8");

-如果是POST请求,那么我们可以采用更简单的办法:

//直接告诉浏览器采用什么编码格式(POST提交方式可以告诉浏览器接收格式,GET不可以)
request.setCharacterEncoding("utf-8");//注意这句话需要放在获取数据之前
String username = request.getParameter("username");
//输出数据
....

猜你喜欢

转载自blog.csdn.net/weixin_42422694/article/details/81261721
今日推荐