JavaWeb期末考试复习总结——黑马程序员

     阅读:28

重点复习章节及知识点:

第3章重点记忆归纳:(题目分布:简答、程序)

  1. 深刻理解servlet程序的含义、生存周期、部署及调用。

Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。servlet的实质就是java代码,通过javaAPI动态地向客户端输出内容。

servlet规范:包含三个技术点

  1servlet技术

  2filter技术---过滤器

  3listener技术---监听器

ServletAPI生命周期)分为三个阶段,分别是初始化阶段,运行阶段和销毁阶段

1)初始化阶段

通过调用init()方法实现Servlet的初始化工作。在Servlet的整个生命周期内,它的init()方法只被调用一次。

2)运行阶段

Servlet的整个生命周期内,对于servlet的每一次访问请求,servlet容器都会调用一次servletservice()方法,并且创建新的ServletRequestServletResponse对象,也就是说,service()方法在Servlet的整个生命周期内会被调用多次。

3)销毁阶段

当服务器关闭或Web应用被移出容器时,Servlet随着Web应用的销毁而销毁在销毁Servlet之前,Servlet容器会调用Servletdestroy()方法,以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期内,它的destroy()方法也只被调用一次

Servlet的部署和访问

打开【servers】选项卡,选中部署web应用的Tomcat服务器,右键单击并选择【Add and Remove】选项,进入部署web应用的界面,选中“chapter03”,单击【Add】按钮,将chapter03项目添加到Tomcat服务器中,单击【finish】按钮,完成web应用的部署。

接下来启动eclipse中的Tomcat服务器,在浏览器的地址栏上输入地址“http://localhost:8080/chapter03/TestServlet01访问TestServlet01

1、请列举Servlet接口中的方法,并分别说明这些方法的特点及其作用。

 Servlet接口中有initservicedestroy getServletConfiggetServletInfo 5个方法,这些方法的特点及其作用具体如下:

1init(ServletConfig config)方法,该方法在服务器对Servlet第一次访问时调用,负责Servlet初始化工作。在一个Servlet的生命周期中只执行一次。该方法接收一个ServletConfig类型的参数,Servlet容器可以通过这个参数向Servlet传递初始化配置信息。

2service(ServletRequest requestServletResponse response)方法,该方法负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。

3destroy()方法,该方法方法负责释放Servlet对象占用的资源。当Servlet对象被销毁时,容器会调用此方法。

4getServletConfig()方法,该方法返回容器调用init(ServletConfig config)方法时传递给ServletServletConfig对象

5getServletInfo()方法,该方法返回一个字符串,其中包含了关于Servlet的信息,例如,作者、版本和版权等信息。

2、简述ServletContext接口的三个主要作用。

1)获取Web应用程序的初始化参数

2)实现多个Servlet对象共享数据

3)读取Web应用下的资源文件

    2、<!-- 配置Servlet -->

            <servlet>

                    <servlet-name>xxx</servlet-name>

                    <servlet-class>xxx.xxx.xxx</servlet-class>

            </servlet>

        <!-- 配置Servlet映射路径 -->

            <servlet-mapping>

                    <servlet-name>xxx</servlet-name>

                    <url-pattern>/xxx</url-pattern>

            </servlet-mapping>

3、在程序中的部署和使用。

第4章重点记忆归纳:(题目分布:填空、选择、简答

  1. 深刻理解9大内置对象的含义,以及重点对象的方法及存储范围

9大内置对象的含义:

1.request:对象主要用于处理客户端请求,在(页面转发,获取cookie)用到

2.response:用于处理响应客户端请求,在(页面重定向)中使用

3.session:在网络中被称为会话,一个会话就是浏览器与服务器之间的一次通话(保存登录状态时)

4.application:就像全局变量,用于保存应用程序中的共有数据(上传时获取真实路径)

5.out:对象用于在web浏览器内输出信息,数据输出完,要及时关闭输出流

6.pageContext:用于获取页面的上下文,通过此对象可以获取页面的其他8个内置对象

7.config:用于取得服务器的配置信息

8.page:代表jsp本身,只有在jsp页面内才是合法的

9.exception:用于处理jsp页面发生的异常

下面的好像是重点对象

pageContext JSP页面容器 -->当前页面有效

request 请求对象 -->同一次请求有效(请求转发还是有效,重定向[两次请求]无效)

session 会话对象 -->同一次会话有效(只要不关闭或者切换浏览器)

application 全局对象 -->全局有效(整个项目有效,切换浏览器有效,关闭server、其他项目无效)

1、请求转发与重定向的异同点如下:

  1. 请求转发和重定向都可以实现访问一个资源时转向当前应用资源
  2. 请求转发是一次请求一次响应,而重定向为两次请求两次响应

3)一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器压力

