javaweb基础知识入门

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.mfbz.cn/a/794375.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用freepik的retouch功能修改图片

1、准备好需要修改的图片。 2、打开网页&#xff1a;Freepik Retouch - Free AI image editor 3、upload第一步的图片。 4、选择retouch选项。 5、涂抹需要修改的地方。 6、输入提示词。 点击“retouch”按钮。 看结果&#xff1a;

HBase 在统一内容平台业务的优化实践

作者&#xff1a;来自 vivo 互联网服务器团队-Leng Jianyu、Huang Haitao HBase是一款开源高可靠性、扩展性、高性能和灵活性的分布式非关系型数据库&#xff0c;本文围绕数据库选型以及使用HBase的痛点展开&#xff0c;从四个方面对HBase的使用进行优化&#xff0c;取得了一些…

目标识别与跟踪系统

1.资源分配 串口通讯 PA.9 USART1_TX PA.10 USART1_RX OLED显示 PB8,PB.9 状态指示灯 PC.13 按键 PA0光标向下 PA1光标向上 C15确认 C14返回上一级菜单 舵机PWM PA2左右舵机 PA3上下舵机 剩余引脚 PA4,5,6,7,8,11,12,15 PB0,1,3,4,5,6,7,12,13,14,15 2.硬…

水库大坝安全监测险情主要内容

水库常见险情主要包括洪水漫顶、脱坡滑坡、坝体裂缝、 散浸、渗漏、漏洞、陷坑、管涌等&#xff0c;此外风浪冲击、水流冲刷等也会加剧险情的扩大。大坝险情万一抢护不及时&#xff0c;易导致发 生溃坝事故&#xff0c;造成极为严重的灾难性后果。要做到及时有效地 抢护大坝险情…

学习网络的第一步:全面解析OSI与TCP/IP模型

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hello,大家好!我是你们的好朋友小米。今天我们来聊一聊网络基础知识中的重量级选手——OSI模型和TCP/IP模型!网络的世界就像一个巨大的迷宫,而这两个…

CSS 中的 ::before 和 ::after 伪元素

目录 一、CSS 伪元素 二、::before ::after 介绍 1、::before 2、::after 3、content 常用属性值 三、::before ::after 应用场景 1、设置统一字符 2、通过背景添加图片 3、添加装饰线 4、右侧展开箭头 5、对话框小三角 6、插入icon图标 一、CSS 伪元素 CSS伪元…

C++系列-Vector(一)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” Vector的介绍及使用 Vector的介绍 当vector构建的参数类型为char类型时&#xff0c;它是和string是极其类似的&#xff0c;但是二者之间也有不同&#xff0c;比如&#xff0c…

在conda的环境中安装Jupyter及其他软件包

Pytorch版本、安装和检验 大多数软件包都是随Anaconda安装的&#xff0c;也可以根据需要手动安装一些其他软件包。 目录 创建虚拟环境 进入虚拟环境 安装Jupyter notebook 安装matplotlib 安装 pandas 创建虚拟环境 基于conda包的环境创建、激活、管理与删除http://t.cs…

04:定时器

定时器 1、定时器怎么定时2、怎样实现计数&#xff1f;2.1、控制寄存器TCON2.2、工作模式寄存器TCOM2.3、定时器T0 3、案例&#xff1a;通过定时器T0控制LED间隔1s亮灭 当定时器用的时候&#xff0c;靠内部震荡电路数数。当配置为定时器使用时&#xff0c;每经过1个机器周期&am…

全国排名第一的起名大师颜廷利:唯有量力而行,才能。。。

在探索成功与个人成长的旅程中&#xff0c;中国传统哲学提供了一个独特的视角&#xff1a;量力而行&#xff0c;以展现最靓丽的自我。这一理念不仅深植于中国丰富的文化传统之中&#xff0c;而且与现代社会的实用主义不谋而合。 中国最受欢迎的起名大师颜廷利教授&#xff0c;一…

雷士护眼大路灯值得买吗?书客、雷士、琪朗三大护眼落地灯横评实测!

