本帖最后由 小石姐姐 于 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>
|