javaweb基础知识入门

news2024/11/15 23:55:18

javaweb

1.基本概念

1.1前言

web开发:

  • web,网页的意思,www.baidu.com

  • 静态web

    • html,css

    • 提供给所有人看的数据始终不会发生变化!

  • 动态web

    • 淘宝...等几乎是所有的网站

    • 提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同

    • 技术栈: Servlet/JSP,ASP,PHP

在java中,动态web资源开发的技术统成为javaweb

1.2 web应用程序

程序是什么: 数据结构+算法

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

  • a.html、b.html....多个web资源,这些web 资源可以被外界访问,对外界提供服务

  • 你们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上

  • URL

  • 这个统一的web资源会被放在同一个文件夹下,web应用程序--->Tomcat :服务器

  • 一个web应用由多部分组成(静态web,动态web)

    • html,css,js

    • jsp,servlet

    • java程序

    • jar包

    • 配置文件(Properties)

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

1.3静态web

  • .htm,.html,如果服务器上一直存在这些东西,我们就可以直接进行读取

  • web页面存在的缺点

    web页面无法动态更新,所有用户看到的都是同一个页面

    轮播图,点击特效:伪动态

    JavaScript(实际开发中用的最多)

    VBScript

    它无法和数据库交互(数据无法持久化,用户无法交互)

1.4动态web

缺点:

加入服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布,这个时候可以停机维护

优点:

web页面可以动态更新,所有用户看到的都不是一个页面

它可以与数据库交互(数据持久化:注册,商品信息,用户信息....)

2.web服务器

ASP:

  • 微软:国内最早流行的就是ASP

  • 在HTML中嵌入了VB的脚本,ASP+COM

  • 在ASP开发中,基本每一个页面都有几千行的业务代码,页面很乱

  • <h1>
        <h1> <h1>
            <h1>
                <h1>
                    <%
            System.out.println("hello")
                   
                       %>
                    <h1>
                        <h1>

  • 维护成本高

  • C# IIS

php

  • php开发速度很快,功能很强大 ,跨平台,代码很简单(70%,WP)

  • 无法承载大访问量的情况(局限性)

JSP/Servlet

B/S:浏览和服务器

C/S:客户端和服务器

  • sun公司主推的B/S架构

  • 基于java语言的(所有大公司,或者一些开源的组件,都是用java写的)

  • 可以承载三高问题带来的影响(高并发,高可用,高性能)

2.1web的有关服务器

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

IIS

微软的,ASP....,Windows中自带的

Tomcat

面向百度编程

修改信息 在 conf包的server.xml里面

默认端口号:

tomcat的默认端口号为:8080

mysql: 3306

http:80

https:443

默认的主机名为:localhost->127.0.0.1

默认网站应用存放的位置为:webapps

面试题:

请你谈谈网站是如何进行访问的!

1.输入一个域名;回车

2.回车检查本机的 C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射

有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问

没有:就去DNS服务器找,找到的话就返回,找不到就返回找不到

发布一个web网站

不会就先模仿

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

网站应该有的结构

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

3.Http

3.1什么是Http

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

  • 文本: html,字符串,~...

  • 超文本:图片,音乐,视频,定位,地图......

https:443 安全的

3.2两个时代

  • http1.0

    • HTTP/1.0: 客户端可以与web服务器连接后,只能获得一个web资源 短连接

  • http2.0

    • HTTP/1.1 客户端可以与web服务器连接后,可以获得多个web资源 长连接

3.3Http请求

  • 客户端--发请求--服务器

  • 请求行

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

    请求方式:Get/Post

    post:能够携带的参数没有限制,大小有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效

3.4Http响应

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

3.5响应状态码:

200:请求响应成功

3**:请求重定向

重新到我给你的新位置去

404:找不到资源

5**: 服务器代码错误 500 502网关错误

常见面试题: 当你的浏览器中地址栏输入地址并回车的一瞬间页面展示的过程,经历了什么

4.Maven

在javaweb开发中,需要用到大量的jar包,我们需要手动导入

Maven诞生了

4.1Maven项目架构管理工具

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

Maven会规定好你该如何去编写java代码

###

5.Servelt

Servelt就是sun公司开发动态web的一门技术

