JavaWeb复习

在网络应用程序中有两种基本的结构,即C/S和B/S,对于c/s程序分为客户机和服务器两层,把应用软件按照在客户机端(通常由客户端维护困难),通过网络与服务器进行相互通信B/S结构却不用通知客户端安装某个软件,内容修改了,也不需要通知客户端进行升级。
在这里插入图片描述

但是B/S结构相较于C/S存在一定的不好,例如对于服务器的负担比较重,客户端界面不够丰富、快速响应不如C/S结构等。
在Web程序结构中,浏览器端和应用服务器端采用请求/响应模式进行交互
在这里插入图片描述
建立Web网站的最基本要求是为了能让客户通过http/https协议访问网站的页面。为了能通过http/nttps 协议访问网页,只需将网页放在服务器中运行。注意,此处所说的服务器是软件服务器,不是硬件服务器。Java系列的服务器有很多,例如Tomcat 、Resin,Jboss 、Weblogic 、WebSphere 等。本章以Tomcat 6.0为例来进行讲解。不过,值得注意的是,在安装Tomcat 6.0之前一定要保证安装了JDK5.0或其以上版本,并配置了环境变量(例如Path等)。
在这里插入图片描述
在这里插入图片描述
JSP将动态代码嵌入到静态的HTML中,从而动态的输出。JSP运行在服务端,能够对客户端展现内容、处理用户提交的表单数据。
HTML页面是静态页面,也是事先由用户写好放在服务器上,由Web服务器向客户端返送。JSP页面是由JSP容器执行该页面的java代码部分,然后实时生成的HTML页面,因此说它是服务器端动态页面。
最大的区别就是Javascript源代码是被服务器发送到客户端,由客户端执行,因此在客户端可以看到JavaScript源代码;而java代码却不会。
JSP表达式

<%= 变量/返回值/表达式 %>

在这里插入图片描述
JSP程序段

<%java代码%>

变量必须要先定义后使用
在这里插入图片描述
JSP声明
JSP声明中可以定义网页中的全局变量。而且不存在需要先声明后使用的规则。即使用JSP声明可以在任何地方定义变量,实际开发中,还可以在JSP声明中定义方法、类的声明。语法如下:

<%! 代码 %>

在这里插入图片描述
在这里插入图片描述
重新学习JSP之三
JSP指令和动作
在这里插入图片描述

JSP动作是用XML语法格式的标记来控制服务器的行为,能够动态插入文件、将请求跳转到另外的页面、调用JavaBean组件等。其用法如下:

<jsp:动作名 属性1 = "属性值1" ... 属性n = "属性值n" />
//或者
<jsp:动作名>相关内容
</jsp:动作名>

在这里插入图片描述

使用include指令把另外的页面包含进本页面,但被包含的页面与本页面不能有相同的变量。
在这里插入图片描述
include动作

<jsp:include page = "文件名" />
或者
<jsp:include page = "文件名" >相关标签
</jsp:include>

page属性是需要包含进来的资源,但需要注意,include动作只会把文件中的输出包含进来。

includeMsg.jsp
<%@ page language = "java" pageEncoding = "gb2312" %>
<html><head><title>includeMsg</title></head><body><%String msg = "欢迎您来到教务管理系统!";%></body>
</html>
jspIncludeTest1.jsp
<%@ page language = "java" pageEncoding = "gb2312" %>
<html><head><title>includeMsg</title></head><body><jsp:include page = "includeMsg.jsp" /><%String msg = "本系统竭诚为您服务!";out.println(msg);%></body>
</html>

在includeMsg.jsp中定义了msg,jspIncludeTest1.jsp中也定义了msg,但是在includeMsg.jsp中没有输出。所以includeMsg.jsp不会被包含进来,所以再次定义msg是不会报错的。
在这里插入图片描述
JSP——表单开发
表单提交给服务器,可以用中的action属性
重新学习JSP之六——基本表单开发
重新学习JSP之七——同名表单元素和隐藏表单元素
重新学习JSP之八——JavaBean
重新学习JSP之九——基于表单的投票系统
重新学习JSP之九——JSP内置对象(上)
在这里插入图片描述
在这里插入图片描述

