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…

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不是容器组件…

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 <…

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

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

nginx(四):如何在 Nginx 中配置以保留真实 IP 地址

如何在 Nginx 中配置以保留真实 IP 地址 1、概述2、nginx配置示例2.1、配置说明2.2、客户端获取真实IP2.2.1、代码说明 3、插曲4、总结 大家好&#xff0c;我是欧阳方超&#xff0c;可以我的公众号“欧阳方超”&#xff0c;后续内容将在公众号首发。 1、概述 当使用nginx作为…

C++《list的模拟实现》

在上一篇C《list》专题当中我们了解了STL当中list类当中的各个成员函数该如何使用&#xff0c;接下来在本篇当中我们将试着模拟实现list&#xff0c;在本篇当中我们将通过模拟实现list过程中深入理解list迭代器和之前学习的vector和string迭代器的不同&#xff0c;接下来就开始…

本篇万字,博客最细,oled多级菜单代码解析,与实现教程,指针实现(含源码)!!!

目录 教程前言 多级菜单基本知识 驱动文件创建 ​编辑 ​编辑 ​编辑 定义菜单数据类型代码解析 按键代码解析 菜单数据赋值代码解析 菜单按键切换显示代码解析 项目工程移植地址 教程前言 前言&#xff1a;编写不易&#xf…

华为HarmonyOS打造开放、合规的广告生态 - 贴片广告

场景介绍 贴片广告是一种在视频播放前、视频播放中或视频播放结束后插入的视频或图片广告。 接口说明 接口名 描述 loadAd(adParam: AdRequestParams, adOptions: AdOptions, listener: AdLoadListener): void 请求单广告位广告&#xff0c;通过AdRequestParams、AdOptions…

Leetcode137只出现一次的数字|| 及其拓展

简述&#xff1a; 虽然标题是这么描述的&#xff0c;但是我们不是一上来就解这道题&#xff0c;先看一下他的子题和扩展 子题&#xff1a;136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 扩展题&#xff1a; 所以我们由易到难&#xff0c;先来看第一道&#x…

【解决办法】无法使用右键“通过VSCode打开文件夹”

个人博客&#xff1a;苏三有春的博客 前言 作者的编程环境为VScode&#xff0c;工作时常使用VScode打开整个工程文件夹。如果先打开VScode再从VScode中选择文件夹打开效率太慢&#xff0c;作者一般使用的方式是右键文件夹&#xff0c;直接选择"通过code打开文件夹"…