4)如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向

    2、Request

        Request.setCharacterEncoding=“UTF-8”;

        String request.getParameter(String name);

        String[] request.getParameterValue(String name);

        RequestDispatcher request.getRequestDispatcher(String path);

        request.getRequestDispatcher.forward(request,response);

        Public void setAttribute(string name,object );

        Public object getAttribute(string name);

        Public void removeAttribute(string name);

    3、response

        response.setHeader("refresh","2");

        response.setHeader("refresh","3;URL=hello.jsp") ;

        response.sendRedirect(String location) ;

        response.addCookie(Coolie cookie) ;

       

第5章重点记忆归纳:(题目分布:填空、选择、简答

  1. 深刻理解cookie和session的关系。

1.Cookie

通俗讲,是访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些步骤。更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案

Cookie的主要内容包括:名字,值,过期时间,路径和域。

2.Session

存在服务器的一种用来存放用户数据的类HashTable结构

浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable

一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。

当用户在应用程序的 Web页间跳转时,存储在 Session 对象中的变量不会丢失而是在整个用户会话中一直存在下去。

Session的实现方式和Cookie有一定关系。建立一个连接就生成一个session id

CookieSession主要有如下区别:

1CookieHttpSession保存会话相关数据的技术,其中Cookie将信息存储在浏览器端,是客户端技术,Session将数据保存在服务器端,是服务器端技术

2Cookie是基于HTTP协议中的Set-Cookie响应头和Cookie请求头进行工作的

3)默认情况下HttpSession是基于一个名称为JSESSIONID 的特殊Cookie工作的

4)浏览器对Cookie具有严格的限制,一个网站能在浏览器中保存多少Cookie是有限制的

5HttpSession默认是基于Cookie运作的。

2、cookie

        Public Cookie(string name,string value)

        Public string getName()

        Public string getValue()

        Public void setMaxAge(int expiry)

        Public void addCookie(Cookie cookie)

        Public Cookie[] getCookies()

    3、session

        public String getId()

        public boolean isNew()

        public void setMaxInactiveInterval(int interval)

        public int getMaxInactiveInterval()

        public long getCreationTime()

        public long getLastAccessedTime()

        public void setAttribute(String name, Object value) 

        public Object getAttribute(String name)

        public void removeAttribute(String name)

        public void invalidate()

第6章重点记忆归纳:(题目分布:填空、选择)

    1、JSP基本结构:java程序段、声明、输出表达式

        <% java程序段  %>

        <%! 声明  %>

        <%= %>相当于out.print()

        out.println()和out.print()效果是一样的。如果要换行</br>

   2、JSP注释:<!-- HTML注释 -->、//java语句注释、/* java程序段注释...*/、<%--  jsp注释  --%>

    3、文档UTF-8设置

        打开Eclisps软件时整体设置--属性;

        项目属性设置;

        request.setCharacterEncoding="UTF-8";;

        response.setCharacterEncoding="UTF-8";

    4、重点JSP指令:

        <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>

        <%@ page errorPage="..." iserrorPage="true" %>

        <%@ page import="..." %>

        <%@ include file="..." %>

        动作指令:

        <jsp:include page="..." flush="true"/>

        <jsp:include page="..." flush="true">

            <jsp:param name="..." value="...">

        </jsp:include>

       

        <jsp:forward page="...">

            <jsp:param name="..." value="..." />

        <jsp:forward>

       

        跳转方式:

        <a href="...?param=...&param1=...&...">

       

        重定向:(两次请求,地址栏看的到变化,数据丢失)

        response.sendRedirect("相对路径");

        请求转发:(一次请求,地址栏看不到改变,数据不丢失,可以getParameter数据,也可以getAttribute数据)

        request.getRequestDispatcher("相对路径").forward(request,response);

第7章重点记忆归纳:(题目分布:填空、选择)

  1. JavaBean技术概念和使用。
  2. EL表达式以及JSTL标签库的基本使用。

第8章重点记忆归纳:(题目分布:简答、程序)

  1. 理解概念、原理,掌握配置。

过滤器

Filter被称作过滤器或者拦截器,其基本功能就是Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。

Filter工作原理(执行流程)       

       当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。请求信息在过滤器链中可以被修改,也可以根据条件让请求不发往资源处理器,并直接向客户机发回一个响应。当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。同样在这个过程中,用户可以修改响应信息,从而完成一定的任务。

监听器

Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。

2、简述Servlet事件监听器的作用。(写出三点)

1)监听Web应用程序中ServletContextHttpSessionServletRequest等域对象的创建和销毁过程。

2)监听ServletContextHttpSessionServletRequest等域对象属性的修改

