Javaweb---学习笔记

基本概念


web开发:

  • web网页的意思
  • 静态web
    • html,css
    • 提供给所有人看的数据始终不会发生变化
  • 动态web
    • 提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息不相同
    • 技术栈:Servlet/JSP,ASP,PHP

在Java中,动态web资源开发的技术统称为Javaweb;

web应用程序

web应用程序:可以提供浏览器访问的程序;

  • a.html、b.html     多个web资源,这些web资源可以被外界访问,对外界提供服务;
  • 能访问到的任何一个页面或者资源,存在某个计算机上
  • URL
  • 统一web资源会被放在同一个文件夹下,web应用程序-->Tomcat:服务器
  • 一个web应用由多个部分组成(静态web,动态web)
    • html,css,js
    • jsp,servlet
    • java程序
    • jar包
    • 配置文件(Properties)

web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来统一管理;

静态web

  • *.htm,*.html这些都是网页的后缀,如果服务器上一直存在这些东西,就可以直接读取
  • 静态web存在的缺点
    • web页面无法动态更新,所有用户看到都是同一个页面
      •  轮播图 点击特效:伪动态
      • JavaScript【实际开发中,使用最多】
      • VBscript
    • 它无法和数据库交互(数据无法持久化,用户无法交互)

动态web

页面会动态展示:web的页面展示的效果因人而异

 缺点

  • 假如服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布;
    • 停机维护

优点

  • web页面可以动态更新,所有用户看到的都不是同一个页面
  • 可以与数据库交互(数据持久化:注册,信息)

web服务器


ASP

  • 微软:国内最早流行的就是ASP
  • 在HTML中嵌入了VB的脚本,ASP+COM
  • 在ASP开发中,基本一个页面都有几千行的业务代码,页面极其紊乱
  • 维护成本高
  • C#
  • IIS

PHP

  • PHP开发速度很快,功能很强大,跨平台,代码很简单
  • 无法承载大访问量的情况(局限性)

JSP/Servlet

B/S:浏览器和服务器

C/S:客户端和服务器

  • sun公司主推的B/S架构
  • 基于Java语言
  • 可以承载三高问题带来的影响(三高:高并发,高可用,高性能)
  • 语法像ASP

web服务器

服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息;

IIS

Tomcat

Tomcat


server.xml:可以配置启动的端口号

  • tomcat默认端口号:8080
  • MySQL:3306
  • HTTP:80
  • HTTPS:443

 可以配置主机名称

  • 默认的主机名为:localhost->127.0.0.1
  • 默认网站应用存放的位置为:webapps

面试题:

发布一个网站

将自己写的网站,放到服务器(Tomcat)中指定的web应用的文件夹(webapps)下,就可以访问了

网站应该有的结构

--webapps:Tomcat服务器的web目录
    --ROOT
    --XXX: 网站的目录名
        -WEB-INF
            -classes: Java程序
            -lib: web应用所依赖的jar包
            -web.xml:网站配置文件
        -index.html:默认的首页
        -static
            -css
                -style.css
            -js
            -img
        ......

Http


什么是Http

HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP上

  • 文本:html,字符串,~....
  • 超文本:图片,音乐,视频,定位,地图......
  • 80

Https:安全的

  • 443

两个时代

  • http1.0
    • HTTP/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接
  • http2.0
    • HTTP/1.1:客户端可以与web服务器连接后,只能获得一个web资源。

Http请求

  • 客户端---发请求(Request)---服务端

1、请求行

  • 请求行中的请求方式:GET
  • 请求方式:GET,POST,HEAD......
    • get:一次请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示内容,不安全,但高效
    • post:一次请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示内容,安全,但不高效

2、消息头

Accept:浏览器所支持的数据类型
Accept-Encoding:支持哪种编码格式
Accept-Language:浏览器语言环境
Cache-Control:缓存控制
Connection:浏览器请求完成是断开还是保持连接
Host:主机

Http响应

  • 服务器---响应---客户端

 1、响应体

Accept:浏览器所支持的数据类型
Accept-Encoding:支持哪种编码格式
Accept-Language:浏览器语言环境
Cache-Control:缓存控制
Connection:浏览器请求完成是断开还是保持连接
Host:主机
Refresh:客户端多久刷新一次
Location:网页重新定位

 2、响应状态码

200:请求响应成功

3XX:请求重定向

  • 重定向:重新到新出现的位置

4XX:找不到资源

  • 资源不存在

5XX:服务器代码错误

502:网关错误

HTTP状态码_开膛手joker的博客-CSDN博客

