当前位置:网站首页 > Java基础 > 正文

java基础c s



目录

前端基础介绍

C/S结构

B/S结构

Tomcat服务器

Javaweb三大组件

Servlet

概念

搭建开发环境

Servlet的生命周期

Servlet类编写

Servlet对象

ServletConfig

ServletContext

请求/响应数据

get和post区别

ServletRequest

HttpServletRequest

request

response

中文乱码问题

转发和重定向

Cookie

Cookie优点

Cookie缺点

Session

概述

特点

作用域

Session与Request应用区别

Cookie禁用

ServletContext

概述

三种方式获取ServletContext对象

作用

特点

监听器

过滤器

使用步骤

生命周期

拦截路径匹配规则

配置多个过滤器

拦截器

HandlerInterceptor

MethodInterceptor

拦截器与过滤器区别


前端基础介绍

随着网络技术的不断发展,单机的软件程序不足以满足网络计算的需求。为此,各种各样的网络程序开发体系结构应运而生,这当中,运用最多的网络应用程序开发体系结构主要分为两种:一种是基于浏览器/服务器的B/S结构;另外一种是基于客户端/服务器的C/S结构。

C/S结构

(1)C/S(Client/Server,客户端/服务器)体系结构由美国Borland公司最早研发。

(2)特点:必须在客户端(用户设备上)安装特定的软件。

(3)优点:图像效果显示比较好(比如:3D游戏)。

(4)缺点:服务器的软件和功能进行升级,客户端也必须升级,否则使用不了新的功能,不利于维护。

(5)常见的C/S体系结构程序:、微信等。

B/S结构

(1)B/S(Bowser/Server,浏览器/服务器)体系结构由美国微软公司研发。

(2)特点:只需要一个浏览器通过http协议就可以访问,不需要在客户端(用户设备上)安装特定的软件。

(3)优点:服务功能的升级只需要升级服务器端,浏览器中不需要做任何升级操作。

(4)缺点:图形显示效果不如C/S体系结构。

(5)常见的B/S体系结构:淘宝、京东、支付宝等。

web服务器

Web服务器是发布Web应用、运行Web应用的容器。只有将开发好的Web项目部署在Web服务器中,才能使网络中的用户通过浏览器来访问Web应用。Web服务器的主要功能就是提供网上信息浏览服务。(将Web服务器理解成存储数据(项目)的容器)

开源的Web服务器: 1)Tomcat(主流Web服务器之一,非常适合初学者学习)。 2)jetty(淘宝使用,运行效率比Tomcat高)。 3)resin(新浪使用,所有开源服务器软件中,运行效率最高的)。 上面三个的用法从代码角度看完全相同,只是在开启、关闭服务软件时用的命令稍微有点区别。 收费的Web服务器: 1)WebLogic,Oracle公司开发的。 2)WebSphere,IBM公司开发的。 收费的Web服务器提供相应的服务与支持,软件比较大,资源消耗大。

Tomcat服务器

Tomcat是一个运行Servlet和JSP Web应用软件。基于Java的Web应用软件容器。Tomcat Server是根据Servlet和JSP规范运行的,因此可以说Tomcat Server也实行了Apache规范,且比绝大多数商业应用软件服务器要好。

tomcat安装配置:

官网下载(和jdk版本对应,jdk17对应tomcat10),安装,配置环境变量CATLINA_HOME:安装路径、path:%CATALINA_HOME%bin

HTTP协议

HTTP(HyperText Transfer Protocol),超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个基于请求与响应模式的、无状态的、应用层的协议,运行于TCP协议基础之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:

(1)客户端与服务器建立连接(三次握手)。

(2)客户向服务器发送请求。

(3)服务器接受请求,并根据请求返回响应的文件作为应答。

(4)客户与服务器关闭连接(四次挥手)。

