zoukankan      html  css  js  c++  java
  • web入门学习总结

    web学习

    Servlet总结:
    运行在服务器端Java程序(或者简说为一个Java类),是javaweb的三大组件之一(Servlet、Filter、Listener)
    需要掌握Servlet中的doGet和doPost方法,其他直接继承httpservlet中的service方法即可。

    内容:
    项目方法:
    getServletConfig();------------------------------获取配置对象
    getServletContext();-----------------------------获取项目的上下文(全局管理者)ServletContext对象
    上下文对象ServletContext的方法(作用):
    getAttribute("**");------------------------------获取指定键的值
    setAttribute("**","**")--------------------------为指定键赋值
    removeAttribute("**")----------------------------移除值
    getMimeType(文件名)------------------------------获取文件的mime类型
    getResourceAsInputStream("文件的getRealpath路径");------获取指定服务器文件的输入流
    getInitParameter("key");-------------------------获取全局初始化参数(框架用)
    getRealpath("***")-------------------------------获取指定项目路径

    response(封装了响应信息的对象)方法:
    响应行:
    setStatus(状态码);
    响应头:
    ★setHeader(String key,String value)-------------设置字符串形式的响应头
    常用头:<1.content-type(设置文件的mime类型,并通知浏览器用什么编码打开)
    例:response.setHeader("content-type","text/html;charset=utf-8");
    <2.location(重定向,需要配合状态码使用)
    例:response.setStatus(302);
    response.setHeader("location","/day01/helloServlet");
    <3.content-disposition(文件下载专用头)
    例:response.setHeader("content-disposition","attachment;filename="+love.jpg);
    ★对应升级版
    <1.setContentType("**");
    例:response.setContentType("text/html;charset=utf-8");
    response.setContentType(mimeType);
    <2.sendRedirect("url");
    例:response.senRedirect("/day01/helloServlet");
    相应体:
    常用方法:
    getWriter();-------------------------------------字符流(常用于页面网页显示)
    getOutputStream();-------------------------------字节流(常用于文件下载)


    request(封装了请求信息的对象)方法:
    ★getRequestDispatcher("servlet路径")------------获取请求转发对象
    setAttribute();----------------------------------设置属性,封装值
    getAttribute();----------------------------------获取属性值
    请求行:
    ★getContextPath()-------------------------------获取当前项目的根目录项目名(/day01)
    getMethod()--------------------------------------获取http请求方式
    getRemoteAdd-------------------------------------获取客户端的IP
    请求头:
    (使用String getHeader(String key))
    ★referer----------------------------------------获取当前用户使用什么浏览器(防盗链)
    ★user-agent-------------------------------------获取当前页面的上一个页面地址,若没有则为null(下载)
    请求体:
    (存放post请求的请求参数)
    ★Map<String,String[]>getParameterMap()----------获取表单的所有提交信息(配合BeanUtils超级好用)
    ★String getParameter(String name)---------------单一的值
    ★String[] getParameterValues(String name)-------多个值(CheckBox专用)


    会话技术:
    cookie:
    (服务器手动)创建:
    Cookie cookie = new Cookie("cookieName","cookieValue");
    传递:
    response.addCookie(cookie);
    获取(常用API):
    getCookies();-->名称遍历cookie.getName()-->值判断cookie.getValue()
    浏览器(自动):接受cookie-->保存cookie(存在key值覆盖)-->传递cookie

    注:
    <1.cookie的键值对只能是字符串,其setMaxAge(*)可设置会话级别,-1默认浏览器开启,0立即过期,>0单位为秒的时间
    <2.cookie保存是有限制的,value最多保存4kb内容,不能想cookie中存储大数据,一个网站一个项目最多向一个浏览器保存30个cookie(建议)
    <3.cookie不仅仅是javaee技术,还是asp,php,android的技术,因为cookie是http协议指定
    <4.cookie不能直接存储中文,不过可以编码存储(张三---urlencode---utf-8---cookie---urldecode---张三)
    <5.cookie的有效路径,在当前项目下,setPath()可进行设置

    session:
    (保存在服务器端的会话技术)
    创建:
    HttpSession session=request.getSession();
    赋值:
    session.setattribute(key,value);
    获取:
    session.getAttribute(key);

    其他API:session.getId()--------------------返回session的jsessionid
    session.invalidate()---------------主动销毁session对象

    注:session(私有),request(公有),servletContext(公有)为三大域对象,而cookie不是域对象,因为他没有setXxx和getXxx
    session底层依赖cookie

    面试重点:

    生命周期:

    cookie:
    默认:会话级别cookie,浏览器与服务器建立会话开启,直到浏览器关闭cookie销毁
    设置:持久化级别,setMaxAge(秒),不论浏览器开启还是关闭,在设置时间内cookie一直存在,直到时间到期,cookie销毁

    session:
    创建:Java认为,当第一次执行request.getSession()会在服务器内存中创建按session
    销毁:主动销毁;服务器非正常关闭(session的自动过期时间为30分钟,过期后销毁)

    总结反馈:一个servlet中执行了♥重定向或者请求转发♥后,该servlet中后面的方法将不能执行,最好加上return来结束doGet/doPost方法,不然后面极有可能出错!!!!
    当浏览器设置了消除cookie之后,session就不能依赖cookie进行JsessinId的获取,可以在每个请求页面的超链接中使用src/href=response.encodeURL(String url); 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    ·····························································································
    综合方法模板:
    文件下载(设置两个头,两个流):
    String filename=request.getParameter("filename");·······························获取文件名称
    response.setHeader("content-disposition","attachment;filename="+filename);······设置下载头
    ServletContext scon=getServletContext();........................................获取全局管理者
    String mimeType=scon.getMimeType(filename);·····································获取文件mime
    response.setContext(mimeType);··················································设置第二个头(升级版)
    InputStream is=scon.getResourseAsStream("/down/"+filename);·····················获取服务器指定文件流★(路径获取相当于getRealpath)
    OutputStream os=response.getOutputStream();·····································获取响应输入流
    IOUtils.copy(is,os);····························································工具类进行流对拷
    is.close();
    os.close();
    ································································································

    ·······························································································
    乱码问题的处理总括:
    response.setContentType("text/html;charset=utf-8");····························解决浏览器显示乱码
    request.setCharacterEnconding("utf-8");········································解决post方式提交到控制台的乱码
    new String(filename.getBytes("iso8859-1"),"utf-8");····························解决get方式提交到控制台乱码
    URLEncorder.encode(filename,"***");············································解决下载头设定显示的乱码问题
    ·······························································································

    Jsp的总结:

    ★jsp指令:
    格式:<%@指令名 属性1="值1" 属性2="值2"... %>
    标签快捷键:ctrl+shift+/
    分类:
    page:(alt+/导报和提示)
    属性:
    improt:导入jar包
    contentType和pageEncoding:设置页面的编码,两个都有使用各自;只有一个,二者同一;都不出现,默认iso-8859-1
    errorPage:当页面出现错误后,跳转到该属性页面上(地址)
    isErrorPage:当前页面是否是错误页面(默认false),当为true是时可以使用exception这个内置对象
    session:当前页面是否可以使用session对象
    language:声明当前jsp支持的脚本语言(目前只有Java)

    include:
    属性:
    *file:静态包含(file="项目内部jsp之间的url",生成一个Java文件)
    taglib:(导入标签库)
    属性格式:
    <%@ taglib prefix="前缀名" uri="名称空间"%>
    注:jsp页面可以使用多个指令,指令可以出现多次,位置任意,一般在页面的上面


    ★jsp内置的9大内置对象:

    内置对象 类型
    request HttpServletRequest(使用同servlet)
    session HttpSession ..
    application ServletContext ..
    out JspWriter (jsp的字符输出流,底层走的走的是response.getWriter.print()(流中若有数据,自身的流先输出,然后再输出out的流)))
    page Object ..
    config ServletConfig ..
    response HttpServletResponse ..
    exception Throwable (必须在jsp页面声明一个属性才能用)
    PageContext PageContext (jsp的最小的域对象,一般不存数据,但是了解其方法的作用)

    注:只要访问一次jsp就会创建9大内置对象
    PageContext功能详解:
    <1.可以获取其他八大内置对象(一般不用,因为我们可以直接拿来用)
    <2.可以从别的作用域中查找数据(一般不用,因为我们可以直接在指定的作用域里面查找)
    pageContext.findAttribute(String name); -------------(获取对应的值)
    作用域:
    从小到大开始找:
    pageContext
    request
    session
    ServletContext
    可以操作其他作用域:
    pageContext.setAttribute("msg","123",pageContext.SESSION_SCOPE);
    等同于:session.setAttribute("msg","123");
    ...

    ★★域对象
    jsp域对象 servlet域对象 作用域
    request request 一次请求多次转发过程中的所有servlet共享
    session session 一次会话
    application servletContext 整个项目

    ★jsp的动作标签(都是项目内的路径)
    <jsp:forward>(在jsp页面使用请求转发)
    <jsp:forward page="..."> 相当于<%request.getRequestDispatcher(***).forward(***)%>
    <jsp:include>(动态包含)
    <jsp:include page="...">
    将被包含的页面运行后的结果包含进来,将所用的jsp页面都编译了

    路径总结:
    整体项目路径:
    重定向:response.sendRedirect("url");
    刷 新:setHeader("refresh","3,url");
    超链接:href="url";
    验证码:src="url";
    项目内路径:
    请求转发:request.getRequestDispatcher("url").forward(request,response);
    jsp中: errorPage="url"


    el和jstl总结:

    ★获取数据:
    1.简单数据
    ${pageScope|requestScope|sessionScope|applicationScope.属性名}
    2.获取复杂数据
    属性值为list和数组:
    ${pageScope|requestScope|sessionScope|applicationScope.属性名[index]}
    属性值为map
    ${pageScope|requestScope|sessionScope|applicationScope.属性名.键名}
    3.属性值为对象
    ${pageScope|requestScope|sessionScope|applicationScope.属性名.属性} 
    注:当属性名中有"." "+" "-"等特殊符号是必须使用${xxxScope["属性名"]}来获取

    ★运算符
    1.+ - * /
    这些符号只能做运算处理,"+"没有连接的作用,其参数是整数或者是字符串类型的数字
    2.empty
    判断一个容器(/对象)的长度是否为零(/空):是 true ,否 false
    3.支持三元运算符 > < == && || !

    ★web常用对象
    1.四个(常用)内置对象
    pageScope 作用: 从pageContext域中获取数据 (了解)
    requestScope 作用: 从request域中获取数据
    sessionScope 作用: 从session域中获取数据
    applicationScope 作用: 从ServletContext域中获取数据
    2.pageContext(常用作用:获取当前项目名路径: /day01)
    ${pageContext.request.contextPath}
    cookie(在jsp中获取cookie)
    ${cookie.名称.value}

    jstl: 离不开el
    jsp标准的标签库语言 
    jstl的分类:
    core:核心 (if foreach)
    fmt:国际化或者格式化(不学了)
    sql:和sql相关的(不学了)
    xml:和xml相关的(不学了)
    函数库(不学了)
    jstl的使用步骤:
    1.导入jar包(两个jar包)
    2.在页面上导入标签库
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    c:if使用
    格式:
    <c:if test="el表达式" [var="表达式的返回值"]>
    条件成立的时候输出的内容
    </c:if>
    c:forEach使用
    格式1:
    <c:forEach begin="开始" end="结束" step="循环的间隔数" var="变量名(每次循环的值)" varStatus="记录循环状态">
    ${变量名 }
    </c:forEach>
    注意:
    varStatus使用
    常用属性:
    count:记录当前是第几个
    first:判断当前元素是否为第一个
    last:判断当前元素是否为最后一个
    例如:
    <c:forEach begin="1" end="10" step="1" var="i">
    ${i }
    </c:forEach>
    格式2:高级
    <c:forEach items="${el表达式}" var="变量名"> 
    ${变量名}
    </c:forEach>
    map的循环底层是键值映射关系

    Filter过滤器

    (本质上是一个类,这个类对浏览器访问服务器资源时的一种过滤)

    使用方法:
    <1.在web.xml下编写配置文件,如:
    <filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>cn.itcast.filter</filer-class>
    </filter>
    <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <!--要过滤的资源-->
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <2.编写过滤器类实现Filter接口,重写里面的doFilter方法
    注:当服务器开启的时候,服务器创建filter对象,且调用init方法实现初始化;
    当请求来的时候,若能匹配上url-pattern里面的服务器资源路径(该标签顺序从上到下,然后再
    执行servlet-name标签中标定的具体的servlet),则服务器调用doFilter过滤请求,访问一次过滤一次;
    filter-mapping标签下还有dispatcher标签来对过滤方式进行标注:REQUEST(默认从浏览器发过来的请求),FORWARD(转发的请求)
    当服务器正常关闭,服务器调用destroy实现销毁操作
    <3.url-pattern的写法 (和servlet一样)
    完全匹配 以/开头 配置单一资源 /sd1 /sd2 /sd3
    目录匹配 以/开头,以*结尾 配置多个资源 /*
    扩展名匹配 不以/开头,以.结尾 *.jsp

    Listener监听器

    (本质上是一个类,这个类只负责监听其他Javabean的状态变化(3个域对象))

    作用:
    负责监听其他Javabean的状态变化(ServletContext,ServletRequest,HttpSession)
    包括:3个域对象的创建和销毁;
    3个域对象XXXAttribute的属性变化
    Javabean在session中的状态变化(活化,钝化...)
    java提供的常见监听器: 
    监听三个对象的创建和销毁:
    ServletContextListener(重点)
    ServletRequestListener
    HttpSessionListener

    监听三个对象属性的变化: 
    ServletContextAttributeListener
    ServletRequestAttributeListener
    HttpSessionAttributeListener
    监听javabean在session中的状态:(不需要在web.xml中配置)
    HttpSessionBindingListener(监听javabean是绑定到了session中还是从session中移除了)
    HttpSessionActivationListener(监听javabean活化还是钝化---服务器正常关闭)
    钝化:session带着javabean序列化到磁盘上
    活化:session带着javabean从磁盘上又回到了服务器内存中
    注:一般编写的Javabean需要实现序列化接口,防止在钝化过程中发生错误

    使用(编写一个ServletContext对象监听器):
    1.创建一个类,实现接口ServletContextListener
    2.在web.xml最上面(welcome后面)编写配置文件信息
    <listener>
    <listener-class>监听器的全限定名<listener-class>
    </listener>
    作用:在服务器启动的时候加载框架的一些配置信息

  • 相关阅读:
    Microsoft NNI入门
    【神经网络搜索】Efficient Neural Architecture Search
    Sphinx 快速构建工程文档
    Ubuntu16.04 Cuda11.1 Cudnn8.1 Tensorflow2.4 PyTorch1.7环境配置
    【CV中的Attention机制】ShuffleAttention
    【有趣的NAS】NAS-RL(ICLR2017)
    分类器
    将url下载到本地
    缓存管理器
    大数据数据结构-分类模型
  • 原文地址:https://www.cnblogs.com/zbdouble/p/8414377.html
Copyright © 2011-2022 走看看