<%out.println("Hello World!" + "<br>");//必须要有<br>
%>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重新学习JSP之十——用Cookie保存登录信息
重新学习JSP之十一——JSP内置对象(下)
在这里插入图片描述
重新学习JSP之十二——在线交流系统
Servlet
是运行在Web服务器端的java应用程序,可以生成动态的Web页面,属于客户与服务器响应的中间层。实际上,JSP在底层就是一个Servlet。实际上,在运行JSP时,服务器底层会将JSP编译成一个Java类,这个类就是servlet。因此,可以说JSP就是servlet。二者可以实现同样的页面效果,不过编写JSP和servlet相比,前者的成本低的多。
一个普通的类不可能成为servlet,要想成为servlet还要完成以下步骤
在这里插入图片描述
Servlet采用的是多线程机制,每一次请求,系统都会分配一个线程来运行doGet()函数。但这也会带来安全问题,一般来说,不要在servlet内定义成员变量,除非这些成员变量是所有用户共用的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重新学习JSP之十四——Servlet高级编程
重新学习JSP之十五——MVC模式
Day7_JavaWeb——Servlet的配置文件
过滤器

设置编码格式的代码:

request.setCharacterEncoding("gb2312");

那么每个JSP页面的内容有中文并且想获取这些内容,则都要写上上面的代码,这是一件很繁琐的事情。为此有人提出:在请求被处理之前,有一个公关的模块,专门负责进行编码的转换。
在这里插入图片描述
在这里插入图片描述如何编写过滤器:只需要在web.xml中配置即可灵活重复使用,它能够对JSP、HTML、servlet进行过滤。

package filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class EncodingFilter implements Filter{public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubrequest.setCharacterEncoding("gb2312");//设置编码chain.doFilter(request, response);//将请求向下传递,如果没有这一句,过滤器收到请求进行处理之后,请求将不会传递给目标页面}
}

配置过滤器
我们可以为一个资源配置多个Filter,当配置多个Filter后会有一个执行顺序的问题,实际执行顺序是按照在web.xml文件中servlet-mapping的顺序决定的,如果顺序越靠前越先被调用。
在web.xml中加入:

<filter><filter-name>EncodingFilter</filter-name><filter-class>filter.EncodingFilter</filter-class></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

过滤器的配置与Servlet相似。用于指定过滤模式。
在这里插入图片描述
在这里插入图片描述
过滤器dofilter()函数是在servlet被调用之前调用的
在大型项目中有时候会需要很多过滤器,如果每一个过滤器都需要在服务器进行实例化会带来很大的开销,导致启动速度较慢
在这里插入图片描述
在这里插入图片描述
监听器——设计模式为观察者模式
HttpSessionEvent 不能直接调用getServletContext()
在这里插入图片描述
在这里插入图片描述

javaweb之监听器实现在线人数1
javaweb之监听器实现在线人数2
注册方式可以通过,xml的方式或者@WebListener注解来进行注册
发生在过滤器前
所有的监听器方法不需要我们去调用,服务器会进行调用。当某一个特殊事件发生的时候,服务器会自动调用。
类似JS事件: 被观察的对象发生某种情况的时候,自动触发代码的执行。
对域对象要发生的方法进行监听。
并不监听web项目中的所有组件,仅仅是对三大域对象做相关的事件监听。
HttpSession、ServletRequest 和 ServletContext 之间可以相互访问:

  1. 从 HttpSession 中,你可以通过 session.getServletContext() 方法获取
    ServletContext。
  2. 从 ServletRequest 中,你可以通过 request.getSession() 方法获取 HttpSession,以及通过request.getServletContext() 方法获取 ServletContext。