3感知绑定到HttpSession域中某个对象的状态

  1. 过滤器处理过程:对请求、响应进行过滤;对数据放行

        3、Filter过滤器就是一个实现了javax.servlet.Filter接口的类:

            实现三个核心方法:init()、destroy()、doFilter();

            其中init()、destroy()原理、执行时机同Servlet一样;

            过滤器为了实现过滤谁,需要配置拦截谁,过程类似servlet;

                拦截路径或通配符拦截;

                过滤器链:可以配置多个过滤器,过滤器的先后顺序是由<filter-mapping>的位置决定。

                dispatcher请求方式:

                    request:拦截HTTP请求 get post;

                    forward:只拦截通过请求转发方式的请求;

            通过doFilter()处理拦截,并且通过chain.doFilter(request,response)放行;

4、在程序中的部署和使用,网站统一字符编码过滤器的使用。

第9章重点记忆归纳:(题目分布:简答、程序)

    1.理解JDBC存在的意义、概念、原理。

       

JDBC的全称是Java数据库连接Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等处理。

JDBC实现步骤如下:

1)加载并注册数据库驱动

2)通过DriverManager获取数据库连接

3)通过Connection对象获取Statement对象

4)使用Statement执行SQL语句

5)操作ResultSet结果集

6)关闭连接,释放资源

    2.JDBC API主要功能:通过以下类/接口实现

        DriverManager:管理jdbc驱动

        Connection:连接(通过DriverManager产生)

        Statement(PreparedStatement):增删改查(通过Connection产生)

        CallableStatement:调用数据库中的存储过程/存储函数(通过Connection产生)

        Result:返回的结果集(Statement,PreparedStatement产生)

    3.jdbc访问数据库的具体步骤:

        a.导入驱动,加载具体的驱动类

        b.与数据库建立连接

        c.发送sql,执行

        d.处理结果集(查询)

e.关闭

    4.推荐使用PreparedStatement:原因如下:

        1、编码简便,不易写错

        String name="ls";

        String password="1234";

        stmt:

        String sql="insert into user(name,password)values('"+name+"','"+password+"')";

        stmt.executeUpdate(sq1);

        pstmt:

        String sql="insert into user(name,password) values(?,?)";

        pstmt=connection.prepareStatement(sq1);//预编译SQL

        pstmt.setString(1,name);

        pstmt.setString(2,password);

        2、性能高,预编译速度快。

        3、有效防止SQL注入漏洞。

        stmt:存在被sq1注入的风险

        (例如:    输入用户名:任意值’or 2=2--       密码:任意值)

        select count(*)from user where name='"+name+"' and password='"+password+"';

        select count(*)from user where name='ls'and password='1234’;

        select count(*)from user where name='任意值’or 2=2--'and password='任意值’;

        select count(*)from user where name='任意值’or 2=2;

        select count(*)from user;

        pstmt:有效防止sql注入

