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之间传递数据,封装数据
  • 相关阅读:
    堆(优先队列)模板
    线段树(递归)模板
    快速幂(含二阶方阵类)模板
    ACM/CF赛制getstart模板
    [Andrew Stankevich's Contest#21] Lempel-Ziv Compression
    [NOIP2001]Car的旅行路线
    [NOIP2007] 矩阵取数游戏
    [NOIP2010] 关押罪犯
    [NOIP1999] 拦截导弹
    设计模式之第1章-工厂方法模式(Java实现)
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10049787.html
Copyright © 2011-2022 走看看