Maven


为什么要学习这个技术?

  1. 在Javaweb中,需要使用大量的jar包
  2. 如何能够让一个东西自动帮我导入和配置jar包

由此Maven诞生了

Maven项目架构管理工具

目前使用就是方便导入jar包

Maven的核心思想:约定大于配置

  • 有约束,不要去违反。

Maven会规定好你该如何去编写Java代码,必须要按照规范来

配置MAVEN镜像:

    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

配置本地仓库:

<localRepository>F:\apache-maven-3.8.3\maven-repo</localRepository>

Servlet


Servlet简介

  • Servlet就是sun公司开发动态web的一门技术
  • sun在这些API中提供一个接口叫:Servlet,开发一个Servlet程序,只需完成两步
    • 编写一个类实现Servlet接口
    • 把开发好的Java类部署到web服务器中

把实现了Servlet接口的Java程序叫Servlet

HelloServlet

Servlet接口sun公司有两个默认实现类:HttpServlet,GenericServlet

  1. 创建一个maven项目 删掉里面src目录 以后在这个项目里建module 这个空的工程就是主工程
  2. 关于Maven父子工程的理解:                                                                                                    父项目中会有
        <modules>
            <module>servlet-01</module>
        </modules>

    子项目会有

    <parent>
        <groupId>com.hzx</groupId>
        <artifactId>javaweb-02-servlet</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>

    父项目中的Java子项目可以直接使用

    son extends father

  3. Maven环境优化
    1. 修改web.xml为最新的
    2. 将maven的结构搭建完整
  4. 编写一个servlet
    1. .编写一个普通类
    2. 实现servlet接口,直接继承HttpServlet
  5. 编写servlet映射                                                                                                                           为什么需要映射:写的是Java程序,但通过浏览器访问,浏览器需要连接web服务器,需要再web服务中注册写的servlet,还需给一个访问的路径
  6. 配置Tomcat 注意:配置项目发布的路径
  7. 启动

Servlet原理

Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会

Mapping问题 

优先级问题:

        指定了固有的映射路径优先级最高,找不到就走默认的请求

ServletContext

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用;

  • 共享数据:这个Servlet中保存的数据,可以在另一个Servlet中拿到  
    • 创建放置数据类 读取数据的类 配置web.xml文件
  • 获取初始化参数
    • web.xml配置初始化参数
      context-param
    • 获取初始化参数
      servletContext.getInitParameter("url");
  • 请求转发
    ServletContext servletContext = this.getServletContext();
            RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/gp");//转发的请求路径
            requestDispatcher.forward(req,resp);//调用forwoed实现请求转发

  • 读取资源源文件
    • 在Java目录下新建properties
    • 在resources目录下新建properties

        发现:都被打包到了同一个路径下:classes

        思路:需要一个文件流

HttpServletResponse

web服务器接受到客户端的http请求,针对这个请求分别创建一个代表请求的HttpServletRequest对象,代表响应的HttpServletResponse;

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户响应一些信息:找HttpServletResponse

负责向浏览器发送数据的方法

    ServletOutputStream getOutputStream() throws IOException;

    PrintWriter getWriter() throws IOException;

负责向浏览器发送响应头的方法

    void setCharacterEncoding(String var1);

    void setContentLength(int var1);

    void setContentLengthLong(long var1);

    void setContentType(String var1);

    void setDateHeader(String var1, long var2);

    void addDateHeader(String var1, long var2);

    void setHeader(String var1, String var2);

    void addHeader(String var1, String var2);

    void setIntHeader(String var1, int var2);

    void addIntHeader(String var1, int var2);

 响应状态码

    int SC_CONTINUE = 100;
    int SC_SWITCHING_PROTOCOLS = 101;
    int SC_OK = 200;
    int SC_CREATED = 201;
    int SC_ACCEPTED = 202;
    int SC_NON_AUTHORITATIVE_INFORMATION = 203;
    int SC_NO_CONTENT = 204;
    int SC_RESET_CONTENT = 205;
    int SC_PARTIAL_CONTENT = 206;
    int SC_MULTIPLE_CHOICES = 300;
    int SC_MOVED_PERMANENTLY = 301;
    int SC_MOVED_TEMPORARILY = 302;
    int SC_FOUND = 302;
    int SC_SEE_OTHER = 303;
    int SC_NOT_MODIFIED = 304;
    int SC_USE_PROXY = 305;
    int SC_TEMPORARY_REDIRECT = 307;
    int SC_BAD_REQUEST = 400;
    int SC_UNAUTHORIZED = 401;
    int SC_PAYMENT_REQUIRED = 402;
    int SC_FORBIDDEN = 403;
    int SC_NOT_FOUND = 404;
    int SC_METHOD_NOT_ALLOWED = 405;
    int SC_NOT_ACCEPTABLE = 406;
    int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
    int SC_REQUEST_TIMEOUT = 408;
    int SC_CONFLICT = 409;
    int SC_GONE = 410;
    int SC_LENGTH_REQUIRED = 411;
    int SC_PRECONDITION_FAILED = 412;
    int SC_REQUEST_ENTITY_TOO_LARGE = 413;
    int SC_REQUEST_URI_TOO_LONG = 414;
    int SC_UNSUPPORTED_MEDIA_TYPE = 415;
    int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
    int SC_EXPECTATION_FAILED = 417;
    int SC_INTERNAL_SERVER_ERROR = 500;
    int SC_NOT_IMPLEMENTED = 501;
    int SC_BAD_GATEWAY = 502;
    int SC_SERVICE_UNAVAILABLE = 503;
    int SC_GATEWAY_TIMEOUT = 504;
    int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

