Java学习笔记9-2——JavaWeb

文章目录

  • JavaBean
  • MVC三层架构
  • Filter过滤器
  • Listener监听器
  • JDBC
  • 文件上传Servlet
  • 邮件发送Servlet

JavaBean

实体类

JavaBean有特定的写法:

  • 必须要有一个无参构造;
  • 属性必须私有化;
  • 必须有对应的get/set方法;

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

ORM :对象关系映射

表—>类
字段—>属性
行记录—>对象

1.建POJO实体类(一般与数据库中的表结构一一对应),略
2.JSP页面


<jsp:useBean id="people" class="com.cheng.pojo.People" scope="page"/>
<%--等价于People people = new People();--%>
<jsp:setProperty name="people" property="id" value="1"/>
<jsp:setProperty name="people" property="name" value="小明"/>
<jsp:setProperty name="people" property="age" value="12"/>
<jsp:setProperty name="people" property="address" value="广州"/>
<%--等价于people.setId("1");--%>id:<jsp:getProperty name="people" property="id"/>
姓名:<jsp:getProperty name="people" property="name"/>
年龄:<jsp:getProperty name="people" property="age"/>
地址:<jsp:getProperty name="people" property="address"/>
<%--等价于people.getId();--%>

MVC三层架构

什么是MVC: Model View Controller 模型、视图、控制器
在这里插入图片描述
Model

  • 业务处理 :业务逻辑(Service)
  • 数据持久层:CRUD (Dao - 数据持久化对象)

View

  • 展示数据
  • 提供链接发起Servlet请求 (a,form,img…)

Controller (Servlet)

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

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

  • 控制视图的跳转

Filter过滤器

比如 Shiro安全框架技术就是用Filter来实现的

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

  • 处理中文乱码
  • 登录验证….

在这里插入图片描述
Filter开发步骤:

1.导包
注意导入的是javax.servlet下的Filter
2.实现Filter接口,重写对应的三个方法

public class CharacterEncodingFilter implements Filter {//初始化:web服务器启动,就已经初始化了,随时等待过滤对象出现!public void init(FilterConfig filterConfig) throws ServletException {System.out.println("CharacterEncodingFilter初始化");}//Chain : 链/*1. 过滤器中的所有代码,在过滤特定请求的时候都会执行2. 必须要让过滤器继续同行即固定有这行代码chain.doFilter(request,response);*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");System.out.println("CharacterEncodingFilter执行前....");chain.doFilter(request,response); //让我们的请求继续走,如果不写,程序到这里就被拦截停止!System.out.println("CharacterEncodingFilter执行后....");}//销毁:web服务器关闭的时候,过滤器会销毁public void destroy() {System.out.println("CharacterEncodingFilter销毁");}
}

3.在web.xml中配置 Filter

 <filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>com.cheng.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><!--只要是 /servlet的任何请求,会经过这个过滤器--><url-pattern>/servlet/*</url-pattern><!--<url-pattern>/*</url-pattern>--><!-- 别偷懒写个 /* --></filter-mapping><servlet><servlet-name>ShowServlet</servlet-name><servlet-class>com.cheng.servlet.ShowServlet</servlet-class></servlet><servlet-mapping><servlet-name>ShowServlet</servlet-name><url-pattern>/servlet/show</url-pattern></servlet-mapping><servlet><servlet-name>Servlet</servlet-name><servlet-class>com.cheng.servlet.ShowServlet</servlet-class></servlet><servlet-mapping><servlet-name>Servlet</servlet-name><url-pattern>/show</url-pattern></servlet-mapping>

输入http://localhost:8080/show得到乱码

输入http://localhost:8080/servlet/show得到

你好呀世界

Listener监听器

1.实现一个监听器的接口(有很多种监听器)

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;//统计网站在线人数 : 统计session
public class OnlineCountListener implements HttpSessionListener {//创建session监听: 看你的一举一动//一旦创建Session就会触发一次这个事件!public void sessionCreated(HttpSessionEvent se) {ServletContext ctx = se.getSession().getServletContext();System.out.println(se.getSession().getId());Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");if (onlineCount==null){onlineCount = new Integer(1);}else {int count = onlineCount.intValue();onlineCount = new Integer(count+1);}ctx.setAttribute("OnlineCount",onlineCount);}//销毁session监听//一旦销毁Session就会触发一次这个事件!public void sessionDestroyed(HttpSessionEvent se) {ServletContext ctx = se.getSession().getServletContext();Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");if (onlineCount==null){onlineCount = new Integer(0);}else {int count = onlineCount.intValue();onlineCount = new Integer(count-1);}ctx.setAttribute("OnlineCount",onlineCount);}/*Session销毁:1. 手动销毁  getSession().invalidate();2. 自动销毁*/
}

