JavaWeb 02_servlet基础

 

1. servlet是什么?作用?

1) Servlet 是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案I而具体的Servlet容器负责提供标准的实现。
2] Servlet 作为服务器端的一个组件, 它的本意是“服务器端的小程序”。Servlet 的实例对象由Servlet容器负责创建; Servlet的方法由容器在特定情况下调用; Servlet容器会在Web应用卸载时销毁Servlet 对象的实例。
3)简单可以理解为 Servlet 就是用来处理客户端的请求的.。

 

<!--配置LoginServlet :配置LoginServlet与处理的请求的映射.
客户端请求匹配的过程:
与<ser1vet-mapping>中的< ur1- pattern>进行匹配,匹配到以后, 再找到< serv1et -mapping>
中的<servlet-name>的值,再拿上该值到sservlet >节点中匹配相同的<servlet - name>,进而
找到<servlet-class>.
Tomcat通过反射的方式创建LoginServlet的实例,根据具体的请求方式调用对应的doGet或者是doPost方法.

-->

 

 

  是一个运行在服务器端(web容器)中的一个类,要web容器调用(规定servlet必须提供一个service方法)如何规定servlet有service方法?servlet必须实现servlet接口,所继承的HttpServlet类实现servlet接口。

  实现一个servlet可以基础自HttpServlet这个类,也可以直接实现servlet接口。提倡用继承的方式更简化编码。

@WebServlet(name = "helloServlet", value = "/hello-servlet")

这个注解是帮助把URL地址解析成对应的servlet的

 

HttpServletRequest: 代表客户端请求数据对象     为ServletRequest的子集

HttpServletResponse: 代表服务端的响应数据对象      为ServletResponse的子集

     resp.setContentType("text/html");

  

1] HttpServletRequest
①该接口是ServletRequest接口的子接口,封装了HTTP请求的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest reg, ServletResponse res)方法中。以下我们所说的HtpServletRequest. 对象指的是容器提供的HttpServletRequest.实现类对象。
②HttpServletRequest 对象的主要功能有

  获取请求参数
  在请求域中绑定数据
  将请求转发给另外一个URL地址[转发]。

2] [ HittpServletResponse]
①该接口是ServletResponse接口的子接口,封装了HTTP响应的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest reg, ServletResponse res)方法中。以下我们所说的HttpServletResponse. 对象指的是容器提供的
HttpSservletResponse.实现类对象
②主要功能
  使用PrintWriter,对象向浏览器输出数据
  实现请求的重定向重定向

2. 乱码

字符存储时以二进制格式表示,字符和二进制的对应关系就是编码。不同的文字有不同的编码。

由于现在的request属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认
使用的编码方式为ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设
置request中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码
格式还原。

 

 

3. 判断用户是已经登录的用户?
     web协议是无连接协议(请求--- 建立连接----响应---关闭连接)

每个用户建立一个会员信息 Session 

Request.getSession();  如果已经有会员了,就返回会员信息,没有则新建一个会员信息

Session.serAttribute();  登记会员信息

Session.getAttribute();  读取会员信息

 

4.加密

数据密码字段不能存明码,要加密

非对称加密/对称加密

对称加密:加密秘钥和解密秘钥是一样的

 

 

5. Servlet的生命周期

Servlet没有main(方法,不能独立运行,它的运行完全由Servlet引擎来控制和调度。所谓生命周期,指的
是servlet容器何时创建servlet实例、何时调用其方法进行请求的处理、何时并销毁其实例的整个过程。
●实例和初始化时机
当请求到达容器时,容器查找该servlet对象是否存在,如果不存在,则会创建实例并进行初始化。
●就绪/调用/服务阶段
有请求到达容器,容器调用servlet对象的service()方法,处理请求的方法在整个生命周期中可以被多次调用;
HttpServlet的service()方法,会依据请求方式来调用doGet)或者doPost()方法。但是,这两个do方法默
认情况下,会抛出异常,需要子类去override.
●销毁时机
当容器关闭时(应用程序停止时),会将程序中的Servlet实例进行销毁。
上述的生命周期可以通过Servlet中的生命周期方法来观察。在Servlet中有三个生命周期方法,不由用户手
动调用,而是在特定的时机有容器自动调用,观察这三个生命周期方法即可观察到Servlet的生命周期。

 

init方法,在Servlet实例创建之后执行(证明该Servlet有实例创建了)

初始化方法
系统方法,服务器自动调用
当请求到这Servlet容器时,ServLet 容器会判断该Servlet对象是否存在,如果不存在,则创建实例并初始化
方法只会执行一次

 

 

 

service方法,每次有请求到达某个Servlet方法时执行,用来处理请求(证明该Servlet 进行服务了)

就绪/服务方法(处理请求数据)
系统方法,服务器自动调用
当有请求到达Servlet时,就会调用该方法
方法可以被多次调用

 

 

destroy方法,Servlet 实例销毁时执行(证明该Servlet的实例被销毁了)

系统方法,服务器自动调用
当服务器关闭或应用程序停止时,调用该方法
方法只会执行一次

 

 

Servlet的生命周期,简单的概括这就分为四步: servlet 类加载-->实例化-->服务-->销毁。
下面我们描述一下 Tomcat与Servlet是如何工作的,看看下面的时序图:

 

 

  1. Web Client向Servlet容器(Tomcat) 发出Http请求
  2. Servlet容器接收Web Client的请求
  3. Servlet 容器创建一个HttpServletRequest 对象,将Web Client请求的信息封装到这个对象中
  4. Servlet容器创建一个HttpServletResponse对象
  5. Servlet容器调HttpServlet对象service方法,把Request与Response作为参数,传给HttpServlet
  6. HttpServlet调用HttpServletRequest 对象的有关方法,获取Http请求信息

6. HttpServletRequest对象

    HttpServletRequest对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头
信息等都属于客户端发来的信息,service()方法中形 参接收的是HttpServletRequest接口的实例化对象,表示该
对象主要应用在TTP协议上,该对象是由Tomcat封装好传递过来。
 

   HttpServletRequest是ServletRequest的子接口, ServletRequest 只有一个子接口, 就是HttpServletRequest。既然只有一个子接口为什么不将两个接口合并为-一个?

从长远.上讲:现在主要用的协议是HTTP协议,但以后可能出现更多新的协议。若以后想要支持这种新协
议,只需要直接继承ServletRequest接口就行了。
在HttpServletRequest接口中,定义的方法很多,但都是围绕接收客户端参数的。但是怎么拿到该对象呢?
不需要,直接在Service方法中由容器传入过来,而我们需要做的就是取出对象中的数据,进行分析、处理。

 

6.1.接收请求
6.1.1.常用方法
  1.方法
getRequestURL()      获取客户端发出请求时的完整URL

getRequestURI)  获取请求行中的资源名称部分(项目名称开始)

getQuerytring()   获取请求行中的参数部分
getMethod()   获取客户端请求方式
getProtocol()  获取HTTP版本号
getContextPath()  获取webapp名字

 

 

6.1.2.获取请求参数

1.方法
getParameter(name)
获取指定名称的参数
getParameterValues(String name)
获取指定名称参数的所有值


2.示例

//获取指定名称的参数,返回字符串
String uname = request . getParameter("uname");
System. out. print1n("uname的参数值: " + uname) ;
//获取指定名称参数的所有参数值,返回数组
string[] hobbys = request. getParametervalues("hobby");
Sys tem. out. print1n("获取指定名称参数的所有参数值: " + Arrays . tostring(hobbys))

 

posted @ 2021-09-27 19:38  OYそ  阅读(27)  评论(0编辑  收藏  举报