常见应用

  1. 向浏览器输出消息
  2. 下载文件
    1. 获取下载文件的路径
    2. 下载文件名是啥
    3. 设置想办法让浏览器能够支持下载需要的东西
    4. 获取下载文件的输入流
    5. 创建缓冲区
    6. 获取OutputStream对象
    7. 将FileOutputStream流写入到buffer缓冲区
    8. 使用OutputStream将缓冲区中的数据输出到客户端
  3. 验证码功能                                                                                                                                 验证码怎么来的
    1. 前端实现
    2. 后端实现,需要使用图片类
  4. 重定向

        一个web资源收到客户端请求后,它会通知客户端去访问另外一个web资源这个过程叫重定向

面试题:重定向和转发的区别

相同点

  • 页面都会发送跳转

不同点

  • 请求转发的时候,url不会产生变化
  • 重定向的时候,url地址栏会发生变化

HttpServletRequest

HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法获取客户端的所有信息。

  1. 获取前端传递的参数                          
  2. 请求转发

(重点)请求转发和重定向的区别:

相同点

  • 页面都会发送跳转

不同点

  • 请求转发的时候,url不会产生变化   307
  • 重定向的时候,url地址栏会发生变化   302

Cookie、Session


会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话

有状态会话

客户端        服务端

  1. 服务端给客户端一个Cookie,客户端下次访问服务端带上Cookie
  2. 服务器登记你来过,下次再来匹配  Session

保存会话的两种技术

Cookie

  • 客户端技术(响应,请求)

Session

  • 服务器技术,利用这个技术,可以保存用户的会话信息。可以把信息和数据放在Session中

常见场景:网站登录之后,下次就不用再登录了,第二次直接访问

Cookie

  1. 从请求中拿到cookie信息
  2. 服务器响应给客户端cookie
    Cookie[] cookies = req.getCookies(); //获得Cookie
    cookie.getName(); //获得Cookie中的key
    cookie.getValue();//获取cookie中的value
    new Cookie();//新建一个cookie
    cookie.setMaxAge();//设置cookie的有效期
    resp.addCookie(cookie);//响应给客户端一个cookie

cookie:一般会保存在本地的用户目录下appdata

一个网站cookie是否存在上限?

  • 一个Cookie只能保存一个信息;
  • 一个web站点可以给浏览器发送多个cookie,每个站点最多存放20个;
  • Cookie大小有限制4KB;
  • 浏览器上限300个cookie;

删除Cookie

  • 不设置有效期,关闭浏览器,自动失效;
  • 设置有效期时间为0;

解决Cookie乱码,编码解码:

URLEncoder.encode();//编码
URLDecoder.decode();//解码

Session(重点)

什么是Session:

  • 服务器会给每一个用户(浏览器)创建一个Session对象
  • 一个Session独占一个浏览器,只要浏览器没有关闭这个Session就存在
  • 用户登录之后,整个网站它都可以访问-->保存用户的信息

Session和Cookie的区别:

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
  • Session把用户的数据写道用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
  • Session对象由服务器创建

使用场景:

  • 保存一个登录用户的信息;
  • 在整个网站中经常会使用的数据,将它保存在Session中;

使用Session:

package com.hzx.servlet;

import com.hzx.pojo.Person;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;