第10章重点记忆归纳:(题目分布:填空、简答

  1. 重点概念、原理。

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,应用程序访问数据库时并不是直接创建Connection,而是向连接池“申请”一个Connection。如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率。

2、不用连接池

        Class.forName();

        Connection connection =DriverManager.getConnection();//连接指向数据库

        3、用连接池的核心:将连接的指向数据源而不是数据库。

        ...->DataSource ds=….

        Connection connection =ds.getConnection();//指向的是数据源的连接

        数据库访问核心->pstmt/stmt->connection->1.直接数据库 2.数据源

第11章重点记忆归纳:(题目分布:程序)

  1. 重点JSP Model1和JSP Model2的原理及使用过程。

第12章重点记忆归纳:(题目分布:填空、选择)

  1. 重点理解文件上传、下载原理。       、

JSP页面的page指令主要用于设置该页面的各种属性,page指令的language属性的作用是:

指定JSP页面使用的脚本语言,默认为Java

Servlet的作用是处理客户端请求并做出响应,Servlet是一个符合特定规范的java程序,是运行在服务器端的一个基于java技术的web组件

Servlet的生命周期方法有init()service()destroy()

在<servlet>元素中增加<load-on-startup>元素可以指定在容器启动时Servlet的加载次序

在JSP中使用JDBC语句访问数据库,正确导入SQL类库的语句是:

<%@ page import="java.sql.*" %>

JSP应用程序配置文件的根元素为<web-app>,JSP中的隐式注释为:<%--注释内容--%>,在JSP中如果要导入java.util.*包要使用page指令                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

JSP文件请求需要经过翻译阶段 编译阶段 执行阶段三个阶段

抽象类GenericServlet实现了Servlet接口和ServletConfig接口

编写Servlet时只需要根据应用的需要,重写doGet()或者doPost()方法即可

向请求作用域中存放数据可以用request对象的setAttribute(String,Object)方法,取数据可以用getAttribute(String)方法

JSP和Servlet的关系是:JSP会被翻译成Servlet

转发不会产生新的request对象,重定向是发送一个新的请求,发送一次请求会产生一个responserequest对象

request对象通过哪个方法是根据组件名称获取提交数据的:getParameter()

在JSP中,以下哪个方法可以正确获取复选框的值request.getParameterValues()

Servlet中获取请求的参数值getParameter()方法,同名的多个参数使用request.getParameterValues()方法

以下哪个对象提供了访问和放置页面共享数据的方式:session

在JSP中,session技术最适合实现购物车的存储

在JSP页面中,下列(  )表达式语句可以获取页面请求中名字为title的文本框的内容:

<%=request.getParameter("title")%>

cookie的作用表现在以下方面:

1.对特定对象的追踪,如访问者的访问次数、最后访问时间、路径等。

2.统计网页浏览次数

3.cookie有效期内,记录用户登录信息

4.实现各种个性化服务,如针对不同用户喜欢以不同的风格展示不同的内容。

服务器为每一个浏览器分配一个session,但是session不会再浏览器关闭的时候销毁,只有过期或服务器关闭才会销毁。释放session对象时,使用session对象的invalidate()方法

cookie由Netscape公司发明,是最常用的跟踪用户会话的方式。它是由服务端、客户端产生,发送给浏览器

我们第一次访问服务器的时候,如果只是通过请求连接一个jsp页面,不提交任何信息,会触发哪个事件:建立session

会话跟踪技术可以通过以下哪些技术实现cookiesession

在web.xml中使用<filter><filter-mapping>标签配置过滤器

MVC模式中,M指的是模型ModelV指的是视图ViewC指的是控制器Controller

MVC模式中,模型对应的组件在:JavaBean

MVC模式中,视图对应的组件是:JSPHTML文件

MVC模式中,控制器的作用是:控制器负责转发请求,对请求进行处理

M(模型层)指的是:实体类、Service层、dao

MVC模式的优点有:各司其职,互不干涉、利于分工、利于重用和扩展

Model1模式下的程序流程控制是在JSP页面中实现的,这使得JSP页面中的嵌入大量的Java代码,Model1模式是JSP + JavaBean的结合,在JSP技术发展的初识阶段被广泛使用,Model2模式(MVC)是在JSP+JavaBean的设计模式基础上加入Servlet来实现程序控制层

整个MVC的流程就是:用户发送一个请求,首先由控制层接收,然后根据请求去调用模型层处理并返回数据,接着调用相应的视图层把数据响应给用户

第3章重点记忆归纳:(题目分布:简答、程序)

  1. 深刻理解servlet程序的含义、生存周期、部署及调用。

Servlet 是运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。servlet的实质就是java代码,通过javaAPI动态地向客户端输出内容。

servlet规范:包含三个技术点

  1servlet技术

  2filter技术---过滤器

  3listener技术---监听器

ServletAPI生命周期)分为三个阶段,分别是初始化阶段,运行阶段和销毁阶段

1)初始化阶段

通过调用init()方法实现Servlet的初始化工作。在Servlet的整个生命周期内,它的init()方法只被调用一次。

2)运行阶段

Servlet的整个生命周期内,对于servlet的每一次访问请求,servlet容器都会调用一次servletservice()方法,并且创建新的ServletRequestServletResponse对象,也就是说,service()方法在Servlet的整个生命周期内会被调用多次。

3)销毁阶段

当服务器关闭或Web应用被移出容器时,Servlet随着Web应用的销毁而销毁在销毁Servlet之前,Servlet容器会调用Servletdestroy()方法,以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期内,它的destroy()方法也只被调用一次

Servlet的部署和访问

打开【servers】选项卡,选中部署web应用的Tomcat服务器,右键单击并选择【Add and Remove】选项,进入部署web应用的界面,选中“chapter03”,单击【Add】按钮,将chapter03项目添加到Tomcat服务器中,单击【finish】按钮,完成web应用的部署。

接下来启动eclipse中的Tomcat服务器,在浏览器的地址栏上输入地址“http://localhost:8080/chapter03/TestServlet01访问TestServlet01

1、请列举Servlet接口中的方法,并分别说明这些方法的特点及其作用。

Servlet接口中有initservicedestroy getServletConfiggetServletInfo 5个方法,这些方法的特点及其作用具体如下:

1init(ServletConfig config)方法,该方法在服务器对Servlet第一次访问时调用,负责Servlet初始化工作。在一个Servlet的生命周期中只执行一次。该方法接收一个ServletConfig类型的参数,Servlet容器可以通过这个参数向Servlet传递初始化配置信息。