ServletContext监听器
ServletContextListener:监听整个Web应用的生命周期事件,如初始化和销毁。
ServletContextAttributeListener:监听ServletContext属性的添加、删除和替换事件。
HTTP会话监听器(Session域):
HttpSessionListener:监听HTTP会话的创建和销毁事件。
HttpSessionAttributeListener:监听会话属性的添加、删除和替换事件。
HttpSessionActivationListener:监听会话的被动激活和去激活事件。(绑定(将一个对象放入到session域中)与解绑(将这个对象从session域中移除)的监听器)
HttpSessionBindingListener:监听会话中属性的绑定和解绑事件。(钝化(session内存中的对象持久化(序列化)到磁盘)与活化(磁盘上的对象再次恢复到session内存中)的监听器)
请求监听器(Request域):
ServletRequestListener:监听请求的初始化和销毁事件。
ServletRequestAttributeListener:监听请求属性的添加、删除和替换事件。
组件监听器(Component域,如Servlet、Filter等):
ServletContextListener:监听ServletContext级别的事件,对所有组件都有效。
HttpSessionListener:监听会话级别的事件,对所有组件都有效。
Javaweb——监听器

【JavaWeb】监听器 Listener
重新学习JSP之十七——购物车
重新学习JSP之十八——EL
重新学习JSP之十九——JSTL
java接口Serializable的作用

package cn.ctgu.attribute.domain;import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;public class Person implements HttpSessionBindingListener{private String name;private int id;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}//绑定方法,session将person对象添加的时候触发@Overridepublic void valueBound(HttpSessionBindingEvent event) {// TODO Auto-generated method stubSystem.out.println("person被绑定了");}//解绑方法,session将person移除掉的时候触发@Overridepublic void valueUnbound(HttpSessionBindingEvent event) {// TODO Auto-generated method stubSystem.out.println("person被解绑了");}}
package cn.ctgu.attribute.domain;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** Servlet implementation class TestPersonBindingServlet*/
@WebServlet("/TestPersonBindingServlet")
public class TestPersonBindingServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session=request.getSession();//将person对象绑定到session中Person p=new Person();p.setId(100);p.setName("zhangsanfeng");session.setAttribute("person",p);//将person对象从session中解绑session.removeAttribute("person");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

被钝化和活化的Customer类Customer.java

package cn.ctgu.attribute.domain;import java.io.Serializable;import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
//实现了Serializable接口才能被活化(序列化)
public class Customer implements HttpSessionActivationListener,Serializable{private String id;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}//活化@Overridepublic void sessionDidActivate(HttpSessionEvent arg0) {// TODO Auto-generated method stubSystem.out.println("Customer被活化了");}//钝化@Overridepublic void sessionWillPassivate(HttpSessionEvent arg0) {// TODO Auto-generated method stubSystem.out.println("Customer被钝化了");}}

META-INF目录下的context.xml文件配置钝化路径以及钝化间隔时间

<?xml version="1.0" encoding="UTF-8"?>
<Context><!-- maxIdleSwap:session中的对象多长时间不使用就钝化 --><!-- directory:钝化后的对象的文件写到磁盘的哪个目录下 配置钝化的对象文件在 work/catalina/localhost/钝化文件 --><Manager className="org.apache.catalina.session.PersistentManager"maxIdleSwap="1"><!--这里的1表示1分钟,即session 1分钟不用的时候对象就会被钝化到磁盘  --><Store className="org.apache.catalina.session.FileStore"directory="C:\Users\Administrator\Desktop\Java\JavaWeb\Listener\SessionActivation" /><!--这里的directory表示session钝化后的存储路径  --></Manager>
</Context>

TestCustomerHttpSessionActivationListener.java

package cn.ctgu.attribute.domain;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** Servlet implementation class TestCustomerHttpSessionActivationListener*/
@WebServlet("/TestCustomerHttpSessionActivationListener")
public class TestCustomerHttpSessionActivationListener extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session=request.getSession();//将customer放到session中,当服务器关闭的时候customer对象就会被钝化到磁盘中Customer customer=new Customer();customer.setId("200");customer.setName("lucy");session.setAttribute("customer", customer);System.out.println("customer被放到session域中");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