java前端怎么实时显示后端数据的进度 java前后端都写_前端

  • Listener

  • Filter

  • Servlet

  • 先销毁 Servlet;

  • Filter

  • Listener

  • idea创建servlet项目:

    如果idea里使用的是UTF-8,必须在VM options里添加: -Dfile.encoding=UTF-8,

    如果不是不用改(Settings->editor->File Encodings里查看).4.在

    WEB-INF里创建lib包存放jar包

    ,(tomcat 10用jakarta包,10以前用javax包)jar包位置有要求,不放在这里不行

     

    web.xml的部分节点含义:

    br> 精确匹配 /具体的名称 只有url路径是具体的名称的时候才会触发Servlet

    br> 后缀匹配 *.xxx 只要是以xxx结尾的就匹配触发Servlet

    br> 通配符匹配 /* 匹配所有请求,包含服务器的所有资源

    br> 通配符匹配 / 匹配所有请求,包含服务器的所有资源,不包括.jsp

    br> 1)元素标记容器是否应该在web应用程序启动的时候就加载这个servlet。

    br> 2)它的值必须是一个整数,表示servlet被加载的先后顺序。

    br> 3)如果该元素的值为负数或者没有设置,则容器会当servlet被请求时再加载。

    br> 4)如果值为整数或0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。

    注解属性:

  • name:Servlet名字(可选)

  • value:配置url路径,可以配置多个

  • urlPatterns:配置url路径,和value作用一样,不能同时使用

  • loadOnStartup:配置Servlet的创建的时机,如果是0或者正数,启动程序时创建,如果是负数,则访问时创建。数字越小优先级越高。

  • img src='https://s2.51cto.com/images/blog//0_6661bea.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='java前端怎么实时显示后端数据的进度 java前后端都写_服务器_02' style="width: 796px; visibility: visible;">

    br> ServletConfig getServletConfig()、String getServletInfo()、void init(ServletConfig arg0)、

    br> void service(ServletRequest arg0, ServletResponse arg1)

    三种Servlet类实现方式

    HttpServlet类(常用)

  • doGet():用于HTTP GET请求

  • doPost():用于HTTP POST请求

  • doPut():用于HTTP PUT请求

  • doDelete():用于HTTP DELETE请求

  • Servlet线程安全:

  • synchronize

  • 实现SingleThreadModel接口

  • 尽可能使用局部变量

  • HttpServletRequest 对象:封装了客户端请求的信息,包括请求参数、请求头、请求体等信息。

  • HttpServletResponse 对象:封装了响应信息,包括响应状态码、响应头、响应体等信息。

  • ServletContext 对象:代表 Servlet 上下文,可以用于在不同 Servlet 之间共享数据。

  • HttpSession 对象:代表客户端的会话,可以用于在同一客户端多次请求之间共享数据。

  • ServletConfig 对象:代表 Servlet 的配置信息,包括 Servlet 的初始化参数等信息。

  • ServletRequest 对象:是 HttpServletRequest 的父接口,定义了通用的请求方法,如获取请求参数等。

  • ServletResponse 对象:是 HttpServletResponse 的父接口,定义了通用的响应方法,如设置响应头等。

  • br>

    Servlet程序的配置信息类

    它的三大作用:

  • 获取web.xml 中 Servlet 程序的别名 servlet-name 的值

  • 获取web.xml 中 Servlet 程序的获取初始化参数 init-param

  • 获取 ServletContext 对象

  • Servlet上下文接口

  • 每个web项目只有一个ServletContext对象,在web工程部署启动的时候创建,在工程停止的时候关闭。

  • ServletContext 对象是一个域对象(可以像Map一样存储数据的对象。域指的是作用域,这里是整个web工程)。

  • ServletContext 类的四个作用:

  • 获取 web.xml 中配置的上下文参数 context-param

  • getContextPath()获取当前的工程路径,格式: /工程路径

  • getRealPath()获取工程部署后在服务器硬盘上的绝对路径

  • 像 Map 一样存取数据

  • img src='https://s2.51cto.com/images/blog//0_6661bea.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='java前端怎么实时显示后端数据的进度 java前后端都写_前端_03' style="width: 796px; visibility: visible;">

  • get提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连

  • get方式

    明文

    传递,数据量小,不安全

  • 效率高,浏览器默认请求方式为get请求

  • 对应的Servlet的方法是doGet()

  • post方法是把提交的数据放在HTTP包的body中

  • 密文传递数据,数据量大,

    安全

  • 效率没有get高

  • 对应的Servlet的方法是doPost()

  • col>

    col>

    返回请求参数的值,如果请求参数不存在,则返回null

    返回指定属性名称的属性值,如果属性不存在,则返回null

    返回与此请求相关联的会话,如果请求没有会话则创建一个新会话

    方法名


    方法说明


    String getParameter(String name)


    根据表单组件名称获取提交的数据


    void setCharacterEncoding(String charset)


    指定每个请求的编码

    setAttribute(key,value)

    设置属性


    getAttribute(key)

    获取属性


    br>

    br>

    br>

    br>

    br>

    br>

    br>

    br>

    br>

    br>

    中文乱码问题

    get乱码:get请求发送后,在服务器端获取中文数据产生乱码,是因为服务器和客户端沟通的编码不一致造成的,所以解决办法是在客户端和服务器之间设置一个统一的编码,之后就按照设置的编码进行数据的传输和接收。

    此外,在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致,因此会产生中文乱码。

    (1)解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。

    (2)Tomcat8的版本中get不会出现乱码了,因为服务器对url的编码格式可以自动转换。

    post乱码:由于客户端是以UTF-8字符编码将表单数据传输到服务器端的,因此服务器端也需要设置以UTF-8字符编码进行接收。

    解决方法:使用从ServletRequest接口继承而来的setCharacterEncoding(charset)方法进行统一的编码设置。

    由于客户端是以UTF-8字符编码将表单数据传输到服务器端的,因此服务器端也需要设置以UTF-8字符编码进行接收。

    request乱码:解决方法:使用从ServletRequest接口继承而来的setCharacterEncoding(charset)方法进行统一的编码设置。

     
    

    response乱码:如果输出内容包含中文,则出现乱码,因为服务器默认采用ISO8859-1编码响应内容。

    方式一:设置服务器端响应的编码格式和设置客户端响应内容的头内容的文件类型及编码格式,这种方式不推荐

     
    

    方式二:同时设置服务端的编码格式和客户端响应的文件类型及响应时的编码格式,推荐此方式

     
    

    转发和重定向

    转发:的作用在服务器端地址栏不变,将请求发送给服务器上的其它资源,以共同完成一次请求的处理。req.getRequestDispatcher("路径").forward(req,resp);

    forward表示一次请求,是在服务器内部跳转,可以共享同一次request作用域中的数据。

    1. request作用域:拥有存储数据的空间,作用范围是一次请求有效(一次请求可以多次转发)
    2. 存数据:request.setAttribute(key,value);
    3. 取数据:request.getAttribute(key);

    重定向:作用在客户端,客户端将请求发送给服务器中,服务器响应给客户端一个新的请求地址,客户端重新发送新请求。使用redirect跳转时,是在客户端跳转地址栏发生变化,属于多次请求重定向传值只能在路径后面resp.sendRedirect("路径?username=" + URLEncoder.encode(username, "UTF-8") + "&password=" + password + "");

    Cookie

    Cookie是浏览器提供持久化存储数据的机制,在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应消息头中附带传送给浏览器的一小段数据。一旦Web浏览器保存了某个Cookie,那么它在以后每次访问该Web服务器时,都应在HTTP请求头中将这个Cookie回传给Web服务器。一个Cookie主要有标识该信息的名称(name)和值(value)组成。

    Cookie存储在浏览器(客户端) 所在主机的硬盘中,当用户访问网站生成Cookie时,它会在用户的计算机上创建一个文本文件,并将其存储在浏览器的Cookie存储区域中(该文件在客户端硬盘上),浏览器会定期清理Cookie存储区域,以删除过期的Cookie。

    通过java代码设置获取Cookie

     
    

    浏览器查看Cookie

    1.f12->Network,2.设置->隐私与安全

    Cookie默认不支持中文,只能包含ASCII字符,所以Cookie需要对Unicode字符进行编码,否则会出现乱码

    • 编码可以使用java.net.URLEncoder类的encode(String str,String encoding)方法
    • 解码可以使用java.net.URLDecoder类的decode(String str,String encoding)方法
     
    

    Cookie优点

    • 可配置到期规则
    • 简单性:Cookie是一种基于文本的轻量结构,包含简单的键值对
    • 数据持久性:Cookie默认在过期之前是可以一直存在客户端浏览器上的

    Cookie缺点

    • 大小受到限制:大多数浏览器对Cookie的大小有4K、8K字节的限制
    • 用户配置为禁用:有些用户禁用了浏览器或客户端设备接收Cookie的能力,因此限制了这一功能
    • 潜在的安全风险:Cookie可能会被篡改。会对安全性造成潜在风险或者导致依赖于Cookie的应用程序失败

    Session

    概述

    Session存在于服务器端,是SessionId和对应的HttpSession对象的键值对结构。同时HttpSession对象中可以存储程序员自定义的键值对。

    (1)Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。

    (2)在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。

    (3)Session是由服务器端创建的

    特点

    (1)Session会为每一次会话分配一个Session对象

    (2)同一个浏览器发起的多次请求,同属于一次会话(Session)

    (3)首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端

    作用域

    • 一次会话是使用同一浏览器发送的多次请求。一旦浏览器关闭,则结束会话
    • 可以将数据存入Session中,在一次会话的任意位置进行获取
    • 可传递任何数据(基本数据类型、对象、集合、数组)
    • 浏览器关闭/浏览器关闭,则失效

    获取Session

    Session是服务器端自动创建的,通过request对象获取

     
    

    使用setArrtibute(属性名,Object)保存数据到session中

     
    

    使用getAttribute("属性名");获取session中数据。

     
    

    使用removeAttribute移除Session数据

     
    

    session.invalidate();//登录退出,销毁

    Session与Request应用区别

    (1)request是一次请求有效,请求改变,则request改变

    (2)session是一次会话有效,浏览器改变,则session改变

    Cookie禁用

    务器在默认情况下,会使用Cookie的方式将sessionID发送给浏览器,如果用户禁止Cookie,则sessionID不会被浏览器保存,此时,服务器可以使用URL重写这样的方式来发送sessionID

     
    

    ServletContext

    概述

    (1)全局对象,也拥有作用域,对应一个Tomcat中的Web应用

    (2)当Web服务器启动时,会为每一个Web应用程序创建一块共享的存储区域(ServletContext)

    (3)ServletContext在Web服务器启动时创建,服务器关闭时销毁

    三种方式获取ServletContext对象

    • GenericServlet提供了getServletContext(()方法。推荐使用this.getServletContext();
    • HttpServletRequest提供了getServletContext()方法。推荐使用
    • HttpSession提供了getServletContext()方法。

    作用

    获取当前项目在服务器发布的真实路径(盘符路径)

    获取当前项目上下文路径(项目名)

    全局容器(ServletContext拥有作用域,可以存储数据到全局容器中 )

    • 存储数据:servletContext.setAttribute("name",value);
    • 获取数据:servletContext.getAttribute("name");
    • 移除数据:servletContext.removeAttribute("name");

    特点

    • 唯一性:一个应用对应一个ServletContext
    • 生命周期:只要tomcat不关闭或者应用不卸载,ServletContext就一直存在

    三种容器作用域总结

    • HttpServletRequest:一次请求,请求响应之前有效
    • HttpSession:一次会话开始,浏览器不关闭或不超时之前有效
    • ServletContext:服务启动开始,服务器停止之前有效

    监听器

    Javaweb三大组件之一,Listener表示服务器的事件监听器,用于监听三个域对象的状态(对象、对象的属性)变化,三个域对象分别是:ServletContext、HttpSession、HttpServletRequest。

    分别对应的监听类是:

    1.ServletContextListener、ServletContextAttributeListener;

    2.HttpSessionListener、HttpSessionActivationListener、HttpSessionBindingListener、HttpSessionAttributeListener;

    3.ServletRequestListener、ServletRequestListener

    也可依据功能划分:

    第一类:监听容器本身的创建和销毁

    • ServletContextListener
    • HttpSessionListener
    • ServletRequestListener

    第二类:监听容器的内容变化

    • ServletContextAttributeListener
    • HttpSessionAttributeListener
    • ServletRequestAttributeListener

    第三类:专门针对Javabean的,让Javabean实现接口重写方法即可

    • HttpSessionBindingListener
    • HttpSessionActivationListener

    使用

    1.定义类,实现ServletContextListener接口

    2.可在web.xml配置或使用注解 @WebListener配置

    过滤器

    三大组件之一,作用是:拦截请求,过滤响应。

    应用场景

    • 权限检查
    • 日记操作
    • 事务管理

    使用步骤

    生命周期

    1. 构造器方法
    2. init 初始化方法
    3. doFilter 过滤方法
    4. destroy 销毁

    第 1,2 步初始化,在 web 工程启动的时候执行(Filter 已经创建);第 3 步 每拦截到一次请求,就会执行一次;第 4 步 停止 web 工程的时候,就会执行(停止 web 工程,也会销毁 Filter 过滤器)。

    • filter 在 web 项目启动时, 由 tomcat 来创建 filter 实例, 只会创建一个
    • 会调用 filter 默认的无参构造器, 同时会调用 init 方法, 只会调用一次
    • 在创建 filter 实例时,同时会创建一个 FilterConfig 对象,并通过 init 方法传入
    • 通过 FilterConfig 对象,程序员可以获取该 filter 的相关配置信息
    • 当一个 http 请求和该 filter 的的 url-patter 匹配时,就会调用 doFilter 方法
    • 在调用 doFilter 方法时, tomcat 会同时创建 ServletRequest 和 ServletResponse 和 FilterChain 对象并通过 doFilter 传入.
    • 如果后面的请求目标资源(jsp,servlet…) 会使用到 request,和 response,那么会继续传递

    FilterConfig

    Tomcat 每次创建 Filter 的时候,也会同时创建一个 FilterConfig 类,这里包含了 Filter 配置文件的配置信息。

    FilterConfig 类的作用是获取 filter 过滤器的配置内容:

    1. 获取 Filter 的名称 filter-name 的内容
    2. 获取在 Filter 中配置的 init-param 初始化参数
    3. 获取 ServletContext 对象

    拦截路径匹配规则

    • 精确匹配 /target.jsp
    • 目录匹配 /admin/*
    • 后缀名匹配 *.html
      Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在

    过滤器过滤的是URI的请求

    配置多个过滤器

    在多个Filter执行的时候,它们执行的优先顺序由它们在web.xml中从上到下配置的filter-mapping顺序决定,与filter的配置顺序无关。

    执行顺序

    Http请求 -> A 过滤器 dofilter() -> A 过滤器前置代码 -> A 过滤器 chain.doFilter() -> B 过滤器 dofilter() -> B 过滤器前置代 码 -> B过滤器 chain.doFilter() -> 目标文件 -> B过滤器后置代码 -> A过滤器后置代码 -> 返回给浏览器页面/数据

    • 所有Filter和目标资源默认都执行在同一个线程
    • 多个Filter共同执行的时候,它们都使用同一个Request对象(假如Filter1的request对象设置了一个属性,Filter2也能获取出来)

    拦截器

    拦截器方法都是通过代理的方式来调用的,是基于反射机制实现的,依赖于web框架

    java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。

    spring中拦截器主要分两种,一个是HandlerInterceptor,一个是MethodInterceptor。HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行。

    HandlerInterceptor

    步骤

    1. 实现一个HandlerInterceptor拦截器可以直接实现HandlerInterceptor接口,也可以继承HandlerInterceptorAdapter类。
    2. 在springMVC配置文件中配置拦截器

    HandlerInterceptor接口中的3个方法:

    • preHandler():该方法会在控制器方法前执行,其返回值表示是否中断后续操作。当其返回值为true时,表示继续向下执行;当其返回值为false时,会中断后续的所有操作。
    • postHandle():该方法会在控制器方法调用之后,且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。
    • afterCompletion():该方法会在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作。

    MethodInterceptor

    MethodInterceptor是AOP项目中的拦截器,它拦截的目标是方法,即使不是controller中的方法。

    步骤

    1. 实现MethodInterceptor接口,或利用AspectJ的注解
    2. 在spring配置文件中配置

    拦截器与过滤器区别

    1. filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
    2. 过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
    3. Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
    4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能。
    5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
    6. 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

  • 上一篇: java基础面试 排序
  • 下一篇: java环境基础
  • 版权声明


    相关文章:

  • java基础面试 排序2025-05-02 11:50:01
  • java基础ppt教程2025-05-02 11:50:01
  • java基础7132025-05-02 11:50:01
  • 沈阳java基础班2025-05-02 11:50:01
  • java 面试基础2025-05-02 11:50:01
  • java环境基础2025-05-02 11:50:01
  • java基础项目答辩2025-05-02 11:50:01
  • java基础及前端基础2025-05-02 11:50:01
  • java基础教程3202025-05-02 11:50:01
  • 韩顺平java基础2025-05-02 11:50:01