2service(ServletRequest requestServletResponse response)方法,该方法负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。

3destroy()方法,该方法负责释放Servlet对象占用的资源。当Servlet对象被销毁时,容器会调用此方法。

4getServletConfig()方法,该方法返回容器调用init(ServletConfig config)方法时传递给ServletServletConfig对象

5getServletInfo()方法,该方法返回一个字符串,其中包含了关于Servlet的信息,例如,作者、版本和版权等信息。

2、简述ServletContext接口的三个主要作用。

1获取Web应用程序的初始化参数

2实现多个Servlet对象共享数据

3读取Web应用下的资源文件

1.    获取web的上下文路径2.    获取全局的参数

3.    作为域对象使用4.    请求转发

5.    读取web项目的资源文件

    2、<!-- 配置Servlet -->

           <servlet>

                   <servlet-name>xxx</servlet-name>

                   <servlet-class>xxx.xxx.xxx</servlet-class>

           </servlet>

        <!-- 配置Servlet映射路径 -->

           <servlet-mapping>

                   <servlet-name>xxx</servlet-name>

                   <url-pattern>/xxx</url-pattern>

           </servlet-mapping>

3、在程序中的部署和使用。

第4章重点记忆归纳:(题目分布:填空、选择、简答

  1. 深刻理解9大内置对象的含义,以及重点对象的方法及存储范围

9大内置对象的含义:

1)out:主要用于页面输出;

2)request:用于得到用户请求信息

3)response:表示服务器向客户端的回应信息

4)config:包含服务器的配置信息,可以使用该对象获得Servlet初始化参数

5)session:主要用来保存用户信息

6)application:包含所有用户共享信息

7)page:指当前页面转换后的Servlet类的实例

8)pageContext:表示JSP页面容器,它提供了JSP页面内所有的对象及名字空间的访问

9)exception::表示JSP页面所发生的异常,在错误页中才起作用

pageContext JSP页面容器 -->当前页面有效

request 请求对象 -->同一次请求有效(请求转发还是有效,重定向[两次请求]无效)

session 会话对象 -->同一次会话有效(只要不关闭或者切换浏览器)

application 全局对象 -->全局有效(整个项目有效,切换浏览器有效,关闭server、其他项目无效)

    2、Request

request 对象是 javax.servlet.httpServletRequest类型的对象。

该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

        Request.setCharacterEncoding=“UTF-8”;

        String request.getParameter(String name);

        String[] request.getParameterValues(String name);

        RequestDispatcher request.getRequestDispatcher(String path);

        request.getRequestDispatcher.forward(request,response);

        Public void setAttribute(string name,object );

        Public object getAttribute(string name);

        Public void removeAttribute(string name);

    3、response

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。

response对象也具有作用域,它只在JSP页面内有效。

        response.setHeader("refresh","2");

        response.setHeader("refresh","3;URL=hello.jsp") ;

        response.sendRedirect(String location) ;

        response.addCookie(Coolie cookie) ;

第5章重点记忆归纳:(题目分布:填空、选择、简答

  1. 深刻理解cookie和session的关系。

1.Cookie

通俗讲,是访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些步骤。更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案

Cookie的主要内容包括:名字,值,过期时间,路径和域。

2.Session

存在服务器的一种用来存放用户数据的类HashTable结构

浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable

一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。

当用户在应用程序的 Web页间跳转时,存储在 Session 对象中的变量不会丢失而是在整个用户会话中一直存在下去。Session的实现方式和Cookie有一定关系。建立一个连接就生成一个session id

简述什么是会话技术?

会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程。在Servlet技术中,提供了两个用于保存会话数据的对象,分别是CookieSession

CookieSession主要有如下区别:

1CookieHttpSession保存会话相关数据的技术,其中Cookie将信息存储在浏览器端,是客户端技术Session将数据保存在服务器端,是服务器端技术

2Cookie基于HTTP协议中的Set-Cookie响应头和Cookie请求头进行工作的

3)默认情况下HttpSession基于一个名称为JSESSIONID 的特殊Cookie工作

4)浏览器对Cookie具有严格的限制,一个网站能在浏览器中保存多少Cookie是有限制的

5HttpSession默认是基于Cookie运作的

2、cookie

        Public Cookie(string name,string value)

        Public string getName()

        Public string getValue()

        Public void setMaxAge(int expiry)

        Public void addCookie(Cookie cookie)

        Public Cookie[] getCookies()

    3、session

        public String getId()

        public boolean isNew()

        public void setMaxInactiveInterval(int interval)

        public int getMaxInactiveInterval()

        public long getCreationTime()

        public long getLastAccessedTime()

        public void setAttribute(String name, Object value) 

        public Object getAttribute(String name)

        public void removeAttribute(String name)

        public void invalidate()