TestCustomerHttpSessionActivationListener2.java

package cn.ctgu.attribute.domain;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** Servlet implementation class TestCustomerHttpSessionActivationListener2*/
@WebServlet("/TestCustomerHttpSessionActivationListener2")
public class TestCustomerHttpSessionActivationListener2 extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//从session域中获得customer,只有服务器重启的时候,session域中的被钝化的对象,才能从磁盘中活化过来被使用HttpSession session=request.getSession();Customer customer=(Customer)session.getAttribute("customer");System.out.println(customer.getName());}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

在这里插入图片描述
在这里插入图片描述

【Java Web】Axios实现前后端数据异步交互

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

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

相关文章

qt获取本机IP和定位

前言&#xff1a; 在写一个天气预报模块时&#xff0c;需要一个定位功能&#xff0c;在网上翻来翻去才找着&#xff0c;放在这里留着回顾下&#xff0c;也帮下有需要的人 正文&#xff1a; 一开始我想着直接调用百度地图的API来定位&#xff0c; 然后我就想先获取本机IP的方…

python爬取旅游攻略(1)

参考网址&#xff1a; https://blog.csdn.net/m0_61981943/article/details/131262987 导入相关库&#xff0c;用get请求方式请求网页方式&#xff1a; import requests import parsel import csv import time import random url fhttps://travel.qunar.com/travelbook/list.…

Oracle OCP认证考试考点详解082系列12

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 56. 第56题&#xff1a; 题目 解析及答案&#xff1a; 关于企业管理器&#xff08;EM&#xff09;Express&#xff0c;以下哪两个陈述是…

Postgresql源码(137)执行器参数传递与使用

参考 《Postgresql源码&#xff08;127&#xff09;投影ExecProject的表达式执行分析》 0 总结速查 prepare p_04(int,int) as select b from tbl_01 where a $1 and b $2为例。 custom计划中&#xff0c;在表达式计算中使用参数的值&#xff0c;因为custom计划会带参数值&…

SPI通信详解-学习笔记

参考原文地址 SPI&#xff1a;高速、全双工&#xff0c;同步、通信总线 SPI主从模式 SPI分为主、从两种模式&#xff0c;一个SPI通讯系统需要包含一个&#xff08;且只能是一个&#xff09;主设备&#xff0c;一个或多个从设备。提供时钟的为主设备&#xff08;Master&#xff…

Day102漏洞发现-漏扫项目篇Poc开发Yaml语法插件一键生成匹配结果交互提取

知识点&#xff1a; 1、Nuclei-Poc开发-环境配置&编写流程 2、Nuclei-Poc开发-Yaml语法&匹配提取 3、Nuclei-Poc开发-BurpSuite一键生成插件 Nuclei-Poc开发-环境配置&编写流程 1、开发环境&#xff1a;VscodeYaml插件 Visual Studio Code - Code Editing. R…

Redis 初学者指南

Redis 初学者指南 1. 什么是 Redis&#xff1f;2. Redis 的基本概念3. 安装 Redis3.1 使用 Docker 安装3.2 从源码编译安装 4. 基本操作4.1 启动 Redis 服务4.2 连接 Redis 客户端4.3 常用命令 5. Redis 的数据结构5.1 字符串5.2 列表5.3 集合5.4 散列5.5 有序集合 6. 高级特性…

如何封装一个axios,封装axios有哪些好处

什么是Axios Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于在浏览器和 Node.js 中发送异步网络请求。它简化了发送 GET、POST、PUT、DELETE 等请求的过程&#xff0c;并且支持请求拦截、响应拦截、取消请求和自动处理 JSON 数据等功能。 为什么要封装Axios 封装…

Node.js 入门指南:从零开始构建全栈应用

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;node.js篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js-入门指南&#xff1a;从零开始构建全栈应用 前言 大家好&#xff0c;我是青山。作…

