首页
学习
活动
专区
工具
TVP
发布

B.Servlet配置信息及请求数据

Servlet技术概述

Servlet是特殊的Java类,只能运行在特定的Web容器之上。编写一个Servlet,就是按照Servlet规范编写一个Java类,实现Servlet规范中的特定接口,即Servlet接口。Web服务器要支持Servlet,也要实现Servlet规范定义的某些接口,如Request、Response、ServletConfig等。

Servlet的生命周期

Http

(无状态协议)

请求发送----------》服务器给出响应后,这时候你放大或缩小、关闭浏览器,服务器都不知道。

只要再次发送请求服务器才知道,所以问什么要做安全退出呢?

例如,登录一个邮箱后,说明此时在线。当看完一个信息后突然直接关掉浏览器,此时服务器并不知道你在线或者不在线,还是退出了(在一定的有效时间内它会认为你在线,因为刚才你在线了,你只是关掉了浏览器,所以它还是认为你在线),这样不安全。只有服务器确认你退出才算安全退出。

http请求

1)get请求:安全性低,只能传递文本数据,长度有限制

2)post请求:提交表单,并且form的method属性是post的时候才是post请求,其他情况都是get请求

Servlet

Servlet API类图

Servlet生命周期继承了HttpServlet

init方法:初始化Servlet,将来可以做一些初始化工作

servlet方法:处理请求,一般不需要去重写service方法,重写doGet、doPost方法即可,如果不重写service方法Servlet会根据请求时哪种类型直接调用(get请求则调用该doGet()方法,post请求则调用doPost()方法)

destory方法:暂且不用去管它。

注意:我们也可以直接继承GenericServlet不继承HttpServlet,HttpServlet本身就是GenericServlet的子类,提供了更丰富的方法,我们一般直接HttpServlet,生命周期中的三个核心方法都是GenericServlet的,HttpServlet已经进行了对它们的重写,service方法还有重载。我们直接用的时候直接继承HttpServlet即可,然后重写doGet、doPost方法,分别代表get请求和post请求。

其实不管get请求,还是post请求,处理方式类似,所以一般习惯在doGet()中调用一下doPost或在doPost()中调用一下doGet()

Servlet获取配置信息及请求数据

配置Servlet内部的参数

Servlet应在Web应用程序的配置文件web.xml中配置后,才可以由客户端请求、服务器加载运行,Servlet配置分为声明和映射两部分,配置标记和格式为:

1)定义描述信息

2)设置显示名称,在开发环境IDE或服务器中显示的名称,与一样,只是Servlet的一个说明信息。

3)设置Web应用程序启动时,该Servlet被服务器加载的先后顺序,值大于或等于零时有效,数值越小优先级越高。值小于0或者没有指定时,则在Servlet被请求调用时,服务器才会被加载。如果两个Servlet的设置值相同,则由服务器来选择加载的顺序

4)声明初始化参数,每个标签声明一个参数。其中的子标签

、分别用于声明初始化参数的名称、值、说明。是可选的。此处配置的参数可在Servlet的init()方法中获取。

5)定义Servlet的名称,可以是任何合法标识符,但声明与反射的名称必须一致。

6)设置Servlet对应的Java类,必须带包结构,不带class扩展名,包结构与源程序中的定义和类的放置目录应一致。

7)定义客户端请求Servlet时的url,必须以“/”开始,"/"代表Web应用程序根目录的url。

LifeServlet3类

init()无参数 init(ServletConfig)有参数的

编译器会默认调用有参数的init()方法

getInitParameter(name)返回名字为name的初始化参数的值,初始化参数在web.xml配置文件中进行配置。如果参数不存在,这个方法将返回null。

getServletName()返回Servlet实例的名字。这个名字是在web应用程序的部署描述符(配置文件)中指定的。如果是一个没有注册的Servlet实例,这个方法返回将是Servlet的类名。(以上类中只打印出了初始化参数的值)

控制台的打印、界面显示

ServletConfig类中包装了当前Servlet的配置信息

Servlet请求和响应

a.请求数据是封装在HttpServletRequest对象中的

响应数据是封装在HttpServletResponse对象中的

b.Servlet如何获取请求数据

请求数据如何提交给Servlet

如:表单action属性是访问Servlet的url

超链接href属性是访问Servlet的url(这个一定是get请求)

url用相对路径:相对于当前项目http://ip:port/项目名/

只要写url-pattern(/不需要)

url用绝对路径:相当于http://ip:port

写/项目名+urlpattern内容(需要/)

请求数据

获取请求数据

request.getParameter(请求的参数名称):是获得相应名的数据,如果有重复的名,则返回第一个的值 . 接收一般变量 ,如text类型

request.getParameterValues(String name)是获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkobx类型

超链接(地址栏)如何提交请求数据

get请求提交的数据会在地址栏中显示

post请求提交的数据地址栏中显示不出来,多个请求数据中间用&符号隔开

c.请求数据的中文问题

c.1 post请求提交中文 get请求请不要提交中文(也可以提交,不提倡)

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

RegisterServlet 类

regist.html

HrefServlet类

请求regist.html

点击注册控制台将数据打印到页面

点击“请求数据测试”(这是超链接请求的实现)

向上滑动

JavaStudyNotes公众号

only-you-sh

本公众号纯属于个人公益公众号,在这里有免费的各种IT资源

更多技术分享请加我微信,我拉你进群进行交流

长按右方二维码

关注我们

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180601A147Q700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券