第6章重点记忆归纳:(题目分布:填空、选择)

JSP运行原理(.jsp文件à翻译成.java文件à编译成.class文件)

请简述JSP的运行原理。

  1. 客户端发出请求,要求访问jsp文件
  2. JSP容器首先将JSP文件转换为java源文件(java servlet源程序),在转换过程中如果发现jsp文件中存在任何语法错误则立即中断转换过程,并向服务器端和客户端返回出错信息。
  3. 如果转换成功,则JSP容器将生成的java源文件编译成.class文件,该class文件就是一个servlet,servlet容器会像处理其他servlet一样来处理它。
  4. 由Servlet容器加载转换后的servlet类(.class文件),创建一个该servlet实例,并执行servlet中的init()方法,对该实例进行初始化工作。
  5. 调用servlet中的service()方法来处理客户端请求
  6. 如果jsp文件被修改,则服务器将根据修改内容判断是否需要对文件重新编译,如果需要,则重新编译后的结果取代内存中常驻的servlet,并继续上述过程。
  7. 执行完之后调用servlet中的destory()方法,将上面创建的servlet实例销毁
  8. 完成请求处理,生成响应对象由jsp容器接收,并以HTML格式发送回客户端。

    1、JSP基本结构:java程序段、声明、输出表达式

        <% java程序段  %>  局部变量

        <%! 声明  %>    在整个页面有效

        <%= %>相当于out.print()  //输出的变量或者表达式:<%=……%>,EL表达式里的${……}

        out.println()和out.print()效果是一样的。如果要换行</br>

   2、JSP注释:<!-- HTML注释 -->、//java语句注释、/* java程序段注释...*/、<%--  jsp注释  --%>

    3、文档UTF-8设置

        打开Eclipse软件时整体设置--属性;

        项目属性设置;

        request.setCharacterEncoding="UTF-8";;

        response.setCharacterEncoding="UTF-8";

    4、重点JSP指令:

        <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>

        <%@ page errorPage="..." iserrorPage="true" %>

        <%@ page import="..." %>

        <%@ include file="..." %>

        动作指令:

        <jsp:include page="..." flush="true"/>

        <jsp:include page="..." flush="true">

           <jsp:param name="..." value="...">

        </jsp:include>

   

        <jsp:forward page="...">

           <jsp:param name="..." value="..." />

        <jsp:forward>

       

        跳转方式:

        <a href="...?param=...&param1=...&...">

       

重定向:(两次请求,地址栏看得到变化,数据丢失)

        response.sendRedirect("相对路径");

请求转发:(一次请求,地址栏看不到改变,数据不丢失,可以getParameter数据,也可以getAttribute数据)

        request.getRequestDispatcher("相对路径").forward(request,response);

1、请求转发与重定向的异同点如下:

  1. 请求转发和重定向都可以实现访问一个资源时转向当前应用资源
  2. 请求转发一次请求一次响应,而重定向两次请求两次响应

3)一般情况下应该使用请求转发减少浏览器对服务器的访问减轻服务器压力

4)如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向

第7章重点记忆归纳:(题目分布:填空、选择)

  1. JavaBean技术概念和使用。

Javabean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类。

<jsp:useBean>标签用来声明JavaBean对象

JSP提供了访问JavaBean属性的标签,如果要将JavaBean的某个属性输出到网页上,可以用<jsp:getProperty>标签。如果要给JavaBean的某个属性赋值,可以用<jsp:setProperty>标签

  1. EL表达式以及JSTL标签库的基本使用。

EL表达式定义规则:以$符号开头,内容写在{}中,例如:$(test)

EL表达式的隐形变量:

pageContext:用来访问JSP的隐形对象。

pageScope:page对象的Map

requestScope:request对象的Map

sessionScope:session对象的MAP

applicationScope:application对象的MAP

param:包含请求的参数的字符串MAP

cookie:按照名称存储请求附带cookie的MAP

假设我们是想要session中的name值,那么我们可以使用:${sessionScope.name},

request.getParamter(name)相当于是${param.name}

如果我们想要得到一个参数的数组,可以使用:${paramValues.name},当然,返回的是一个数组对象。

简述Javabean规范都有哪些?

1)它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的缺省构造方法。

2)它提供公共的setter方法和getter方法让外部程序设置和获取JavaBean的属性。

3)它是一个公有类

4)通常需要实现java.io.Serializable,用于序列化。