WordPress网站添加嵌入B站视频,自适应屏幕大小,取消自动播放

结合bv号 改成以下嵌入式代码&#xff08;自适应屏幕大小,取消自动播放&#xff09; <iframe style"width: 100%; aspect-ratio: 16/9;" src"//player.bilibili.com/player.html?isOutsidetrue&bvidBV13CSVYREpr&p1&autoplay0" scrolling…

大模型应用系列:Query 变换的示例浅析

【引】NLP中的经典组件在大模型应用中还有效么&#xff1f;大模型对自然语言处理中的典型任务有什么影响么&#xff1f; RAG应用通过分割文档、嵌入向量化并检索高语义相似性的块来响应用户问题&#xff0c;但面临文档块不相关、用户用词不当及结构化查询需求等问题。若RAG无法…

【Oracle】空格单字符通配符查询匹配失败

问题 在进行模糊查询的时候&#xff0c;通过全局任意字符串匹配出含有两个字刘姓的人&#xff0c;但是通过刘_不能匹配出结果。 解决 检查后发现&#xff0c;姓名中包含空格 SELECT * FROM student WHERE TRIM(sname) LIKE 刘_;第一种解决方案就是查询的时候进行去空格处理&a…

讲讲⾼并发的原则?

大家好&#xff0c;我是锋哥。今天分享关于【讲讲⾼并发的原则&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲讲⾼并发的原则&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 高并发是指系统在同一时间内能够处理大量请求的能力。要有效地管理…

鸿蒙进阶-AlphabetIndexer组件

大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来学习AlphabetIndexer组件&#xff0c;喜欢就点点关注吧&#xff01; 通过 AlphabetIndexer 组件可以与容器组件结合&#xff0c;实现导航联动&#xff0c;以及快速定位的效果 核心用法 AlphabetIndexer不是容器组件…

WebGL(Web Graphics Library)

WebGL&#xff08;Web Graphics Library&#xff09;是一种基于 JavaScript 的 API&#xff0c;允许在网页上渲染高性能的 2D 和 3D 图形。它利用计算机的 GPU 来实现硬件加速&#xff0c;因此适合创建游戏、数据可视化和交互式应用程序。 WebGL 的基本概念&#xff1a; 上下文…

nvm使用的方法

nvm——Node版本管理工具_node管理工具-CSDN博客

第四部分 可扩展的架构实践

第四部分 可扩展的架构实践 19. 第19章 对架构影响重大的需求20. 第20章 设计架构21. 第21章 评估架构22. 第22章 记录架构23. 第23章 管理架构债

ubuntu交叉编译expat库给arm平台使用

1.下载expat库源码: https://github.com/libexpat/libexpat/release?page=2 wget https://github.com/libexpat/libexpat/release/download/R_2_3_0/expat-2.3.0.tar.bz2 下载成功: 2.解压expat库,并进入解压后的目录: tar xjf expat-2.3.0.tar.bz2 cd expat-2.3.0 <…

Python中的PDF处理工具:PyPDF2和ReportLab使用指南

Python中的PDF处理工具&#xff1a;PyPDF2和ReportLab使用指南 在日常工作和项目中&#xff0c;PDF 文件处理是个常见需求&#xff0c;不论是合并报告、加密文档、填充表单&#xff0c;还是生成发票。Python 中有许多用于操作 PDF 文件的库&#xff0c;其中 PyPDF2 和 ReportL…

【系统面试篇】进程和线程类(1)(笔记)——区别、通讯方式、同步、互斥、锁分类

目录 一、问题综述 1. 进程和线程的区别&#xff1f; 2. 进程的状态有哪些&#xff1f; 3. 进程之间的通信方式? &#xff08;1&#xff09;管道 &#xff08;2&#xff09;消息队列 &#xff08;3&#xff09;共享内存 &#xff08;4&#xff09;信号量 &#xff08…