zoukankan      html  css  js  c++  java
  • Java Web

    JavaWeb

    • 请求和响应
      • 请求
        • 当你在Web浏览器中输入一个URL时,浏览器将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关的信息。
      • 响应
        • 当服务器收到这个请求时将返回一个响应,该响应包括与该请求相关的信息以及位于指定URL(如果有的话)的数据。直到浏览器解析该响应并显示出网页(或其他资源)为止。
      • 常见的状态码
        • 1XX:成功的接收
        • 2XX200成功完成请求的内容
        • 3XX302借钱,304307缓存有关
        • 4XX:客户端有错误404请求的资源不存在(路径) 403有资源没有权限
        • 5XX:服务端出问题
    • HTTP协议
      • 基本概念
        • 无状态协议,通过Internet发送请求消息和响应消息。使用端口接收和发送消息,默认为80端口。
      • 请求头
        • GET方式

        不提交大量数据,无敏感,保密数据时使用。超链接访问默认是GET方法。form提交,不指定method方法,默认为GET方法。form提交,制定方法method="GET",很少使用这种方式。POST方法:需要提交敏感、保密数据,或数据量较大。form提交,指定method="POST"

        • Accept-Charset:浏览器可接受的字符集
        • Accept-Encodingd:浏览器能够进行解码的数据编码方式,比如gzip
        • Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到
        • If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304"NotModified"应答
        • POST方式

        • Content-Type说明了请求主体的内容是如何编码的。浏览器始终以application/x-www-form-urlencoded的格式编码来传送数据。
        • Content-Length说明了主体的字节数。
        • 在首部Connection后是一个空行,再后面就是请求主体。与大多数浏览器的POST请求一样,这是以简单的"名称-值"对的形式给出的,其中nameProfessional AjaxpulisherWilery
      • 响应头

        状态行

        • HTTP版本:向客户端指明其可理解的最高版本
        • 响应代码:3位的数字代码,指出请求的成功或失败,如果失败则指出原因。
        • 响应描述:为响应代码的可读性解释。例如:HTTP/1.1 200 OK

        响应头标

        • 像请求头标一样,它们指出服务器的功能,标识出响应数据的细节

        空行

        • 最后一个响应头标之后是一个空行,发送回车符和退行,表明服务器以下不再有头标

        响应数据

        • HTML文档和图像等,也就是HTML本身
    • WebXML
      • 作用
        • web.xml文件是用来配置:欢迎页、servletfilter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程

    配置

    指定欢迎页面

    <welcome-file-list>

    <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>index1.jsp</welcome-file>

    </welcome-file-list>

    命名与定制URL

    为Servlet命名:

    <servlet>

    <servlet-name>servlet1</servlet-name>

    <servlet-class>net.test.TestServlet</servlet-class>

    </servlet>

    为Servlet定制URL、

    <servlet-mapping>

    <servlet-name>servlet1</servlet-name>

    <url-pattern>*.do</url-pattern>

    </servlet-mapping>

    定制初始化参数

    <servlet>

    <servlet-name>servlet1</servlet-name>

    <servlet-class>net.test.TestServlet</servlet-class>

    <init-param>

    <param-name>userName</param-name>

    <param-value>Tommy</param-value>

    </init-param> <init-param> <param-name>E-mail</param-name> <param-value>Tommy@163.com</param-value> </init-param> </servlet>

    经过上面的配置,在servlet中能够调用getServletConfig().getInitParameter("param1")获得参数名对应的值

    指定错误处理页面,可以通过"异常类型"或"错误码"来指定错误处理页面

    <error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page> ----------------------------- <error-page> <exception-type>java.lang.Exception<exception-type> <location>/exception.jsp<location> </error-page>

    设置过滤器:比如设置一个编码过滤器,过滤所有资源

    <filter> <filter-name>XXXCharaSetFilter</filter-name> <filter-class>net.test.CharSetFilter</filter-class> </filter> <filter-mapping> <filter-name>XXXCharaSetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

    设置监听器

    <listener> <listener-class>net.test.XXXLisenet</listener-class> </listener>

    设置会话(Session)过期时间,其中时间以分钟为单位,假如设置60分钟超时

    <session-config> <session-timeout>60</session-timeout> </session-config>

    • JSP
      • 内置对象
        • request

        requestHttpServletRequest类型的对象,可以在JSP中直接通过request调用HttpServletRequest接口中的任何方法。

        • response

        responseHttpServletResponse类型的对象,可以在JSP中直接通过response调用HttpServletResponse接口中的任何方法。

        • session

        sessionHttpSession类型的对象,可以在JSP中通过session调用HttpSession接口中的任何方法

        • application

        applicationServletContext类型的对象,可以在JSP中通过application调用ServletContext接口中的任何方法

        • out

        outJspWriter类型的对象,可以在JSP中调用JspWriter的方法向客户端输出内容。然而,由于<%=%>可以更为便捷地进行输出,因此在JSP文件中往往不使用out对象进行输出。

        • config

        configServletConfig类型的对象,在JSP中可以使用config来调用ServletConfig接口中的任何方法。在web.xml中可以像配置Servlet那样配置JSP。使用配置的url-pattern访问JSP

        • exception

        exception是一个Throwable类型的对象,默认情况下不会生成这个内置对象,当JSP页面被指定为错误页面时,才会有exception这个内置对象。

        • page

        page指代当前的对象,即this

        • pageContext

        pageContext是所有内置对象中最重要的内置对象,是JSP中的上下文对象。

        pageContextjava.servlet.jsp.PageContext类的对象

        很多内置对象通过pageContext对象获取。JSP_jspService方法中总是包含如下部分代码。 application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut();

        所有的内置对象都自动地被添加到pageContext对象中。pageContext也可以存储属性,具有setAttributegetAttributeremoveAttribute方法,可以对pageContext中的属性进行处理

      • 域对象
        • pageContext

        如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。

        • request

        如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

        • session

        如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,

        • application

        如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说"从服务器启动,到服务器关闭"是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的,page, request, session都是完全隔离的,无论如何修改都不会影响其他

      • 静态与动态包含
        • 静态包含

        所谓静态包含,指的是在翻译期间,把包含的页面也翻译到当前页面的Java文件中,所谓java源文件就实现"二合一"

        • <%@include file="copyright.jsp"%>
        • 动态包含

        在运行时,将所需要的class文件导入到当前文件中(分开编译,运行时合并)。

        • <%request.getRequestDispatch(" ").include()%>
        • <jsp:include page="date.jsp" flush="true"/>
    • Servlet
      • 跳转到其他组件的方式
        • 方式

        响应重定向

        • HttpServletResponse中定义了响应重定向的方法sendRedirect(String path).响应重定向是向目标资源重新发送请求,生成新的响应
        • 响应重定向是使用GET方法提交请求,所以调用目的资源的doGet方法
        • 响应重定向生成新的请求,所以当前请求中的数据不会再传到目标资源中,因此,输入用户名和密码后,响应重定向到LoginSuccessServlet,输出的用户名是null

        请求转发

        • 能够吧当前的请求对象转发到目标资源,是最常用的跳转方法
        • 使用请求转发后,当前的请求对象被转发到下一个资源,因此可以得到请求对象中的数据,包括请求参数,请求方法等。在doPost中调用该方法,将调用下一个资源的doPost方法;在doGet方法调用该方法,调用下一个资源的doGet方法
        • request.getRequestDispatcher("LoginSuccessServlet").forward(request, response);
        • 差别

        简单来说,响应重定向是你找我借钱,我没有,我告诉你谁有,你自己再去找他借钱。请求转发是你找我借钱,我没有,我去找其他人借钱,借完了再给你。响应重定向:(1)两次请求。(2)地址栏会发生变化请求转发:(1)一次请求2)地址栏没有变化。

      • 访问方式
        • 通过地址栏访问Servlet
        • 通过超链接访问Servlet
        • 通过表单提交访问Servlet,使用Submit按钮
        • 通过表单提交访问Servlet,使用JS提交
      • 生命周期
        • Servlet是单实例,多线程的
        • 调用顺序

        构造方法

        init方法

        • 默认情况下,在第一次访问Servlet的时候被初始化,而且只初始化一次。
        • 可以在web.xml<servlet></servlet>下进行配置,指定在启动容器的时候初始化

        service方法

        doXXX方法

        destroy方法

        注:第一次通过地址栏调用,控制台输出:构造方法,初始化,doXXX方法。第二次及以后若干次通过地址栏调用,控制台输出doGet()正常关闭Tomcat,控制台输出 destroy()

        • 通常覆盖的方法有init/doXXX
        • request.getRequestDispatcher("LoginSuccessServlet").forward(request, response);
    • cookiesession
      • cookie
        • Cookie是保存在客户端的小脚本,保存的位置分为两种:(1Cookie可能保存在客户端的小文本,关闭浏览器后,Cookie就不再存在

          2Cookie也可能保存在客户PC机的硬盘上,设置有效时间,超过有效时间后失效

      • session
        • 客户端向服务器发送请求,服务端接受请求并生成响应返回给客户端,客户端对服务端这样一次连续的调用过程,被称为会话(session
      • cookiesession区别
        • session是在服务端保存用户信息,Cookie是在客户端保存用户信息
        • session中保存的是任意对象,Cookie保存的是字符串
        • session随会话结束而关闭,Cookie可以长久保存在客户端硬盘上,也可以临时保存在浏览器内存中。
        • Cookie通常用于保存不重要的用户信息,重要的信息使用session保存
    • JDBC
      • 步骤
        • 把数据库的驱动程序包拷贝到WEB-INF/lib
        • 使用Class.forName加载驱动类,每个数据库驱动类不同
        • 使用DriverManager.getConnection获得连接对象,每个数据库的连接串不同
        • 使用Connection中的createStatement方法获得Statement对象,或者preparedStatement方法获得PreparedStatement
        • 使用语句对象中的方法执行SQL语句,查询使用executeQuery方法,增删改使用executeUpdate方法
        • 查询返回ResultSet结果集,使用next方法进行迭代
        • 关闭资源:连接对象,语句对象,结果集对象
    • JavaBean
      • 编码规则
        • 必须是public
        • 必须有一个无参的public构造方法
        • 属性私有化
        • 私有化的属性必须用public方法暴露出来
        • 返回属性的方法为getXxxx()格式
        • 设置属性的方法为SetXxxx(形式参数)格式
      • 作用
        • JavaBean就是遵守规范的Java类,结合JSP的标准动作,可以比较便捷地在JSP之间传递数据,封装数据
  • 相关阅读:
    Codeforces Round #251 (Div. 2) A
    topcoder SRM 623 DIV2 CatAndRat
    topcoder SRM 623 DIV2 CatchTheBeatEasy
    topcoder SRM 622 DIV2 FibonacciDiv2
    topcoder SRM 622 DIV2 BoxesDiv2
    Leetcode Linked List Cycle II
    leetcode Linked List Cycle
    Leetcode Search Insert Position
    关于vim插件
    Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10049787.html
Copyright © 2011-2022 走看看