A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 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的配置
完全路径匹配以/开始
目录匹配以/开始,*结束
扩展名匹配不能以/开始,以*开头
完全路径匹配 > 目录 > 扩展名
开发中路径的编写
相对路径:都是需要找位置相对关系以/开始
绝对路径分为客户端路径和服务器端路径
ServletContext
ServletContext 的作用?
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的常用API
getName()
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的属性
Session
cookie本身是有大小和个数的限制,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>

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马