新手上路之 HttpServlet和常用对象 笔记

来源:互联网 发布:天地诸神光翼进阶数据 编辑:程序博客网 时间:2024/06/05 21:55

回顾:
B/S架构:浏览器(客户端)/服务器(Tomcat->服务器)
服务器:
统一管理请求,请分发, 响应
HTTP协议:保障客户端和服务器端的通信质量
Servlet:服务器端小程序,写在后台,运行在服务器端

实现自己的Servlet类(才能够被服务器所调用,所管理)
1、java类
2、继承HttpServlet类 , Servlet接口发展下来
3、service用来处理请求(获取请求的数据)和给出响应数据,HttpServletRequest, HttpServletResponse
4、配置web.xml 用来映射, 请求路径和真实的servlet对象
说明:web.xml会在项目启动的时候加载,读取web.xml的内容

Servlet生命周期(了解)

Servlet的生命周期:借助生命周期方法来推断servlet的生命, 随着servelt的生命迹象来由服务器自动调用的

init -> 初始化
service -> 服务
destroy -> 消亡

出生(初始化):默认情况第一次访问某个servlet,该servlet会被初始化(一次)单例
活动,提供服务:每次请求某个servlet的时候,都会有活动迹象(会执行多次)
死亡(销毁):服务器关闭时,servlet会被销毁(一次)

处理tomcat没有或者不匹配的情况:
servlet的配置(一定要会的)

欢迎界面
项目的默认欢迎界面: http://ip:8080/站点名
基本配置(多级目录重点):

自启动配置:

通配符(重点):

直接新建Servlet: 可以自动生成web.xml中的配置

servlet的配置, html文件的放置, 服务器中规划  能够正确存放的资源,怎么存以及怎么在地址栏中输入路径访问

服务器怎么处理(接收)请求
1、找到对应的文件(html,servlet)
2、如果是servlet还需要确定方法的调用
service , doGet, doPost

发送请求:
1、地址栏直接输入 get
2、form表单 method  get post
3、超链接 get

区分请求方式并且调用对应的方法:
如果有service存在, 那么就执行service
如果没有service存在, 那么必须存在对应的get或者post方法

请求路径问题 (重点):

相对路径:
绝对路径:

form表单:
servlet
Servlet01: /s01
Servlet02: /xx/s02

相对路径:相对于当前资源本身
1、写法 (前面不带/)
2、相对的位置(当前资源的位置)
html01:
form
http://localhost:8080/servlet
相对路径 action= “s01” aciotn=” xx/s02”
html/html01:
form
http://localhost:8080/servlet/html
相对路径 action=” ../s01” aciton=”../ xx/s02”

超链接
1、写法 (前面不带/)
2、相对的位置(当前资源的位置)

绝对路径:
1、写法: 路径前面/ , http://
2、[客户端绝对路径]相对的位置(相对于8080, 端口后面,说到底还是相对路径)

form表单:
servlet
Servlet01: /s01
Servlet02: /xx/s02

1、写法 (前面不带/)
2、相对的位置(相对于8080, 端口后面) / 就相当于 http://localhost:8080
html01:
form
绝对路径 action= “/servlet/s01” aciotn=” /xx/ servlet/s02”
html/html01:
form
绝对路径 action=” / servlet/s01” aciton=”/ xx/ servlet/s02”

超链接绝对路径:
在本机的绝对
http://ip地址/XXX”>绝对的绝对

常用对象:
HttpServletReqeust: 一切请求数据的对象,通过该对象可以获取请求数据,客户端信息,乱码处理

例子:防盗链(请求头,referer) referer: 来自哪里
请求头: request, getHeader()

我的后台资源只能是内部人员(直接在地址栏输入地址的人)或者看过我的广告的人(myhtml.html过来的人)能够获取。 其他地方来的人, 不允许获取的

例子:利用站点名回到当前站点

例子:获取表单验证(注册)
例子:乱码处理
登录例子:
前台输入用户名和密码登录
用户名: 刘思思, 123

在从前台传入中文到服务器时, get方式, 不需要操心(jdk1.8及其以后, 是不会出现乱码的),post遇到中文就会乱码
post解决方式:
1、
// UTF-8
// ISO-8859-1去解析, 不支持中文, 一定乱码
// 以UTF-8的编码格式来解析
//request.setCharacterEncoding(“UTF-8”); 如果使用该句话来决绝乱码,则必须写在获取数据之前,最好是第一行,此处的UTF-8根据页面传输时的编码格式而来

2、
new String(name.getBytes(“ISO-8859-1”),”UTF-8”);
该方法只能使用在post方式上,如果对jdk1.8及其以后的服务器使用,则变成了画蛇添足,本来不乱码,那也乱码了

请求转发
以前在服务器收到请求(servlet)的时候,如果想要响应数据回客户端,到目前为止, 都会使用response.getWriter(), response.getOutputStream(), 获取输出流去响应数据,这种麻烦。现在可以使用请求转发来处理。
// 相对路径
// [服务器端]绝对路径 http://localhost:8080/servlet04

客户端跳转: 地址栏会发生改变
服务器端跳转: 地址栏是不会改变的
相对路径是一样的
绝对路径: 客户端绝对到(http://localhost:8080), 服务器端(http://localhost:8080/站点名)

request做为域对象 setAttribute(String, Object); Object getAttribute(String)

比较 getAttribute(),getParameter()
空间不一样,导致了两者获取数据的来源不同:
getAttribute  只能获取域对象中的数据;数据是Object对象,是所有的数据对象
getParameter  只能获取请求参数中的数据;数据全都是字符串

原创粉丝点击