雷士护眼大路灯值得买吗&#xff1f;随着生活水平的提高&#xff0c;更多的人开始关注养生和视力健康&#xff0c;而护眼大路灯因为有能够提高光线质量&#xff0c;也能用来盖上长期用眼造成眼部干涩、酸痛等症状也越来越受消费者青睐。而现在的护眼大路灯市场&#xff0c;品牌…

先导微型雕刻机XD1213创造更多可能性

打造一间现代化教育装备的校园木工创客室&#xff0c;使木工制作、创意设计、科技融合与教育实践于一体的多功能空间&#xff0c;对校园木工创客室配备一些列的木工设备和工具&#xff0c;以满足不同层次的木工制作需求。 校园木工创客室的空间布局应合理、有序&#xff0c;便于…

【鸿蒙学习笔记】关系型数据库概述

目录标题 关系型数据库的运行机制样例代码共通方法 DBUtilsIndex 代码效果 关系型数据库的运行机制 1、 关系型数据库对应用提供通用的操作接口&#xff0c;底层使用SQLite作为持久化存储引擎&#xff0c;支持SQLite具有的数据库特性&#xff0c;包括但不限于事务、索引、视图…

精密制造,光纤激光打标机在电子通讯行业的深度实践

光纤激光打标机&#xff0c;作为激光加工领域的一项先进技术&#xff0c;近年来在电子通讯行业中得到了广泛应用。它利用掺稀土元素玻璃光纤作为增益介质的激光器&#xff0c;通过光纤放大器开发出高功率密度的激光束&#xff0c;对工件表面进行精细加工&#xff0c;形成永久性…

强制升级最新系统,微软全面淘汰Win10和部分11用户

说出来可能不信&#xff0c;距离 Windows 11 正式发布已过去整整三年时间&#xff0c;按理说现在怎么也得人均 Win 11 水平了吧&#xff1f; 然而事实却是&#xff0c;三年时间过去 Win 11 占有率仅仅突破到 29%&#xff0c;也就跳起来摸 Win 10 屁股的程度。 2024 年 6 月 Wi…

Visual Studio 2022 安装及使用

一、下载及安装 VS 官网&#xff1a;Visual Studio: IDE and Code Editor for Software Developers and Teams 下载免费的社区版 得到一个.exe文件 右键安装 选择C开发&#xff0c;并修改安装位置 等待安装 点击启动 二、VS的使用 1.创建项目 打开VS&#xff0c;点击创建新项…

Ubuntu22.04安装NIVIDIA显卡驱动总结

1.首先在安装驱动时需要判断系统有无GPU以及GPU的型号 可以参考这篇文章&#xff1a; https://blog.51cto.com/u_13171517/8814753#:~:textubuntu%20%E7%B3%BB%E7%BB%9F%20%E6%80%8E%E4%B9%88%E5%88%A4%E6%96%AD%E7%B3%BB%E7%BB%9F%E6%9C%89%E6%B2%A1%E6%9C%89GPU%201%20%E6%…

批量提取PDF中表格内容

1 背景 从PDF文件获取表格中的数据&#xff0c;也是日常办公容易涉及到的一项工作。比如我们想获取某公司年报里面的表格数据&#xff0c;PDF动辄上百页的数据。 2 传统方法 一个一个从PDF表格中复制&#xff0c;然后粘贴到Excel表格中&#xff0c;效率太低了。 3 办公自动…

【OC】巧用UIStackView简化布局

UIStackView的运用 文章目录 UIStackView的运用引入UIStackView的作用UIStackView的属性compression resistance 和 huggingaxisalignmentDistributionspacing UIStackView的方法UIStackView的示例 引入 在仿写ZARA的过程之中&#xff0c;我看到软件之中是有大量的按钮排列在一…

一文带你掌握SpringMVC扩展点RequestBodyAdvice和ResponseBodyAdvice如何使用及实现原理

1.概述 Spring MVC是当今web项目系统开发后端技术框架的不二之选&#xff0c;也是Spring全家桶中非常重要的一个成员&#xff0c;它的设计思想和实现套路都是很值得我们学习的&#xff0c;所以今天我们就再来看看Spring MVC框架中预留的两个钩子也就是扩展点&#xff1a;Reque…