2.web.xml中注册监听器

  <!--注册监听器--><listener><listener-class>com.cheng.listener.OnlineCountListener</listener-class></listener>

3.JSP

<h2>当前有<%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%>人在线</h2>

JDBC

(参考MySQL笔记3——JDBC)

文件上传Servlet

邮件发送Servlet

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

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

相关文章

离散傅立叶变换

离散傅立叶变换 一维离散傅里叶变换 二维离散傅里叶变换(2D-DFT) 、图像傅里叶变换的意义 &#xff08;1&#xff09;简化计算&#xff0c;也即傅里叶变换可将空间域中复杂的卷 积运算转化为频率域中简单的乘积运算。 &#xff08;2&#xff09;对于某些在空间域中难于处理或…

[Leedcode][JAVA][第14题][最长公共前缀][二分][横竖扫描][分治]

【问题描述】[中等] 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀&#xff0c;返回空字符串 ""。示例 1:输入: ["flower","flow","flight"] 输出: "fl" 示例 2:输入: ["dog","raceca…

图像傅里叶变换频谱分析

图像的傅里叶频谱特性分析 图像傅里叶频谱关于(/&#xff0c;/)的对称性 图像傅里叶频谱特性及其频谱图 傅里叶变换在图像处理中的应用

[剑指offer]面试题第[37]题[Leedcode][JAVA][第297题][二叉树列的序列化与反序列化][递归][BFS]

【问题描述】[中等] 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列…

Java学习笔记10-1——MyBatis

文章目录简介第一个Mybatis程序搭建环境导入Mybatis&#xff0c;编写配置文件编写代码测试了解一下官方文档的建议实现增删改查select、insert、update、delete使用map进行CRUD模糊查询配置解析(mybatis-config.xml)核心配置文件mybatis-config.xml环境配置&#xff08;environ…

图像的离散余弦变换

Discrete Cosine Transform&#xff0c;简写为DCT 函数的偶对称性使DCT只有实数域变换结果, 不再涉及复数运算&#xff0c;运算简单&#xff0c;费时少&#xff1b; 又保持了变换域的频率特性&#xff1b; 与人类视觉系统特性相适应&#xff1b; 得到了更加广泛的应用。 二维…

【匈牙利算法】【二分图匹配】【转载】趣写算法系列之--匈牙利算法

转载自&#xff1a;http://blog.csdn.net/dark_scope/article/details/8880547 【书本上的算法往往讲得非常复杂&#xff0c;我和我的朋友计划用一些简单通俗的例子来描述算法的流程】 匈牙利算法是由匈牙利数学家Edmonds于1965年提出&#xff0c;因而得名。匈牙利算法是基于H…

Rest Framework

目录导航 一、RESTful 规范 二、APIView 组件 三、序列化组件 四、认证组件 五、权限组件 六、频率组件 七、分页器组件 一、RESTful 规范 什么是RESTful规范&#xff1a; REST与技术无关&#xff0c;代表的是一种软件架构风格&#xff0c;REST是Representational State Transf…

[剑指offer][JAVA]面试题第[26]题[树的子结构][递归]

【问题描述】[中等] 输入两棵二叉树A和B&#xff0c;判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构&#xff0c; 即 A中有出现和B相同的结构和节点值。例如: 给定的树 A:3/ \4 5/ \1 2 给定的树 B&#xff1a;4 /1 返回 true&#xff0c;因为 B 与…

二分图最大匹配的König定理及其证明

出处:http://www.matrix67.com/blog/archives/116 二分图最大匹配的Knig定理及其证明 如果你看不清楚第二个字母&#xff0c;下面有一个大号字体版本&#xff1a; 二分图最大匹配的Knig定理及其证明 本文将是这一系列里最短的一篇&#xff0c;因为我只打算把Knig定理证了…

【插件介绍】Lombok

Lombok ​ Lombok项目是一个Java库&#xff0c;它会自动插入编辑器和构建工具中&#xff0c;Lombok提供了一组有用的注释&#xff0c;用来消除Java类中的大量样板代码。仅五个字符(Data)就可以替换数百行代码从而产生干净&#xff0c;简洁且易于维护的Java类。 使用步骤&…

图像增强概述

问题背景&#xff08;Background&#xff09; 曝光不足或过度的照片-需要增强处理 图像Fourier频谱看不清-需要增强处理 图像有雾-需要 增强处理 车牌识别系统 车牌识别预处理-车牌图像需要增强处理 人脸识别预处理-人脸图像需要增强处理 指纹识别预处理-指纹图像需要增强处理…

并查集入门

quick-find 时间复杂度 quick-union quick-find&#xfffc;时间复杂度&#xfffc;### quick-union&#xfffc; &#xfffc; 按SIZE合并 按秩合并 路径压缩 面试了解基本思想 做蓝色 写路径隔代压缩 转载链&#xff1a;https://liweiwei1419.gitee.io/leetcode-algo/

Java学习笔记10-2——MyBatis

文章目录MyBatis详细执行流程使用注解开发面向接口开发使用注解开发复杂查询多对一问题测试环境搭建按照查询嵌套处理&#xff08;子查询、嵌套查询&#xff09;按照结果查询&#xff08;联表查询、联合查询&#xff09;一对多问题环境搭建按照结果查询&#xff08;联表查询、联…

基于直方图处理的图像增强

灰度图像的直方图 •灰度级直方图是图像的一种统计表达&#xff0c;它反映了该图中 不同灰度级出现的统计概率。 •设图像具有L个灰度级&#xff0c;图像中像素点的个数为n&#xff0c;它 的第k个灰度级出现的次数为(k0,1,2,…,L-1) 通过直方图可以看出图像整体的性质 直方图…

[Leedcode][JAVA][第1014题][最佳观光组合][数组][暴力优化]

【问题描述】[中等] 给定正整数数组 A&#xff0c;A[i] 表示第 i 个观光景点的评分&#xff0c;并且两个景点 i 和 j 之间的距离为 j - i。一对景点&#xff08;i < j&#xff09;组成的观光组合的得分为&#xff08;A[i] A[j] i - j&#xff09;&#xff1a;景点的评分之…

NLayerAppV3--.net Core2实现的DDD分层架构

虽然每天的工作都是CURD、还是使用着传统的三层架构、使用着.net Framework&#xff0c;但是这并不能影响我学习DDD和.net core。 总是希望软件在应对复杂多变的场景时能够游刃有余&#xff0c;在解决问题时能够多一种选择。 很早就有关注大神dax.net的NLayerApp系列博文https:…

Java学习笔记11-1——Spring5

文章目录1.简介组成拓展2.控制反转&#xff08;IoC&#xff09;IoC例子IoC本质3.Hello&#xff0c;Springdemo1修改user例子的代码思考4.IoC创建对象的方式通过无参构造的方式通过有参构造的方式5.Spring配置alias 设置别名Bean的配置import6.依赖注入&#xff08;DI&#xff0…

空间滤波增强

基本概念 空间域滤波增强采用模板处理方法对图像进行 滤波&#xff0c;去除图像噪声或增强图像的细节 空间域平滑滤波器 分析&#xff1a;任何一幅原始图像&#xff0c;在其获取和传输等过程中&#xff0c; 会受到各种噪声的干扰&#xff0c;使图像模糊&#xff0c;对图像分析…