public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        //得到Session
        HttpSession session = req.getSession();

        //给Session中存东西
        session.setAttribute("name",new Person("hzx",22));

        //获得Session的ID
        String sessionId = session.getId();

        //判断Session是不是新创建的
        if(session.isNew()){
            resp.getWriter().write("Session创建成功,SessionID:"+sessionId);
        }else{
            resp.getWriter().write("Session已经存在,SessionID:"+sessionId);
        }

        //Session创建的时候做了什么事情
//        Cookie cookie = new Cookie("JSESSIONID", sessionId);
//        resp.addCookie(cookie);

        //收到注销Session
        session.invalidate();

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

Session过期两种方式:web.xml配置和手动注销

//收到注销Session
session.invalidate();
<!-- 设置Session默认失效的时间 -->
<session-config>
  <!-- 1分组后Session自动失效 以分钟为单位  -->
  <session-timeout>1</session-timeout>
</session-config>

Cookie:

Session:

多访问:

JSP


什么是JSP

Java Server Pages:Java服务器端页面,也和Servlet一样用于开发动态web

最大的特点:

  • 写JSP就像再写HTML
  • 区别:
    • HTML只给用过提供静态数据
    • JSP页面中可以嵌入Java代码,为用户提供动态数据

JSP原理

思路:JSP怎么执行的

  • 服务器内部工作                                                                                                                           tomcat中有一个work目录;                                                                                                         使用idea会在idea的tomcat目录中生成一个work目录 发现页面转变成了Java程序

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet

JSP最终也会被转换成为一个Java类

JSP本质上就是一个Servlet

  1. 判断请求
  2. 内置了一些对象
  3. 输出页面前增加的代码​​​​​​​​​​​​​​​​​​​​​​​​​​​​
  4. 以上的这些对象可以直接JSP页面中直接使用

流程:​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

在JSP页面中

只要是Java 代码就会原封不动的输出

如果是HTML代码,就会被转为

这种格式渲染到前端 

JSP基础语法和指令

任何语言都有自己的语法,Java中有。JSP作为Java技术的一种应用,它有一些扩充的语法

Java所有语言都支持

JSP表达式

<%--
JSP表达式
作用:用来将程序的输出,输出到客户端
<%=  变量或者表达式%>

--%>

<%= new java.util.Date()%>

JSP脚本片段

<%--jsp脚本片段--%>

JSP声明

<%! %>

JSP声明:会被编译到JSP生成的Java类中,其他的就会被生成到_jspService方法中

在JSP中,嵌入Java代码即可。

JSP注释不会在客户端中显示

JSP指令

<%@page ... %>
<%@include ... %>

9大内置对象

  • PageContext       存东西    保存的数据只在一个页面中有效
  • Request        存东西    保存的数据只在一次请求中有效,请求转发会携带这个数据
  • Response
  • Session         存东西    保存数据在一次会话中有效,从打开到关闭浏览器
  • Application【ServletContext】     存东西    保存的数据在服务器中有效
  • config【ServletConfig】
  • out
  • page
  • exception

request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻

session:客户端向服务器发送请求,产生数据,用户用完还会用,比如:购物车

application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可以用,比如:聊天数据

JSP标签、JSTL标签、EL表达式

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

EL表达式:${ }

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象
  • 调用Java方法

JSP标签

<jsp:    >
</jsp:    >

JSTL表达式

JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签,可供我们使用,标签的功能和Java代码一样

JSTL标签库使用步骤

  1. 引入taglib
  2. 使用其中的方法
  3. 在Tomcat中也需要引入JSTL的包,否则会报JSTL解析错误

JavaBean


实体类

JavaBean有特定的写法:

  • 必须要有一个无参构造
  • 属性必须私有化
  • 必须有对应的get/set方法

一般用来和数据库字段做映射        ORM

ORM:对象关系映射

  • 表-->类
  • 字段-->属性
  • 行记录-->对象

id

name        ageaddress
1hzx122wuhan
2hzx223wuhan
3hzx324wuhan
class People{
    private int id;
    private String name;
    private int age;
    private String address;

}

class A{
    new People(1,"hzx1",22,wuhan);
}

MVC三层架构


什么是MVC:Model View Controller 模型、视图、控制器

早些年

用户直接访问控制层,控制层就可以直接操作数据库;

servlet-->crud-->数据库

弊端:程序十分臃肿,不利于维护        servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码

架构:没有什么是加一层解决不了

MVC三层架构

Model

  • 业务处理:业务逻辑(Service)
  • 数据持久层:CRUD(Dao)

View

  • 展示数据
  • 提供链接发起Servlet请求

