黑马程序员技术交流社区
标题: 【石家庄校区】这是第六篇学习笔记 [打印本页]
作者: 空降的蛙崽 时间: 2018-5-21 15:04
标题: 【石家庄校区】这是第六篇学习笔记
本帖最后由 小石姐姐 于 2018-5-23 15:26 编辑
servlet,servletContext, Cookies,JSP,Session,EL,JSTL总结
Servlet
Servlet的生命周期(面试点):
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行,任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法,在service方法内部根据请求的方式不同调用doXXX的方法(get请求调用doGet,post请求调用doPost) 当Servlet从服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destory方法就会执行.
Servlet的相关配置创建时启动Servlet
Servlet默认是在第一次访问的时候创建的,现在让Servlet在服务器启动的时候创建好,进行对servlet的配置
在web.xml中在< servlet></servlet> 标签中设置
//背后思想有一些资源需要初始化很耗时,第一次访问的时候初始化资源(耗时)以后访问都不需要在初始化,把这个耗时的操作放到服务器启动的时候
url-pattern的配置完全路径匹配以/开始
目录匹配以/开始,*结束
扩展名匹配不能以/开始,以*开头
完全路径匹配 > 目录 > 扩展名
开发中路径的编写
相对路径:都是需要找位置相对关系以/开始
绝对路径分为客户端路径和服务器端路径
ServletContextServletContext 的作用?
1 用来获得全局初始化参数
2 用来获得文件的MIME的类型
3 作为域对象存取数据
4 用来读取WEB项目下的文件
存: setAttribute(String name, Object value);
取: Object getAttribute(String name);
删: removeAttribute(String name);
ServletContext是一个域对象,作用范围是整个WEB工程
创建: 服务器启动的时候,tomcat服务器为每个WEB项目创建一个单独ServletContext对象
销毁: 服务器关闭的时候,或者项目从服务器中移除的时候
使用ServletContext对象读取WEB项目下的文件1 有servlet的环境下
InoutStream getResourceAsStream(路径) 返回的是inputstream
String getRealPath(路径)
条件: 拿到servletContext对象
2没有servlet的环境
用类加载器去读取文件
InputStream is = 当前类的类名.class.getClassLoader().getResourceAsStream(String name);
Response的概述响应行:setStatus(int sc)
响应头:Response设置响应头
针对一个key对应多个value的头信息
addDateHeader( String name, long date)
addHeader(string name,String value)
addIntHeader(String name, Int value)
针对一个key对应一个value的头信息
setDateHeader(String name, long date)
setHeader(String name, String value)
setIntHeader(String name, int value)
响应体:getOutputStream()
getWrite()
文件下载的方式把一个文件从服务器读取,写到客户端
手动编码方式完成文件下载.
设置两个头和一个流:
Content-Type:文件MIME的类型.
Content-Dispostion:"attachment;filename = "+filename;"
文件的输入流:
文件下载的核心思想: io 读/写
InputStream in = new FileInputStream("服务器上的路径");
OutputStream os = response.getOutputStream();
输出中文乱码的处理:字节流:设置浏览器默认打开的时候采用的字符集编码
response.setCharacterEncoding("Content-Type","text/html;charset = UTF-8");
设置中文字节取出时候的编码
"中文".getBytes()
Request的概述:
Request代表用户的请求
Request的API客户端信息获得请求方式request.getMethod( )
获得请求路径:request.getRequestURI()
request.getRequestURL()
获得客户机相关的信息(IP地址):request.getRemoteAddr()
获得工程名:request.getContextPath( )
获得表单数据: String [] request.getParamemterValues(String name);
String request.getParameter(String name);
Map<String,String[]> request.getParameterMap();
请求乱码的解决post: request.setCharacterEncoding("UTF-8"); 一定要在接收参数之前设置编码
get: new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UFT-8");
Request作为域对象存取数据removeAttribute(String name);
setAttribute(String name, Object value);
Object getAttribute(String name);
request的作用范围:作用范围就是一次请求的范围
创建和销毁
创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request对象
销毁:当服务器对这次请求做出了响应之后.
转发和重定向的区别(面试点)重定向:response.sendRedirect("带有工程名的路径");
转发: request.getRequestDispatcher("不带工程名的路径").forward(request,response);
区别?1 重定向的地址栏会发生变化,而转发的不变
2 重定向两次请求两次响应,转发一次请求一次响应
如果给request域中存放了数据:转发能够获得到数据,重定向不能获得到数据
3 重定向路径需要加工程名,转发不需要
4 重定向可以跳转到任意的网站,转发只能在当前项目下进行转发
COOKIE会话技术:什么是会话?
用户打开一个浏览器访问页面,访问网页的很多页面,访问完成后浏览器关闭的过程,称为是一次会话
常见的会话技术有cookie和session
cookie: 将数据保存到客户端浏览器
session: 将数据保存到服务器端
cookie技术的使用向浏览器保存数据:
HttpServletResponse有一个方法: request.addCookie(Cookie cookie);
获得浏览器带过来的cookie
HttpServletRequest有一个方法 Cookie[]cookie = request.getCookies();
JSP的简单概述什么是JSP?
JSP Java Server Pages(Java服务器端页面)
JSP = Java代码+HTML元素+JSP内置东西
JSP的嵌入JAVA代码:JSP的脚本元素
声明:< %! %> :会被翻译成类中的成员部分,可以定义类,方法,变量
Servlet是线程不安全的,尽量少在类中定义成员属性
代码块: < % % > : 翻译成类的servlce方法内部的内容,定义变量,类,直接写代码块
表达式: <%= %> : 翻译成service方法内部的out.print();
cookie的常用APIgetName()
getValue()
setDomain(String domain) : 设置cookie的有效域名
setPath(String path) : 设置cookie的有效路径
setMaxAge(int maxAge) : 设置cookie的有效时间
cookie的分类:
会话级别的cookie: 默认的cookie,关闭浏览器cookie会销毁
持久级别的cookie: 可以设置cookie的有效时间,关闭浏览器cookie还会存在,可以手动销毁持久性cookie.setAge(0) ---- 前提是有效路径必须一致
cookie存储中文必须编码,URLEncoder 解码 URLDecoder
JSP的注释HTML的注释<!-- -->: 存在JSP源码中,翻译后的servlet中,生成JSP后,注释就消失了
JAVA代码的注释: // 单行注释 /**/ 多行注释
/** */ 文档注释 : 存在于JSP源码中,翻译成servlet后注释也存在,但是执行完HTML后消失
JSP自身的注释" <%-- --%> : 只存在于JSP的源码中,翻译成servlet后,JSP的注释就消失了
JSP的指令全局错误页面的 error-page
JSP的内置对象(重要)
request :HttpServletRequst
response :HttpServletResponse
session :HttpSession
application :ServletContext
page :Object
pageContext :PageContext
config :ServletConfig
out :JspWrite
exception :Throwable
pageContext内置对象(面试点)通过getXXX获得其他的8个内置对象:编写通用性代码或框架的时候
存取数据: 代替其他三个域,往其他三个域中存取数据
向JSP的四个域中存取数据(从小到大)
pageScore :当前页面有效 pageContext pageContext
RequestScore :一次请求范围 request HttpServletRequest
SessionScope :一次会话范围 session HttpSession
ApplicationScore :应用范围 application ServletContext
JSP的动作标签< jsp:forward page = "">< jap:forword/> :用于页面转发
< jsp:include page ="">< jsp:forward/> :用于页面包含(动态包含)
静态包含和动态包含的区别?(面试点)静态包含:相当于源代码的拷贝,只会翻译成一个java类,有一个执行结果
动态包含:各自分别去翻译,各自执行,最终包含的是执行的结果
< jsp:param/> :用于带有路径的标签,传递参数
< jsp:useBean/> :用于在JSP中使用JavaBean
< jsp:setProperty/> :用于在JSP中向JavaBean设置属性的
< jsp:getProperty/> :用于在JSP中获得JavaBean的属性
Sessioncookie本身是有大小和个数的限制,session没有限制
cookie的数据保存在客户端,session数据保存在服务器端
session的执行原理是基于cookie的
获得session HTTPSession session = request.getSussion():
session.setAttribute(String name,Object value);
Object value = session.getAttribute(String name);
removeAttribute(String name);
session是域对象
session何时创建?何时销毁?作用范围?
创建:服务器端第一次调用getsession()时创建session
销毁:三种情况才能销毁session
1 session过期: 默认过期时间为30分钟
2 非正常关闭服务器,如果正常关闭session序列化硬盘
3 手动调用session.invalidate();
作用范围: 多次请求(一次会话)根本原因:存sessionid的cookie默认是会话级别
session保存的数据,不管转发还是重定向都可以访问到
EL表达式语法: ${EL表达式}
功能:获取数据(JSP的四个域)
数组 :${数组名[下标]}
集合 :${列表名[下标]}
MAP集合 :${集合名.id}
. 和 [ ]的区别?
[ ] 是用于有下表的数据(数组,list集合)
. 用于有属性的数据(map,对象)
获得对象的数据:
User user = new User(1,"aaa","123");
pageContext.setAttribute("user",user)
${user.id}
${user.username}
${user.password}
获得对象的集合的数据
User user1 = new User(1."aaa","123");
User user2 = new User(2."bbb","123");
User user3 = new User(3."ccc","123");
List<User> userList = new ArrayList<User>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
pageContext.setAttribute("userList",userList);
$ { userList[0].id } - ${userList[0].username } - ${userList[0].password } <br/>
$ { userList[1].id } - ${userList[1].username } - ${userList[1].password } <br/>
$ { userList[2].id } - ${userList[2].username } - ${userList[2].password } <br/> 执行运算逻辑运算: + - * /
关系运算: && || !
三元运算:${n1 < n2 ?"正确":"错误"};
empty运算: ${user == null}
${empty user}
操作WEB开发的常用对象pageScope,requestScope,sessionScope,applicationScope ---获取JSP中域里边的数据
param, paramValues ---接收参数 {$ param.id} {$ param.name} ${paramValue.hobby[0]} ${paramValue.hobby[1]}
header, headerValues ---获取请求头信息${header["User-Agent"]}
InitParam ---获取全局初始化参数${initParam.username}
cookie --- WEB开发中的cookie${cookie.history.value} //名称叫history的值
pageContext ---WEB开发中的pageContextIP地址: ${pageContext.request.remoteAddr}工程地址: ${pageContext.request.contextPath}
JSTL标签中的判断<c:if test="${}"> test:如果test返回true,标签内的内容就会被输出< /c:if>if标签没有else,如果想表达else的情况,从条件着手
JSTL标签中的遍历
<c:forEach var="" items="" varStatus="status"> status.index status.count< /c:forEach><c:forEach var="" begin="" end="" step="" varStatus="status">< /c:forEach>
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |