Servlet
- 将每次的几个案例进行复习,自己手打;
eclipse小技巧
- 常用的view界面不是Project Exploere是Package Explorer;
- 缺少某个界面的时候可以在windows-show view中打开;
http
- Web的访问机制为请求响应机制,因此先介绍请求响应机制;
- http:要求:掌握一些头信息
- http:超文本传输协议
- 协议:规定数据的格式;
- 1、浏览器往服务器发送—请求
- 2、服务器往浏览器回写—响应
请求(request):
- 组成部分:请求行 请求头 请求体
- 格式:请求方式—-访问资源—-协议/版本
- GET /day0801/1.html HTTP/1.1
- 请求行:请求信息的第一行
- 请求方式:get和post
- get会把参数放在url的后面 post不会
- get参数大小有限制,post请求却没有限制
- get请求没有请求体;post请求有请求体,请求参数放在请求体中
- get请求没有post请求安全;
- 请求的版本我们都为1.1;
- 请求头:请求信息的第二行到结束
- 格式:key-value(value可以有多个值)
- 常见的请求头:
- Accept: text/html,image/*–支持数据类型text/html text/css text/javascript 大类型/小类型,mime类型
- Accept-Charset: ISO-8859-1 –字符集
- Accept-Encoding: gzip –支持压缩
- Accept-Language:zh-cn –语言环境
- Host: www.itcast.cn:80 –访问主机
- If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT –缓存文件的最后修改时间
- Referer: http://www.itcast.com/index.jsp –来自哪个页面、防盗链
- Cookie
- 。。。。
- 掌握的请求头:
- Referer User-Agent Cookie If-Modified-Since
- 请求体:空行以下的内容
- 只有post才有请求体 get请求参数 http://xxxx?username=tom&password=123
- 格式:username=tom&password=123,这个就是post的
响应(response)
- 组成部分:响应行 响应头 响应体
- 响应行:响应信息的第一行
- 格式:协议/版本 状态码 状态码说明
- 例如:HTTP/1.1 200 OK
- 状态码:
- 200 正常响应成功
- 302 重定向
- 304 读缓存
- 404 用户操作资源不存在
- 500 服务器内部异常,代码出问题了;
- 响应头:从响应信息的第二行到空行结束
- 格式:key/value(value可以是多个值)
- 常见的头:
- Location: http://www.it315.org/index.jsp –跳转方向 和302一起使用的
- Server:apache tomcat –服务器型号:不安全已经不显示了;
- Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT –最后修改时间,若有缓存,则不修改;
- Refresh: 1;url=http://www.it315.org –定时刷新
- Content-Disposition: attachment; filename=aaa.zip –下载
- Set-Cookie:SS=Q0=5Lb_nQ; path=/search★
- Expires: -1 –缓存
- Cache-Control: no-cache –缓存
- Pragma: no-cache –缓存
- Connection: Keep-Alive –连接
- 掌握的头信息
- Content-Type Location Last-Modified Refresh Content-Disposition Set-Cookie
- 响应体:空行以下的内容
- 页面上展示的内容,就是heml的内容;
Servlet
- 去找找怎么理解tomcat底层上是怎么实现的接收请求,和完成响应;
- 完成登陆案例(顺序)
- 表单
- servlet
- 请求(request)
- 响应(response)
- 表单:手机用户数据,提交字段教导服务器必须有那么属性,提交的地址action,请求方式:post
- servlet:动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序,
- 处理业务逻辑,生成动态web内容
- 编写servlet步骤:
- 1、编写一个类
- a、继承HttpServlet
- b、重写doGet或者doPost方法
- 2、编写配置文件(web-inf/web.xml)
- a.注册servlet
- b.绑定路径(把类和路径绑定了),直接可以选择类复制qualified name;
- 3、访问
- http://主机:端口号/项目名/路径
- 1、编写一个类
- 故障处理:如果没有在写代码时没有servlet的jar包,那我们需要在build path中添加config build path 然后选择library;
- 之所以没有导入,是因为创建工程时,没有指定外源的服务器的包;
- 配置文件的作用:我们在配置文件中相当于把我们的类名写出,那么服务器自动帮我们把这个类创造出来并适用了其中的方法。
- 这里指的服务器就是tomcat,它相当于自动编写的一段脚本语言,即软件服务器;
- xml中其实是将路径绑定到parttern里面的;
- 接收参数:key=value
- request.getParameter(“key”)
- 例如: http://localhost/day09/hello?username=tom
- request.getParameter(“username”)就可以获取tom值
- 回写内容:
- response.getWriter().print(“成功”);
- 处理响应数据中文乱码:
- resp.setContentType(”TEXT/HTML;charset=UTF-8”);
- 在设置javaEE的分层系统中,Dao层和Domain层较为重要些,是每个项目都需要的,其他的则根据不同项目特点要取不同的名字;
- domain层是每个程序的bean类;
- Dao层是对数据库进行的直接操作;
- 登陆案例步骤:
- 1.先有数据库和表
- 2.创建工程
- 3.复制页面
- 修改login.html
- 给用户名和密码添加name属性
- 修改表单的action属性 action=”http://localhost/day0901/login”
- 添加method属性 method=”post”
- 修改login.html
- 4.导入jar包:
- 5.导入工具类和配置文件
- DBUtils
- c3p0 配置文件;
- 6.创建servlet(LoginServlet: 路径 /login)
- 接受用户名和密码
- 调用service层(UserService)完成登录操作
- 提示信息
- 7.UserService
- login(username,password) 调用dao
- 8.dao(对数据库进行直接操作)
- 通过用户名和密码查询数据库
- serlvet总结:
- servlet常用方法:
- void init(ServletConfig config):初始化
- void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
- void destroy():销毁
- ServletConfig getServletConfig() :获取当前servlet的配置对象
- GenericServlet常用方法:
- 除了service方法没有显示,其他都实现了
- 空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可。
- HttpServlet常用方法:
- service做了实现,把参数强转,调用了重载的service方法
- 重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法,相当于不用自己在选择doXX了。
- service方法会自动判断什么属性,然后进行选择;
- 两个service方法,是个很巧妙的方法;
- doGet和doPost方法
- service做了实现,把参数强转,调用了重载的service方法
- servlet常用方法:
- servlet生命周期 ★★★
- void init(ServletConfig config):初始化
- 初始化方法
- 执行者:服务器
- 执行次数:一次
- 执行时机:默认第一次访问的时候
- void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
- 服务
- 执行者:服务器
- 执行次数:请求一次执行一次
- 执行时机:请求来的时候
- void destroy():销毁
- 销毁
- 执行者:服务器
- 执行次数:只执行一次
- 执行时机:当servlet被移除的时候或者服务器正常关闭的时候
- serlvet是单实例多线程
- 默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
- 每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
- 当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.
- 也就是说,servlet其实也就是着三个方法的使用,因此其生命周期,也就是这三个方法的产生和使用过程;
- void init(ServletConfig config):初始化
- 在servlet标签有一个子标签 load-on-startup
- 作用:用来修改servlet的初始化时机
- 取值:正整数 值越大优先级越低
- 当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml,
- 若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息
- 有响应信息,但是并没有指定的页面
- 因此,并不是每个网页的404长的都是一样的;
- tomcat中也有一个配置文件,和工程的配置文件权限差不多;
- dynamic如果选择3.0的话是没有配置文件的;
url-pattern的配置:★
-
- 暂时不清楚
-
路径的写法:
- 相对路径:当前路径 ./ 或者 什么都不写
- 上一级路径 ../
- 绝对路径:(我们使用)
- 带主机和协议的绝对路径(访问站外资源)http://www.itheima.com/xxxx
- 不带主机和协议的绝对路径:/day09/hello(经常使用)
- 相对路径:当前路径 ./ 或者 什么都不写
- 常见的响应头–refresh
- 响应头格式:refresh::秒数;erl=跳转的路径
- 设置响应头:
- response.setHeader(String key,String value);设置字符串形式的响应头;
- response.addHeader(String key,String value);追加响应头,若设置过头则追加,若没有则设置;
- 设置定时刷新:response.setHeader(“refresh”,”3;url=/day0901/login.htm”);
- ServletContext:上下文(全局管理者)
- 常用的方法:
- setAttribute(String key,Object value);//设置值
- Object getAttribute(String key);//获取值
- removeAttribute(String key)://移除值
- 获取全局管理者:getServletContext():
- 常用的方法:
- 在复制黏贴中,需要把web root改成新的项目;
- ServletConfig:(了解)servlet配置对象
- 作用:
- 1.获取当前servlet的名称
- 2.获取当前servlet的初始化参数
- 3.获取全局管理者
- 方法:
- String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)
- String getInitParameter(String key):通过名称获取指定的参数值
- Enumeration getInitParameterNames() :获取所有的参数名称
- 初始化参数是放在 web.xml文件
- servlet标签下子标签 init-param
- enumeration是哪个集合里面的?
- ★getServletContext():获取全局管理者,讲config是为了这个;
- servletconfig是由服务器创建的,在创建servlet的同时也创建了它,通过servlet的init;
- (ServletConfig config)将config对象传递给servlet,由servlet的getServletConfig方法获取;
- 作用:
- ServletContext:理解-上下文(全局管理者)
- 一个项目的引用.代表了当前项目.
- 当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
- 当项目被移除的时候或者服务器关闭的时候servletcontext销毁
- 作用:
- 1.获取全局的初始化参数
- 2.共享资源(xxxAttribute),即不同的servlet可以利用参数进行通信了;
- 3.获取文件资源
- 4.其他操作
- 获取servletcontext:
- 方式1:了解 -getServletConfig().getServletContext();源码的得到方式;
- 方式2:getServletContext()
- 常用方法:
- 1.了解String getInitParameter(String key):通过名称获取指定的参数值
- Enumeration getInitParameterNames() :获取所有的参数名称
- 在根标签下有一个 context-param子标签 用来存放初始化参数
- 2.xxxAttribute
- 3.String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
- getRealPath(“/”):D:\javaTools\apache-tomcat-7.0.52\webapps\day09\
- InputStream getResourceAsStream(String path):以流的形式返回一个文件
- 4.获取文件的mime类型 大类型/小类型
- String getMimeType(String 文件名称)
- 1.了解String getInitParameter(String key):通过名称获取指定的参数值
- 域对象:★★★servletcontext创建的;
- 当成map集合
- 常用方法:xxxAttribute()
- servletcontext创建和销毁:
- 当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
- 当项目被移除的时候或者服务器关闭的时候servletcontext销毁
- 存放:共享的数据
- 这是一个servlet互相通信的媒介;
- 获取文件的路径:
- 通过类加载器获取文件:2.txt 放在classes目录下无论是java项目还是web项目都可以
- 类.class.getClassLoader().getResource(“2.txt”).getPath()
- 这个方法获取目录更加万金油;
- 通过类加载器获取文件:2.txt 放在classes目录下无论是java项目还是web项目都可以