简述定义EL标识符的规范。

  1. 可以由任意顺序的大小写字母、数字和下划线组成
  2. 不能以数字开头
  3. 不能是EL中的保留字,如andorgt
  4. 不能是EL隐式对象,如pageContext
  5. 不能包含单引号(')、双引号(")、减号(-)和正斜线等特殊字符

第8章重点记忆归纳:(题目分布:简答、程序)

  1. 理解概念、原理,掌握配置。

过滤器

Filter被称作过滤器或者拦截器,其基本功能就是Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。

Filter工作原理(执行流程)       

       当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。请求信息在过滤器链中可以被修改,也可以根据条件让请求不发往资源处理器,并直接向客户机发回一个响应。当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。同样在这个过程中,用户可以修改响应信息,从而完成一定的任务。

  1. 过滤器处理过程:对请求、响应进行过滤;对数据放行

        3、Filter过滤器就是一个实现了javax.servlet.Filter接口的类:

           实现三个核心方法:init()、destroy()、doFilter();

           其中init()、destroy()原理、执行时机同Servlet一样;

           过滤器为了实现过滤谁,需要配置拦截谁,过程类似servlet;

               拦截路径或通配符拦截;

               过滤器链:可以配置多个过滤器,过滤器的先后顺序是由<filter-mapping>的位置决定

               dispatcher请求方式:

               request:拦截HTTP请求 get post;

               forward:只拦截通过请求转发方式的请求;

          通过doFilter()处理拦截,并且通过chain.doFilter(request,response)放行;

4、在程序中的部署和使用,网站统一字符编码过滤器的使用。

第9章重点记忆归纳:(题目分布:简答、程序)

    1.理解JDBC存在的意义、概念、原理。

概念:Java DataBase Connectivity:使用Java代码发送sql语句的技术就是jdbc技术

作用:与数据建立起连接,使java能实现对数据库的操作。

请简述什么是JDBC

JDBC的全称是Java数据库连接Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等处理。

简述JDBC的实现步骤。

JDBC实现步骤如下:

1)加载并注册数据库驱动

2)通过DriverManager获取数据库连接

3)通过Connection对象获取Statement对象

4)使用Statement执行SQL语句

5)操作ResultSet结果集

6)关闭连接,释放资源

请编写一个用于读取数据库中users表信息的JDBC程序,要求分别获取字段idnamepasswordemail字段的值。

public class Example01 {

public static void main(String[] args) throws SQLException {

    // 1. 注册数据库的驱动

    DriverManager.registerDriver(new com.mysql.jdbc.Driver());

Class.forName("com.mysql.jdbc.Driver");

    // 2.通过DriverManager获取数据库连接

    String url = "jdbc:mysql://localhost:3306/jdbc";

    String username = "root";

    String password = "itcast";

    Connection conn = DriverManager.getConnection(url, username, password);

    // 3.通过Connection对象获取Statement对象

    Statement stmt = conn.createStatement();

    // 4.使用Statement执行SQL语句。

    String sql = "select * from users";

    ResultSet rs = stmt.executeQuery(sql);

    // 5. 操作ResultSet结果集

    System.out.println("id | name   | password | email  |");

    while (rs.next()) {

        int id = rs.getInt("id"); // 通过列名获取指定字段的值

        String name = rs.getString("name");

        String psw = rs.getString("password");

        String email = rs.getString("email");

        System.out.println(id + " | " + name + " | " + psw + " | " + email);

    }

    // 6.回收数据库资源

    rs.close();

    stmt.close();

    conn.close();

}

}

    2.JDBC API主要功能:通过以下类/接口实现

        DriverManager:管理jdbc驱动

        Connection:连接(通过DriverManager产生)

        Statement(PreparedStatement):增删改查(通过Connection产生)

        CallableStatement:调用数据库中的存储过程/存储函数(通过Connection产生)

        Result:返回的结果集(Statement,PreparedStatement产生)

    3.jdbc访问数据库的具体步骤:

       a.导入驱动,加载具体的驱动类

       b.与数据库建立连接

       c.发送sql,执行

       d.处理结果集(查询)

e.关闭

    4.推荐使用PreparedStatement:原因如下:

        1、编码简便,不易写错

        String name="ls";

        String password="1234";

        stmt:

        String sql="insert into user(name,password)values('"+name+"','"+password+"')";

        stmt.executeUpdate(sq1);

        pstmt:

        String sql="insert into user(name,password) values(?,?)";

        pstmt=connection.prepareStatement(sq1);//预编译SQL

        pstmt.setString(1,name);

       pstmt.setString(2,password);

        2、性能高,预编译速度快。

        3、有效防止SQL注入漏洞。

        stmt:存在被sq1注入的风险

        (例如:    输入用户名:任意值’or 2=2--        密码:任意值)

        select count(*)from user where name='"+name+"' and password='"+password+"';

        select count(*)from user where name='ls'and password='1234’;

        select count(*)from user where name='任意值’or 2=2--'and password='任意值’;

        select count(*)from user where name='任意值’or 2=2;

        select count(*)from user;

        pstmt:有效防止sql注入