Sun在这些API中提供一个接口叫做:Servelt,如果你想开发一个Servelt程序,需要完成两个步骤:

1.编写一个类,实现Servelt接口

2.把开发好的java类部署到web服务器中

把实现了Servelt接口的java程序,叫做Servelt

Servelt接口Sun公司有两个默认的实现类:HTTPServelt,GenericServelt

3.编写Servelt的映射

为什么需要映射:我们写的是ava程序,但是需要通过浏览器访问,浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servelt,还需要给他一个浏览器能够访问的路径

Servelt原理

Servelt是由web服务器调用

5.1.Mapping问题

1.一个Servlet可以指定一个映射路径

<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>

2.一个Servlet可以指定多个映射路径

3.一个Servlet可以指定通用映射路径

<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello/*</url-pattern>
  </servlet-mapping>

4.默认通用路径

<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

5.指定一些后缀或者前缀等等.....

<!--  可以自定义后缀实现请求映射
注意点: *前面不能加项目映射的路径-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>*.qiannan</url-pattern>
  </servlet-mapping>

5.2ServletContext

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

5.2.1共享数据:

我在这个Servelt中保存的数据,可以在另一个Servelt中拿到

1.放置它的

public class servelt extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //this.getServletConfig()  Servelt配置
       // this.getInitParameter()  初始化参数
       // this.getServletContext()  Servelt上下文
        ServletContext context = this.getServletContext();
        String username = "倩楠";
        context.setAttribute("username",username);
​
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

2.读取它的

public class GetServelt extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
   String username = (String) context.getAttribute("username");
   resp.setCharacterEncoding("utf-8");
   resp.setContentType("text/html");
   resp.getWriter().print(username);
​
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

3.配置xml

<web-app
        xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
     <servlet>
       <servlet-name>hello</servlet-name>
       <servlet-class>com.yang.servelt</servlet-class>
     </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
    <servlet>
        <servlet-name>getc</servlet-name>
        <servlet-class>com.yang.GetServelt</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getc</servlet-name>
        <url-pattern>/getc</url-pattern>
    </servlet-mapping>
    
</web-app>
5.2.2请求转发
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("进入了Demo03");
    ServletContext context = this.getServletContext();
    context.getRequestDispatcher("/hello").forward(req,resp);
​
}
5.2.3读取资源文件

Properties

在java目录下新建Properties 如果打包不了可以参考狂神javaweb11集给web.xml添加build

在resources目录下新建Properties

发现:都被打包到了同一路径下:classes,我们俗称这个路径为classpath

思路:需要一个文件流

username = root
password = 123456
public class ServeltDemo05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties prop = new Properties();
        prop.load(is);
        String user = prop.getProperty("username");
        resp.getWriter().print(user);
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet (req, resp);
    }
}

5.3HttpServletResponse

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

如果要获取客户端请求过来的参数:找HttpServeltRequest

如果要给客户端响应一些信息:找HttpServletResponse

    1. 简单分类: 负责向浏览器发送数据的方法

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

2.常见应用

  • 向浏览器输出消息

  • 下载文件

    • 要获取下载文件的路径

    • 下载的文件名是啥

    • 设置想办法让浏览器能够支持下载我们需要的东西

    • 获取下载文件的输入流

    • 创建缓冲区

    • 获取OutputStream对象

    • 将FileOutputStream流写入到buffer缓冲区

    • 使用OutputStream将缓冲区中的数据输出到客户端

    • public class FileServelt extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //               * 要获取下载文件的路径
              String realPath = "D:\\diea2\\javaweb-03-Servelt\\Servelt-05\\src\\main\\resources\\1.jpg";
              System.out.println("下载文件的路径:"+realPath);
      //                * 下载的文件名是啥
              String filename = realPath.substring(realPath.lastIndexOf("\\") + 1);
      ​
      //                * 设置想办法让浏览器能够支持下载我们需要的东西  URLEncoder.encode将图片改为中文文件名,否则会乱码
              resp.setHeader("Content-disposition","attachment;filename"+ URLEncoder.encode(filename,"UTF-8"));
      //                * 获取下载文件的输入流
              FileInputStream in = new FileInputStream(realPath);
      //                * 创建缓冲区
              int len =0;
              byte[] buffer = new byte[1024];
      ​
      //                * 获取OutputStream对象
              ServletOutputStream out = resp.getOutputStream();
      ​
      //                * 将FileOutputStream流写入到buffer缓冲区     * 使用OutputStream将缓冲区中的数据输出到客户端
              while((len=in.read(buffer))!=-1){
                  out.write(buffer,0,len);
              }
              in.close();
              out.close();
          }
      ​
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }

reponse验证码实现

实现重定向

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

public class RedirecctServelt extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.sendRedirect("/Servelt_05_war/dp");  //               先/自己tomcat设置的那个路径再/要跳转的路径
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

常见场景: 用户登录

重定向和转发的区别:

相同点:页面都会实现跳转

不同点:请求转发的时候,url不会产生变化

重定向的时候,url地址栏会产生变化

5.4HttpServeltRequest

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

 
public class TestRequest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入这个请求了");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username+password);
        //重定向一定要注意路径问题,否则会404
        resp.sendRedirect("/Servelt_05_war/aaa.jsp");
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
获取参数

,请求转发,转发是服务器内部进行,不需要加项目路径

6.Cookie .Session

6.1会话

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

6.2保存会话的两种技术

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

session 服务器技术,可以保存用户的会话信息,我们可以把信息或者数据放入session中

常见:网站登录以后,你下次可以不在登录,第二次访问直接就进去了

6.3Cookie

1.从请求中拿到cookie信息

2.服务器响应给客户端cookie

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

4.一般网站cookie存在上限

一个Cookie只能保存一个信息

一个web站点可以给浏览器发送多个cookie,最多存放20个cookie

Cookie大小有限制比如说4kb

一个浏览器有上限比如说有300个cookie

删除Cookie:

1.不设置有效期,关闭浏览器,自动失效

2.设置有效时间为0

public class CookieDemo01 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");
​
    PrintWriter out = resp.getWriter();
    Cookie[] cookies = req.getCookies();//这里返回数组,说明cookie可能存在多个
    //判断cookies是否存在
    if(cookies!=null){
        //如果存在
        out.write("你上一次访问的时间是");
        for (int i = 0; i < cookies.length; i++) {
            Cookie cookie = cookies[i];
            //获取cookie的名字
            if(cookie.getName().equals("LastLoginTime")){
                //获取cookie中的值
​
                long LastLoginTime = Long.parseLong(cookie.getValue());
                Date date = new Date(LastLoginTime);
                out.write(date.toLocaleString());
            }
        }
​
    }else{
        out.write("这是你第一次访问本站");
    }
    //服务器给客户端响应一个cookie
        Cookie cookie = new Cookie("LastLoginTime",System.currentTimeMillis()+"");
         cookie.setMaxAge(24*60*60);//cookie有效期为一天
        resp.addCookie(cookie);
​
​
​
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

6.4Session(重点)

1.服务器会给每一个用户(浏览器)创建一个Session对象

2.一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在

3.用户登录之后,整个网站它都可以访问 -->保存用户的信息

Session 和Cookie的区别:

1.Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)

2.Session是把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)

3.Session对象由服务器创建

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","倩楠");
        //获取Session的id
        String id = session.getId();
        //判断Session是不是新创建的
        if(session.isNew()){
            resp.getWriter().write("session创建成功:"+id);
        }else{
            resp.getWriter().write("session已经在服务器创建了"+id);
        }
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

7.JSP

7.1什么是JSP

Java Server Pages: java服务端页面,也和Servelt异样,用于动态Web技术!

最大的特点:

  • 写JSP就像在写HTML

  • 区别:

    HTML只给用户提供静态的数据

    JSP页面中可以嵌入JAVA代码,为用户提供动态数据

7.2JSP原理

JSP到底怎么执行的

  • 代码层面没有任何问题

  • 服务器内部工作

    tomcat中有一个work目录

    IDEA中使用Tomcat的会在tomcat中生产一个work目录

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

JSP最终也会被转化成java类

JSP本质上就是一个Servlet

在JSP页面中:

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

如果是HTML代码,就会被转换为这样的格式输出到前端

out.write("<html>\r\n");

7.3JSP基础语法

任何语言都有自己的语法,JSP作为java技术的一种应用,它拥有一些自己扩充的语法(了解即可),java所有语法都支持

JSP表达式

<%---JSP表达式
  作用:用来将程序输出,输出到客户端
  <%=变量或者表达式%>
    ---%>
<%= new java.util.Date()   %>
</body>
</html>

JSP脚本片段

<%
   int sum = 0;
   for(int i=1;i<=100;i++){
       sum+=i;
   }
   out.println("<h1>Sum="+sum+"</h1>");
​
%>

JSP的注释不会再客户端显示,HTML就会

7.4JSP指令

<%@page errorPage="500.jsp"  %>  错误页面的指定
<%@include file=""%>

7.5 9大内置对象

  • PageContext 存东西

  • Request 存东西

  • Response

  • Session 存东西

  • Application {SerlvetContext} 存东西

  • config {ServeltConfig}

  • out

  • page

  • exception

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%-- 内置对象--%>
<%
    pageContext.setAttribute("name1","倩楠1号"); //保存的数据只在一个页面中有效
    request.setAttribute("name2","倩楠2号");//保存的数据只在一个请求中有效,请求转发会携带这个数据
    session.setAttribute("name3","倩楠3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
    application.setAttribute("name4","倩楠4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
​
%>
<%-- 脚本中的代码会被原封不动的生成到JSP.java
 要求:这里面的代码必须保证java语法的正确性--%>
<%
    //从pageContext取出,我们通过寻找的方式来
    //从底层到高层(作用域)
   String name1 = (String) pageContext.getAttribute("name1");
   String name2 = (String) pageContext.getAttribute("name2");
   String name3 = (String) pageContext.getAttribute("name3");
   String name4 = (String) pageContext.getAttribute("name4");
   String name5 = (String) pageContext.getAttribute("name5");
​
%>
<%--使用EL表达式输出 ${}--%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3><%=name5%></h3>
​
​
</body>
</html>

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

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

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

7.6JSP标签 JSTL标签 EL表达式

   <!-- jstl 表达式-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.1.2</version>
        </dependency>
<!-- standard标签库的   -->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

EL表达式: ${}

  • 获取数据

  • 执行运算

  • 获取web开发的常用对象

JSTL表达式

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

核心标签

使用步骤:

引入对应的taglib

使用其中的方法

8.JavaBean

实体类

JavaBean有特定的写法:

  • 必须要有一个无参构造

  • 属性必须私有化

  • 必须有对应的get/set方法

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

ORM:对象关系映射

表-->类

字段--->属性

行记录--->对象

9.MVC三层架构

Model view Controller 模型 视图 控制器 可以理解为 数据 页面 执行逻辑

Model:

  • 业务处理:业务逻辑(Service)

  • 数据持久层: CRUD (Dao)

View:

  • 展示数据

  • 提供链接发起Servlet请求(a,form,img....)

Controller(Servlet)

  • 接受用户的请求:(req:请求参数 Session信息.....)

  • 交给业务层处理对应的代码

  • 控制视图的跳转

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

10.Filter(重点)

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

1.导包实现接口

 

2.

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("CharacterEncodingFilter执行前....");
        filterChain.doFilter(servletRequest,servletResponse);//让我们的请求继续走,如果不写,程序到这里就截止
        System.out.println("CharacterEncodingFilter执行后....");
    }
//销毁   web服务器关闭的时候会销毁
    @Override
    public void destroy() {
        System.out.println("CharacterEncodingFilter销毁");
    }
}

用户登陆后才能进入主页,注销以后就不能进主页!

1.用户登录后,向Session中放入用户的数据

2.进入主页的时候要判断是否已经登陆,要求在过滤器中实现

public class SysFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
​
    }
​
    @Override
    public void doFilter(ServletRequest req, ServletResponse rep, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse  response = (HttpServletResponse) rep;
        if(request.getSession().getAttribute("USER_SESSION")==null){
            response.sendRedirect("404.jsp");
        }
​
        filterChain.doFilter(req,rep);
​
    }
​
    @Override

3.在web.xml里面配置

  

  <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>com.yang.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/servelt/*</url-pattern>
    </filter-mapping>

11.监听器

GUI编程经常使用 GUI:图形界面编程

12.JDBC

JDBC:java连接数据库

需要jar包的支持:

  • java.sql

  • javax.sql

  • mysql-connector-java... 连接驱动必须的

Junit单元测试

<!-- junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

简单使用

@Test注解只有在方法上有效,只要加了这个注解就可以直接运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac生成.dmg压缩镜像文件

mac生成.dmg压缩镜像文件 背景准备内容步骤1&#xff0c;找一个文件夹2&#xff0c;制作application替身1&#xff0c;终端方式2&#xff0c;黄金右手方式 3&#xff0c;.app文件放入文件夹4&#xff0c;制作.dmg压缩镜像文件5&#xff0c;安装.dmg 总结 背景 为绕开App Store…

头歌资源库(27)特别的数

一、 问题描述 编程输出一个特别的数&#xff0c;该数是一个由1~9组成的9位数&#xff0c;每个数字只能出现一次&#xff0c;且这个9位数由高位到低位前i位能被i整除。 二、算法思想 创建一个长度为9的数组&#xff0c;用于存放1~9这9个数字。使用回溯算法&#xff0c;从第…

Visual Studio 2019 (VS2019) 中使用 CMake 配置 OpenCV 库(快捷版)

2024.07.11 测试有效 最近需要用一下 opencv 处理图像&#xff0c;简单配置了一下Cmake下的 opencv 库。 没有编译 opencv &#xff0c;也不知道他们为什么要自己编译 opencv 。 一、下载并安装 OpenCV 1.前往 OpenCV 官方网站 下载适用于您的系统的 OpenCV 安装包。 2.点击直接…

在分布式环境中,怎样保证 PostgreSQL 数据的一致性和完整性?

文章目录 在分布式环境中保证 PostgreSQL 数据的一致性和完整性一、数据一致性和完整性的重要性二、分布式环境对数据一致性和完整性的挑战&#xff08;一&#xff09;网络延迟和故障&#xff08;二&#xff09;并发操作&#xff08;三&#xff09;数据分区和复制 三、保证 Pos…

PFH点特征直方图

PFH特征描述子原理 该算法通过参数化查询关键点与其周围邻域点之间的空间差异,形成一个多维度直方图,从而实现对该点的邻域几何属性的描述。 该方法具有以下三个优势: (1)刚性变换不变性,即不受旋转、平移变换的影响; (2)采样一致性,即改变采样密度,特征保…

【高中数学/指数函数、对数函数、正弦函数】求 y=2^x+x,y=log2_x+x,y=2*sinX+x 的零点位置大小关系

【问题】 已知函数f(x)2^xx,g(x)log2_xx,h(x)2*sinXx 的零点分别是a,b,c,则a、b、c的大小顺序是&#xff1f; 【解答】 粗览三个函数&#xff0c;h(x)2*sinXx的零点是最好解决的&#xff0c;明显x0时h(x)0&#xff0c;因此c在原点的位置&#xff1b; 对于f(x)2^xx&#xff…

css预编译器--sass

Sass Sass 提供了 变量&#xff08;variables&#xff09;、嵌套规则&#xff08;nested rules&#xff09;、 混合&#xff08;mixins&#xff09;、 函数&#xff08;functions&#xff09;&#xff0c;目前我使用最多的还是变量和嵌套规则&#xff0c;貌似目前css也支持嵌套…

kafka发送消息流程

配置props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class); public Map<String,Object> producerConfigs(){Map<String,Object> props new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers…

代码随想录算法训练营Day36||动态规划part04

494.目标和&#xff1a;本题的方法主要用来解决------装满容量为x的背包&#xff0c;有几种方法。 可以先理解二维数组的思路&#xff1a;感觉b站一个评论写得很清晰&#xff0c;借用一下。 这题最难理解的地方在于如何初始化数组&#xff0c;为什么dp[0]1&#xff1b;我试图自…

【C++BFS】690. 员工的重要性

本文涉及知识点 CBFS算法 LeetCode690. 员工的重要性 你有一个保存员工信息的数据结构&#xff0c;它包含了员工唯一的 id &#xff0c;重要度和直系下属的 id 。 给定一个员工数组 employees&#xff0c;其中&#xff1a; employees[i].id 是第 i 个员工的 ID。 employees[…

企业数据治理做完了,如何让业务部门用起来

引言&#xff1a;企业数据治理完成后&#xff0c;确保业务部门能够充分利用这些数据并融入日常运营中&#xff0c;是实现数据价值最大化的关键步骤。以下是一些策略和建议&#xff0c;帮助推动业务部门使用数据治理成果&#xff1a; 一、管理层面推广 高层应用示范&#xff1…

kafka与zookeeper的SSL认证教程

作者 乐维社区&#xff08;forum.lwops.cn&#xff09;许远 在构建现代的分布式系统时&#xff0c;确保数据传输的安全性至关重要。Apache Kafka 和 Zookeeper 作为流行的分布式消息队列和协调服务&#xff0c;提供了SSL&#xff08;Secure Sockets Layer&#xff09;认证机制&…

在 PostgreSQL 里如何实现数据的缓存失效策略的优化?

文章目录 《在 PostgreSQL 中优化数据缓存失效策略》一、理解 PostgreSQL 中的数据缓存二、常见的数据缓存失效策略三、优化数据缓存失效策略的方法&#xff08;一&#xff09;合理调整共享缓冲区大小&#xff08;二&#xff09;使用 PostgreSQL 的缓存统计信息&#xff08;三&…

SSE(Server-Send-Event)服务端推送数据技术

SSE&#xff08;Server-Send-Event&#xff09;服务端推送数据技术 大家是否遇到过服务端需要主动传输数据到客户端的情况&#xff0c;目前有三种解决方案。 客户端轮询更新数据。服务端与客户端建立 Socket 连接双向通信服务端与客户建立 SSE 连接单向通信 几种方案的比较&…

实变函数精解【3】

文章目录 点集求导集 闭集参考文献 点集 求导集 例1 E { 1 / n 1 / m : n , m ∈ N } 1. lim ⁡ n → ∞ ( 1 / n 1 / m ) 1 / m 2. lim ⁡ n , m → ∞ ( 1 / n 1 / m ) 0 3. E ′ { 0 , 1 , 1 / 2 , 1 / 3 , . . . . } E\{1/n1/m:n,m \in N\} \\1.\lim_{n \rightar…

Spark SQL 概述

Spark SQL 概述 Spark SQL 是 Apache Spark 的一个模块&#xff0c;专门用于处理结构化数据。它集成了 SQL 查询和 Spark 编程的强大功能&#xff0c;使得处理大数据变得更加高效和简便。通过 Spark SQL&#xff0c;用户可以直接在 Spark 中使用 SQL 查询&#xff0c;或者使用 …

i18n、L10n、G11N 和 T9N 的含义

注&#xff1a;机翻&#xff0c;未校对。 Looking into localization for the first time can be terrifying, if only due to all of the abbreviations. But the meaning of i18n, L10n, G11N, and T9N, are all very easy to understand. 第一次研究本地化可能会很可怕&…

Git 删除包含敏感数据的历史记录及敏感文件

环境 Windows 10 Git 2.41.0 首先备份你需要删除的文件&#xff08;如果还需要的话&#xff09;&#xff0c;因为命令会将本地也删除将项目中修改的内容撤回或直接提交到仓库中&#xff08;有修改内容无法提交&#xff09; 会提示Cannot rewrite branches: You have unstaged …

给后台写了一个优雅的自定义风格的数据日志上报页面

highlight: atelier-cave-dark 查看后台数据日志是非常常见的场景,经常看到后台的小伙伴从服务器日志复制一段json数据字符串,然后找一个JSON工具网页打开,在线JSON格式化校验。有的时候,一些业务需要展示mqtt或者socket的实时信息展示,如果不做任何修改直接展示一串字符…

音频语言学习领域数据集现状、分类及评估

Audio Language Learning (Audio-Text Learning) 是一个新兴的研究领域&#xff0c;专注于处理、理解和描述声音。它的发展动力是机器学习技术的进步以及越来越多地将声音与其相应的文本描述相结合的数据集的可用性。 Audio Language Models (ALMs) 是这个领域的关键技术&#…