1.servlet介绍
1.概念
servlet实际上就是一个接口
1.狭义上:servlet就是指servlet接口
2.广义上:凡是实现servlet接口的类,通常为servlet
2作用
1.接收用户发送的请求
2.调用其他java程序 来处理请求
3.根据出路结果,返回给用户一个页面
3.实现
1.创建一个类并实现servlet接口
2.在web.xml中进行配置
子主题 1
2.servlet的生命周期
1.servlet的生命周期,值servlet的对象从创建到被销毁的过程
2.Servlet的生命周期方法
1.构造器:
1.servlet第一次处理请求是,会调用构造器,来创建servlet实例。
2.构造器只会调用一次,servlet是单例模式,他是用多线程来调用service()方法----service()方法不是线程安全,所以尽力不要在service()方法中操作全局变量。
2.init()方法:构造器调用之后马上被调用,用来初始化servlet,只会调用一次
3.service()方法;servlet每次处理请求都会调用service()方法,用来处理请求
4.destroy()方法:servlet对象销毁前(web项目卸载是)调用,用来释放资源
3.servlet的注释
1.servlet3.0以后提供注解的方式去配置servlet
2.使用@WebServlet来配置servlet,
1.value
2.urlPatterns
loadOnStartup
4.http协议
1.概述
1
HTTP是Hyper Text Transfer Protocol的缩写,即超文本传输协议。
它是一种基于TCP/IP请求/响应式的协议,客户端在与服务器端建立连接后,
就可以向服务器端发送请求,这种请求被称作HTTP请求,
服务器端接收到请求后会做出响应,称为HTTP响应
HTTP专门用于定义浏览器与服务器之间交换数据的过程以及数据本身的格式
2.特点
1. 一次请求一次响应
2. 请求和请求之间是独立的,不能进行数据交换
3.是一种面向连接的无状态的协议,提高了响应的效率和安全性
3.组成部分
1.请求
2.响应
5.Request
1.概述:客户端在请求服务器的时候,服务器就会创建一个请求对象(Request对象),通过该对象就可以实现客户端和服务器之间的请求操作(客户端给服务端发送数据、服务端可以获取客户端发送的数据,通过该对象该可以获取请求消息)
2.产生和体系结构
1.产生:服务器(Tomcat)创建的
2.体系结构:
1.ServletRequest接口
2.HttpServletRequest接口继承了ServletRequest接口
3. RequestFacade类实现了HttpServletRequest接口
4注意:使用请求对象时,由tomcat创建了RequestFacade的对象
3.具体的作用
1.获取请求消息中的数据
1. 请求行
1.组成:请求方式 + URL + 协议
2.案例:GET localhost:8080/day02/hello?name=zhangsan HTTP/1.1
2方法:
1.String getMethod()获取请求方式(GET、POST、PUT)
2.String getQueryString()获取请求参数(name=zhangsan)
3.()String getRequestURI()获取请求的统一资源标识符(/day02/hello)
4.()StringBuffer getRequestURL()获取请求的统一资源定位符(localhost:8080/day02/hello)统一资源标识符比统一资源定位符的资源范围更广
5. ()String getServletPath()获取请求的Servlet路径(/hello)
6. String getProtocol()获取请求的协议(HTTP/1.1)
7.String getRemoteHost()获取请的IP和端口号(localhost:8080)
8.()String getContextPath()获取请求的虚拟路径(/day02)
2.请求头
1.String gerHeader(String name)通过请求头的键获取值
2.Enumeration getHeaderNames()获取所有请求头中的键
3.请求正文
1.BufferedReader getReader()获取字符输入流读取请求正文
2.InputStream getInputStream()获取字节输入流读取请求正文
2.其他功能(核心功能)
1.获取请求参数
1.请求参数:客户端发送给服务器的数据
2.方法:
1.String getParameter(String var1);通过键获取值
2. Enumeration getParameterNames();获取所有的键
3.String[] getParameterValues(String var1);通过键获取所由的值
4Map<String, String[]> getParameterMap();获取所有的键和值
5.注意:
1.获取参数的乱码问题:
1. get提交:tomcat8.0以后就对get请求的方式的乱码进行了处理
2. post提交:乱码,tomcat并未作出处理,需要调用request对象中的setCharacterEncoding(“编码”)来处理乱码
2.请求转发:一次请求在服务器内部的多次跳转的过程(服务器的行为)
1.步骤:
1.通过请求对象(request)来获取RequestDispatcher并指定跳转的资源
2.通过RequestDispatcher对象中的forward(req,resp)方法跳转
2.特点
1.一次请求(url地址不会发送改变,始终保持请求转发之前的URL)
2. 可以数据的共享(绑定到请求对象上的数据)
3.数据共享
作用域:数据可以被访问的区间(请求转发的资源之间)
方法:
1.void setAttribute(String var1, Object var2)将数据var2绑定到request请求对象上并取名为var1
2.void removeAttribute(String var1);将绑定在请求对象上的名字为var1的数据删除
3.Object getAttribute(String var1);获取绑定到请求对象上的名字为var1的数据
4.获取ServletContext对象 ServletContext servletContext = request.getServletContext();
4.获取ServletContext对象 ServletContext servletContext =request.getServletContext();
6.Response
1.概述:服务器在响应客户端的时候,服务器就会创建一个响应对象(Response对象),通过该对象就可以实现服务器和客户端之间的响应操作(服务端发送数据给客户端、客户端接收数据并显示,通过该对象该可以获取响应消息)
2.体系结构
1.ServletResponse接口
2. HttpServletResponse接口继承了ServletResponse接口
3.ResponseFacade类实现了HttpServletResponse接口
3功能
1设置响应内容
1.响应行
设置状态码 setStatus(int i)
2响应头
setHeader(String key,String value)
3.响应正文
1.获取字符输出流
2.获取字节输出流
response.getOutputStream()
4重定向特点
1. 两次请求
2. 地址栏会发生变化(相对于跳转之前的地址)
3. 不仅仅只是在服务器内部跳转
4. 重定向不能共享request对象中的数据
5.转发的特点
1. 一次请求
2. 地址栏不会发送改变
3. 只能在服务器内部跳转
4. 可以共享request对象中的数据
6.请阐述forward和redirect的区别?
7.路径问题
1.相对路径
规则:相对于当资源去定位到目标资源,不能定位到唯一的资源
2绝对路径
规则:是以/开头,可以通过绝对路径定位到唯一的资源;
8.ServletContext对象(web应用上下文对象)
1.概述:是一个web应用的上下文,一个web应用只有一个ServletContext对象
2.生命周期:伴随着Tomcat的启动该web应用的ServletContext对象就创建,Tomcat关闭该web应用的ServletContext对象就销毁,(一个web应用对应一个ServletContext对象)。
3.获取ServletContext的方式
1.request.getServletContext()
2.this.getServletContext()
4.功能
1.作用域(整个web应用):共享数据
1.Object getAttribute(String name) 从ServletContext对象上获取数据
2 void setAttribute(String name, Object object) 将数据绑定到ServletContext对象上
3.void removeAttribute(String name) 将数据从ServletContext对象上删除
4.注意:共享的数据可以在整个web应用被实现共享
5. 再次注意:因为作用域太大,慎用
2.获取MIME类型
String getMimeType(String file) 获取文件的MIME类型
3.获取服务器文件的真实路径
servletContext.getRealPath(FIlename str)该方法一般用于上传文件和下载文件时使用
9.会话
1.概述
1.概述:客户端和服务器多次请求和响应过程中共享数据的过程。
2,.原理
通过请求和响应来实现会话
3.实现
1.Cookie 客户端会话技术
2.Session 服务端会话技术
2.Cookie
1.概述:基于客户端浏览器会话的一种技术
2.原理:
1. setCookie:name=zhangsan 响应
2.Cookie:name=zhangsan 请求
3.使用
1.Cookie c1 = new Cookie(String name,String data);创建Cookie
2. response.addCookie(c1) 添加Cookie
3. request.getCookies() 获取Cookie
4Cookie可以存放多个吗?
可以,但是同一个域名(tomcat)下的Cookie数量是有限的,一般最多只能有20个Cookie
5.生命周期如何?
1.默认情况当浏览器关闭Cookie就销毁
2.其他情况需要是setMaxAge(int second)
1.正数:表示在浏览器中持久化多秒(关闭浏览器再打开也存在)
2.零:表示删除Cookie
3.负数:和默认情况一致
5.是否可以在同一个服务资源中跨应用访问
默认情况不可以,但是可以通过Cookie中的setPath()来设置
6.是否可以跨服务资源访问
默认情况不可以,但是可以通过Cookie中的setDomain()来设置
7.Cookie中是否可以存中文和特殊字符
1.在tomcat8以后的版本都是可以支持中文数据设置到Cookie的
2.特殊的字符不可以,可以使用URL编码进行发送,获取Cookie再进行URL解码
1. URLEncoder.encode(String str,String charset)编码
2.URLDecoder.decode(String str,String charset)解码
8.Cookie的特点
1. 存放在浏览器
2.一个Cookie最多存放4k的数据,同一个域名(tomcat)下的Cookie数量是有限的,一般最多只能有20个,因此存放数据量有限
3.不安全,一般用存放一些无关紧要的数据
9.Cookie使用案例(浏览记录、浏览时间
3.Session
1.概述:也是一种会话技术,基于服务端会话的技术,客户端和服务端之间多次请求和响应之间共享数据
2.入门开发
1.获取Session对象 request.getSession()
2. 绑定数据 session.setAttribute(String str,Object obj)
3. 从Session对象移除数据 session.removeAttribute(String str)
3. 原理
4.Session的细节
1.服务器不关闭,浏览器关闭,是否可以获取到session中的数据?
默认找不到,因为浏览器默认情况下关闭就会清空Cookie,那么在浏览器Cookie中的JSESSIONID也就没有了,没有JSESSIONID就找不到服务器中对应的Session
2.可以通过Cookie设置一下名字为JSESSIONID的Cookie的失效时间
3.服务器关闭,浏览器不关闭,是否可以获取session中的数据?
1.在IDEA中不行
2.当项目部署到Tomcat(tomcat8以后)中是可以继续访问之前的数据的
4.Session保持多久?
1.默认情况保持30分钟
2.可以在当前IDEA的此项目的web.xml中和tomcat下的config/web.xml中修改
3.可以通过session调用invalidate()方法立即销毁
5.特点
1.数据存放在服务器端,JSESSION的Cookie存放在浏览器
2.session可以存放大量数据
3.安全性高
jsp
1. 概述:JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。(动态网页的技术标准、可以处理客户端请求和对客户端进行响应,可以理解为一个特殊的HTML)
2.原理
1. JSP本质就是一个Servlet
2.访问JSP时,tomcat会将当前访问的xxx.jsp在tomcat内部创建一个类xxx_jsp.java,并将其编译为一个字节码文件
3. 脚本
1.<% 代码 %>小脚本
2.<%! 代码 %> 大脚本
3.<%=表达式 %>表达式
4.内置对象
1. pageContext
真实对象:pagecontext
作用:可以获取其他几个对象,绑定数据在jsp
2. page
真实对象:Object
作用:
3.application
真实对象:
作用:
4. out
真实对象:
作用:
5.response
真实对象:
作用:
6. request
真实对象:
作用:
7.session
真实对象:
作用:
8.exception
真实对象:
作用:
9.config
真实对象:servlet
作用:
5特点:
1.极大的简化了Servlet开发