第10章重点记忆归纳:(题目分布:填空、简答

  1. 重点概念、原理。

什么是连接池和连接池的作用

数据连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是建立连接

连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。

请思考数据库连接池的工作机制是什么?

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,应用程序访问数据库时并不是直接创建Connection,而是向连接池“申请”一个Connection。如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率。

简述DriverManagerDataSource中的getConnection()方法的区别。

DriverManagerDataSource中的getConnection()方法的区别如下:

1DriverManager每次调用getConnection方法都会初始化一个新的连接,而DataSourcegetConnection只是从池中取出一个已存在的连接

2DriverManagerclose()释放Connection,而DataSourceclose()只会把Connection归还给连接池

2、不用连接池

        Class.forName();作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。

        Connection connection =DriverManager.getConnection();//连接指向数据库

        3、用连接池的核心:将连接的指向数据源而不是数据库。

        ...->DataSource ds=….

        Connection connection =ds.getConnection();//指向的是数据源的连接

        数据库访问核心->pstmt/stmt->connection->1.直接数据库 2.数据源

第11章重点记忆归纳:(题目分布:程序)

  1. 重点JSP Model1和JSP Model2的原理及使用过程。

Model1应用了JavaWeb开发当中的两种技术,即JSP和JavaBean技术,所以Model1就是JSP+JavaBean模式。其中JSP需要独自完成响应用户的请求并将处理结果返回给用户,同时还需要完成流程的控制处理;而JavaBean进行辅助,如保存从数据库中查询出来的数据等。

Model 2架构模式是一种把JSP与Servlet联合使用来实现动态内容服务的方法,所以Model2就是JSP+Servlet+JavaBean模式。它吸取了两种技术各自的突出优点,使用JSP生成表达层的内容,使用Servlet完成深层次的处理任务。在Model 2中,Servlet充当控制者的角色,负责管理对请求的处理,创建JSP页面所需的JavaBean和对象,同时根据用户的动作决定把哪个JSP页面传给用户。特别要注意,在JSP页面内没有处理逻辑,它仅负责检索原先由Servlet创建的对象或JavaBean,然后从Servlet中提取动态内容插入到静态模板中进行页面显示。

简述什么是MVC设计模式。

MVC设计模式是编程语言的一种软件设计模式,提供了一种按功能对软件进行模块划分的方法。MVC设计模式将软件程序分为三个核心模块:模型(Model)、视图(View)和控制器(Controller)

简述MVC设计模式中模型(Model)模块的作用。

MVC设计模式中模型(Model)模块的作用如下:

  1. 管理应用程序的业务数据
  2. 定义访问控制和修改这些数据的业务规则
  3. 模型的状态发生改变时,它会通知视图发生改变,并为视图提供查询模型状态的方法

第12章重点记忆归纳:(题目分布:填空、选择)

  1. 重点理解文件上传、下载原理。    

<form enctype=”multipart/form-data” method=”post”>

   

九大内置对象(又叫隐含对象)

对象类型

内置对象名

类型

对象简介

输入输出对象

request   

HttpServletRequest

封装了来自客户端、浏览器的各种信息。

response

HttpServletResponse

封装了服务器的响应信息。

out

JspWriter

用于向客户端、浏览器输出数据。

通信控制对象

application

ServletContext

代表了当前应用程序的上下文。

可以在不同的用户之间共享信息。

session

HttpSession

用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数据。

pageContext

PageContext

提供了对jsp页面所有对象以及命名空间的访问。

Servlet对象

page

Object(this)

指向了当前jsp程序本身。

config

ServletConfig

封装了应用程序的配置信息。

错误处理对象

exception

Throwable

封装了JSP程序执行过程中发生的异常和错误信息。

常用的内置对象有: requestresponsesessionapplicationout

page(pageContext):只在一个页面中保存属性。 跳转之后无效。

request:只在一次请求中有效,服务器跳转之后有效。 客户端跳无效

session:一次会话中有效。服务器跳转、客户端跳转都有效。 网页关闭重新打开无效

application:整个服务器上保存,所有用户都可使用。 重启服务器后无效

四大域对象

作用:保存数据和获取数据,用于数据共享。

ServletContext

context域

只能在同一个web应用中使用 (全局的)

HttpServletRequet

request域

只能在同一个请求中使用(转发)

HttpSession

session域

只能在同一个会话(session对象)中使用 (私有的)

PageContext

page域

只能在当前jsp页面使用 (当前页面)