Controller

  • 接受用户的请求:request请求参数、Session信息等
  • 交给业务层处理对应的代码
  • 控制视图的跳转

登录--->接受用户的登录请求--->处理用户的请求(获取用户登录的参数)--->交给业务层处理登录业务(判断用户名密码是否正确:事务)--->Dao层查询用户名和密码是否正确--->数据库

Filter


Filter:过滤器,用来过滤网站的数据;

  • 处理中文乱码
  • 登录验证...

Filter开发步骤:

  1. 导包
  2. 编写过滤器
    1. 导包不要错                                                                        
    2. 重写Filter接口实现方法
      package com.hzx.filter;
      
      import javax.servlet.*;
      import java.io.IOException;
      
      public class CharacterEncodingFilter implements Filter {
          //初始化  web服务器开启的时候过滤器初始化
          @Override
          public void init(FilterConfig filterConfig) throws ServletException {
              System.out.println("CharacterEncodingFilter初始化");
          }
      
          //Chain:链
          /*
           1、过滤中的所有代码,在过滤特定的请求的时候会执行
           2、必须要让过滤器继续同行
                   filterChain.doFilter(servletRequest,servletResponse);//让请求继续走,如果不写,程序到这就被拦截停止了
      
           */
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              servletRequest.setCharacterEncoding("utf-8");
              servletResponse.setCharacterEncoding("utf-8");
              servletResponse.setContentType("text/html;charset=UTF-8");
              System.out.println("执行前...");
              filterChain.doFilter(servletRequest,servletResponse);//让请求继续走,如果不写,程序到这就被拦截停止了
              System.out.println("执行后...");
          }
      
          //销毁   web服务器关闭的时候过滤器销毁
          @Override
          public void destroy() {
              System.out.println("CharacterEncodingFilter销毁");
          }
      }
      
    3. 配置web.xml
          <filter>
              <filter-name>CharacterEncodingFilter</filter-name>
              <filter-class>com.hzx.filter.CharacterEncodingFilter</filter-class>
          </filter>
          <filter-mapping>
              <filter-name>CharacterEncodingFilter</filter-name>
              <!--  只要是/servlet下的任何请求都会经过这个过滤器      -->
              <url-pattern>/servlet/*</url-pattern>
          </filter-mapping>

监听器


实现一个监听器的接口;(有N中,常用于Java图形化界面开发 GUI编程)

package com.hzx.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class OnlineCountListener implements HttpSessionListener {
    //创建Session监听
    //一旦创建Session就会触发一次事件
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {

        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();

        System.out.println(httpSessionEvent.getSession().getId());
        Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
        if(onlineCount==null){
            onlineCount = new Integer(1);
        }else{
            int count = onlineCount.intValue();
            onlineCount = new Integer(count+1);
        }
        servletContext.setAttribute("OnlineCount",onlineCount);
    }

    //销毁Session监听
    //一旦销毁Session就会触发一次事件
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
        if(onlineCount==null){
            onlineCount = new Integer(0);
        }else{
            int count = onlineCount.intValue();
            onlineCount = new Integer(count-1);
        }
        servletContext.setAttribute("OnlineCount",onlineCount);
        
    }

    /*
    Session销毁:
    1. 手动销毁 getSession().invalidate()
    2. 自动销毁 web.xml中配置
     */
}
------------------------web.xml配置
    <!--  注册监听器  -->
    <listener>
        <listener-class>com.hzx.listener.OnlineCountListener</listener-class>
    </listener>

过滤器、监听器常见应用


监听器:GUI编程中经常使用;

用户登录之后才能进入主页,用户注销之后就不能进入主页

  1. 用户登录之后,向Session中放入用户的数据
  2. 进入主页的时候要判断用户是否已经登录
    package com.hzx.filter;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class SysFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
    
            if(request.getSession().getAttribute("USER_SESSION")==null){
                response.sendRedirect("/error.jsp");
            }
            filterChain.doFilter(servletRequest,servletResponse);
        }
    
        @Override
        public void destroy() {
    
        }
    }
    

JDBC回顾


什么是JDBC:Java连接数据库

需要jar包的支持:

  • Java.sql
  • javax.sql
  • mysql-conneter-java...连接驱动(必须要导入)

JDBC固定步骤:

  1. 加载驱动
  2. 连接数据库
  3. 向数据库发送SQL的对象
  4. 编写SQL
  5. 执行SQL
  6. 关闭连接

事务

要么都成功,要么都失败

ACID原则:保证数据的安全

Junit单元测试

依赖 junit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值