POJO:Plain Ordinary Java Object
不含业务逻辑的java简单对象;
可以称为支持业务逻辑的协助类;
有时被称为Data对象,大量用于表现现实中的对象;
实际就是普通的JavaBeans,使用JOPO名称是为了避免和EJB混淆起来,其中主要是有一些属性及其getter setter方法的类,简单的运算属性可以,不允许出现业务方法,也不能携带有Connection之类的方法;

POJO有一些private参数作为对象的属性,然后针对每个参数定义了get()和set()方法作为直接访问的接口;

OGNL:
简单一致的表达式语法,1)可以存取对象的任意属性,2)调用对象的方法,3)遍历对象的结构图,4)实现字段类型的转换等功能,它使用表达式去存取对象的属性;
使用相同的表达式去存取对象的属性,更好的获取数据;

其有三种符号:
1)#:访问非根对象属性,#相当于ActionContext.getContext();;#session.msg表达式相当于

              ActionContext.getContext().getSession(). getAttribute(”msg”) 。
2)%
3)$

session.setAttribute(“username”,username);
将后者的username内容放到前者username中并保存起来
方便与在其他的页面提取username的值
request.getSession().setAttribute(“key”,value);

session.getAttribute();

getAttribute() 方法返回指定属性名的属性值。

提示:如果您希望以 Attr 对象返回属性,请使用 getAttributeNode。

<%--导入标签库--%>

<%@ taglib uri="/struts-tags" prefix=“s” %>
<%–要想使用 OGNL 表达式,需要借助 struts2 的标签–%>
<s:property value=“OGNLExpression”/>
在struts框架中使用EL表达式,还是要借助struts的标签;

Ognl中对java对象属性值的访问,静态和非静态方法的调用,Ognl如何处理数组、集合和Map类型的数据以及集合的投影、过滤等几个方面介绍了日常用到的OGNL知识,这是基础,但却又是最关键的东西,牢记!

Modle1思想:是只用jsp将业务逻辑处理和视图放在同一个页面;
Modle2思想:MVC思想,javabean,jsp,controllerServelt;

模型视图的练习:
编写用户注册程序:
JSP:register.jsp和loginSuccess.jsp;
Servlet:一个ControllerServelt类;
JavaBean:registerFormBean和UserBean.和一个访问数据库的辅助类DBUtil类;
RegisterFormBean是封装注册表单信息的javabean,对于ControllerServelt中获取的数据(属性)进行校验;
ControllerServelt负责用户注册请求,如果注册的结果转发到相应的jsp页面;

用户注册

两列合并为一列居中显示;
一行分为两行;

trim( )的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉,当然中间的那些空格不会被去掉,如:String s = " a s f g ";

判断字符串是否为空:

name.strim().equals(“”);
name.length()==0;
前者适用于字符串的精准识别;

数据库连接池:
就是分开管理Connection,连接和断开的过程空耗资源,交给连接池统一分配,返回和回收,并交付给其他线程使用;

Servlet基础内容大纲:

  1. 掌握Servelt接口及其实现类的使用;
  2. 了解Servlet的生命周期;
  3. 熟练使用Eclipse开发Servelt;
  4. 掌握Servlet虚拟路径映射的配置;

狭义:servelt是指java语言的一个接口,处理请求和响应的一个接口;
广义:任何继承了Servlet这个接口的类,一般默认就是这种理解;

Servelt主要就是用于处理客户端浏览器传来的HTTP请求 ,并返回一个响应,它能够处理的请求有doGet(),doPost()等方法;

1.客户端
2.HTTP服务器(例如:Tomcat):静态HTML解析,对于Servelt请求转交给Servlet容器,这个容器根据web.xml文件中的映射关系,调用相应的Servlet,Servelt将相应的结果按传入的逆序返回给客户端;
3.Servlet容器:
4.Servelt

Javax.servlet.Servelt中定义了5个抽象方法;
通常情况下,编写的类都是继承自HttpServelt,在开发中使用的Servelt对象就是HttpServlet对象

Servelt的生命周期:

  1. 初始化阶段:
    请求的时候会调用init()函数,而且加载后,还是放在Servlet容器中,整个生命周期内只会被调用一次;

  2. 运行阶段:
    重点,Servlet对象会请求创建代表HTTP请求的ServletRequest对象和HTTP响应的ServletResponse对象,
    然后将他们作为参数传递给service()方法。这个方法会根据前者对象获取客户请求的信息,并处理该请求,根据后者对象生成响应结果。Servlet的每一次请求访问,Servlet容器都会调用一次Servelt的service()方法,并且创建新的请求和响应的对象。Service()方法在Servlet的整个生命周期中会被调用多次;

  3. 销毁阶段:
    服务器关闭或者web应用被移除,Servelt会随着web应用销毁而销毁,在销毁Servelt之前,会调用destroy()方法,让Servlet对象释放他所占用的资源,只会被调用一次;

Servlet的一个子元素load-on-startup:
Servlet中的程序会随着Tomcat的启动而启动,不用手动访问;如果是一个负数,就是在请求servelt时候访问,如果是一个正数或者0,就是随web应用启动而启动,越小越先加载;

学会看各类接口的源代码;
内部虚拟机运行的情况了解一下;
Eclipse会自动编译servlet,也会自动创建web.xml文件信息,完成Servlet的虚拟映射路径。
Src的目录下文件编译成class文件存放到classes目录下,web module中是可以修改的;
Context root是Web项目的根目录,存放web资源

新建的servlet中点击next可以设置接口和映射文件的信息以及最后实现的方法名;

控制类继承HttpServlet后,只需根据请求方式,重写对应方法即可,不需要重写service()方法;

采用GET方式请求Servelt时,会自动调用doGet()方法。
采用Post方式请求,一般要用表单提交的方式设置为post方法;

如果GET和POST请求处理的方式一致,则可以在doPost()中直接调用doGet();或者在doGet()中直接调用doPost();

Servlet映射的问题:

  1. servlet的多重映射;
    同一个servlet类可以用多种不同的servlet来进行访问;
  1. 配置多个
  2. 一个中配置多个元素

以上是多重映射,相应的在过滤器中,Filter中,一个地址可以实现多个servelt类的拦截;

  1. servlet映射路径中使用通配符
    需求:某个目录下,所有的路径都可以访问同一个Servlet;
    1)“.拓展名”,例如“.do”,以.do结尾的所有URL地址;
    2)“/”,例如“/abc/”,匹配以/abc开头所有的URL地址;

以上两者不能同时混用;
Tomcat安装目录下的web.xml可以处理缺省的Servlet;

ServletConfig和ServeltContext

Servlet中的编码信息被读取出来了,通过HttpServlet可以获取到ServletConfig对象,通过这个这个对象就可以访问web.xml文件中的参数信息了;

ServletContext接口;
Servlet容器启动的时候,会为每一个web应用创建一个唯一的ServletContext对象,代表当前web应用,封装了web 应用的所有信息,实现了多个Servlet之间共享。
Web.xml整合web应用的初始化信息;

在servlet的方法体中解决输出乱码问题;
resp.setContentType(“text/html;charset=UTF-8”);

通过ServletContext对象可以获取到web应用的初始化参数;

实现多个Servlet对象共享数据:
(此实验的data值没有获取到)

ServletContext对象储存的数据是可以被web目录下的servlet共享;

JDBC中常用的API:
JDBC API:用户程序接口;
主要位于java.sql包中;

JDBC是用户程序和数据库之间的桥梁,不必使用数据库厂商的接口,提高了程序的可移植性;
Driver:驱动程序必须实现的接口,提供给数据库厂商使用;注意导入*.jar

  1. Driver接口:
    这是驱动程序必须实现的接口,该接口提供给数据库厂商使用;需要把数据库驱动或者类库加载到classpath;

  2. DriverManager类:
    主要加载JDBC驱动并建立连接。在此类中有两个重要的静态方法,

  3. Connection接口:
    代表java程序和数据库相连接,只有获得该对象后才能访问数据库,并操作数据表。

  4. Statement接口:
    主要是执行静态的SQL语句,并返回一个结果对象,通过Connection获得,并把静态的sql发送到数据库编译执行,然后返回数据库的执行结果;
    提供了三个实现方法:
    Execute(String sql):执行各种sql,返回的是boolean类型值;如果是true,表示所执行的sql有查询结果,通过Statement的getResultSet()方法获得查询结果;
    ExecuteUpdate(String sql):完成增删改的sql语句,返回值是一个int值,表示数据库受到该sql语句影响的条数;
    ExecuteQuery(String sql):完成select语句,该返回对象是一个ResultSet对象;

  5. preparedStatement
    Statement中封装了JDBC中的SQL语法,可以完成java程序执行SQL语句操作;
    这个接口是,由用户传入参数(变量),完成sql语句的查询;是Statement的子类;
    Sql中可使用占位符?,然后通过set***()方法为sql中的参数赋值;也可以使用setObject()方法设置多种类型的输入参数;

ResultSet接口:
保存查询时返回的结果,该结果集封装在一个逻辑表格中,接口内部有一个指向表格数据行的游标,初始化时,位于首行之前,通过next()方法向后读取,当下一行没有数据的时候,就会返回一个false值,在while循环中常用next()方法作为循环条件来迭代ResultSet结果集;
其中定义了大量的get方法,使用哪种取决于数据类型;

以上是常用的API和其中封装的一些方法;

注意:ResultSet Statement Connection每次使用完成后都要关闭资源;

注意:导包的时候全部来自java.sql包下,通过数据库驱动conn = DriverManager.getConnection(url,name,password);创建对象的时候要抛出一个异常;

这种方式是基础,后期要做封装,不能直接这样使用,rs中存取字段的方法是根据返回字段的类型来决定;

Sql语句的执行,是通过Statement对象来实现的,Statement每次执行sql语句的时候,都会进行预编译,当相同的sql语句重复执行的时候,就会使用数据库频繁编译相同的sql,造成空耗资源的情况,降低数据库的访问效率;
解决办法:子类PrepareStatement继承了父类,有缓存区储存信息,会先在缓存区进行搜索;

此实验提示sql语法不正确?
问题解决:

PreparedStatement对象里,最后执行sql方法的时候不能加sql;

这种是加载DriverManagerDataSource对象,获取数据库基本属性值后注入JdbcTemplate对象中;

数据库连接池:

  1. DataSource接口:
    为了获取数据库连接对象,JDBC提供了javax.sql.DataSource接口,负责与数据库建立连接;
    Connection getConnection();
    Connection getConnection(String username,String password);
    这两种方法获得与数据库建立连接;

接口通常都有实现类,习惯性把这个javax.sql.DataSource接口叫做数据源,即数据的来源;就像通过指定文件名称一样,通过正确的数据源名称,可以找到相应的数据库连接;

常用的有DBCP数据源和C3P0数据源;

BasicDataSourceFactory是创建BasicDataSource对象的工厂类,它包含返回这个对象的方法createDataSource(),该方法读取配置文件的信息生成数据源对象并返回给调用者,数据库连接信息和初始化信息提取出来写进配置文件的方式,让代码看起来简洁清晰;

BasicDataSource创建了一个数据源对象,然后获取到了数据库连接对象;

BasicDataSourceFactory工厂类成功读取了配置文件并创建了数据源对象,然后连接数据库对象;

C3P0数据源:
实现了DataSource数据源接口,接口的实现类ComboPooledDataSource,是它的核心类;

这是C3P0数据源对象成功获取到数据库连接;

C3P0配置xml的时候怎么开启自动提示?
使用C3P0数据源从配置文件中获取Connection对象;

QueryRunner类:
简化了执行SQL语句的代码,与RestultSetHandler组合在一起就能完成大部分数据库操作,减少代码量;
将javax.sql.DataSource作为参数传递到QueryRunner的构造方法来获取Connection对象;提供了三种常用的方法;

ResultSetHandler接口处理ResultSet的结果集,他可以将结果集转换成不同的形式,根据结果集中数据类型不同,ResultSetHandler提供了几种常见的是实现类;

Session是一种将会话技术保存到服务器端的技术;
HttpSession API:
HttpServletRequest中定义了获取Session的getSession()的方法;
GetSession(boolean create):根据传入参数判定是否创建HttpSession对象;
GetSession():在发送响应内容之前创建;
都是返回当前请求HttpSession对象;

当客户第一次访问开启会话功能的资源时,Web服务器就会创建相应的HttpSession对象;即使关闭了客户端浏览器,这些对象仍然放在服务器内存中;
设置超时限制解决,判断服务器是否还在运行;
在Tomcat的\conf\web.xml中有如下配置:
默认会话超时间隔为30分钟;设置为0或者负数表示永不超时;

< session-timeout >30

这是会所有web应用都起作用,可以在单独的web.xml中再次进行配置;局部优先级大于整体的优先级;要想释放Session,除了等待超时,还有invalidate()方法;

来自工具类util的Map<String,泛型对象> books:
这个对象采用put()方法存入泛型对象的值;
Books.put(“1”,new book(“1”,”javaweb开发”));

//返回所有的图书对象
Public static collection getAll(){
Return books.values();
}

//根据指定ID获取图书
Public static Book getId(){
Return boos.get(id);
}

服务器传递Session对象的ID属性是以Cookie的形式传递给浏览器的,如果浏览器的Cookie的功能被禁止,服务器无法通过Session保存用户的信息;

Session能够实现一次性验证码;为了保护用户信息安全,限制使用暴力软件来猜测验证码;验证码的图片来自CheckServlt类;

Session能够储存复杂的java对象;

JSP基础技术:
Jsp文件与HTML区别:
首行加了一个page指令,<%@page %>,jsp文件只有发布到web容器的web应用中才能看见;
Jsp的工作模式就是请求与响应模式:
Jsp程序收到请求后进行处理并返回处理结果,jsp文件第一次被请求,jsp引擎容器把该JSP文件转换成一个Servlet,而这个引擎本身也是一个Servelt,经过.java被编译成.class文件,生成Servlet实例;

Jsp转义编码的过程:
HttpJspBase类是HttpServlet的一个子类

JSP脚本元素是指嵌套在<%和%>之中的一条或者多条java程序代码。通过脚本元素可以将java代码嵌入HTML网页中;这里不能定义全局变量;输出内容;

<%!和%>里面定义的属性是成员属性,相当于类的属性,方法相当于全局的方法,也相当于类的方法,但是不可以进行输出,只是方法和属性的声明定义;定义成员变量属性和方法;

Jsp表达式:
<%= expression %>
“<%=” 和”%>”之前是表达式,不能插入语句;且表大式后面不能有分号;

<%–注释的信息–%>
这种格式在编译时会被忽略,不会发送到客户端;

JSP指令:
Page和include指令;

Page指令对整个页面都有效,与书写位置无关,习惯上把page写到第一行。后面属性名=”属性值”;
Include指令:
<% include file=”被包含的文件地址”%>

指定插入到JSP页面目标位置的文件资源。

插入文件路径一般不是”/”开头(这种形式表示的是当前web应用的根目录),一般使用的是相对路径;

Javax.servelt.jsp.JspWriter类的实例对象out对象和ServletResponse.getWriter()方法返回的PrintWriter对象十分相似;

Servelt引擎按照缓冲区中数据存放的顺序输出内容,只有jsp页面执行结束后,out对象中的输入缓冲区数据才真正写入到Servelt引擎提供的缓冲区;

Page指令中加入 buffer=”0kb”out对象中的输入缓冲区的数据直接写到Servelt引擎中;
PageContext对象:

Exception对象:
Java.lang.Expception类的实例对象;

JSP动作元素:
<jsp:include page=”relativeURL” flush=”ture|flase”>
Page属性用于指定被引入资源的相对路径;flush属性是否将当前页面内容刷新到客户端,默认情况下的值为flase;

<jsp:forward page=”relativeURL”>
动作元素将当前请求转发到其他web应用资源(HTML JSP Servlet),转发请求执行后,当前页面不再执行,去执行指定页面;

熟悉这种直接将工具类的对象输出的方法;
System.out.println(new java.util.Date());

这种转发请求是服务器端的操作,浏览器并不知道请求的页面,所以浏览器的地址没有变化;

EL表达式和JSTL
了解什么是javaBean;
EL表达式和JSTL标签库;
BeanUtils工具;
EL中常见的隐式对象;
JSTL中常见的core对象;

JavaBean实质上就是一个普通的.java对象,但是他要符合一定的规范;

  1. 必须是公共无参的构造方法,可以是编译器自动产生的默认构造方法;
  2. 必须提供公共的getter和setter方法,让外部程序可以获取和设置JavaBean的属性。若是一个属性值只包含其中的一个方法,表示该属性值为只读或者只写属性;

如果出现属性值为Boolean,他的命名方式应该使用is/set,该属性方法声明如下;
Public boolean isMarried(){…}
Public void setMarried(boolean married){…}

Set方法的命名没变,get方法的命名变成isMarried(),这种更为符合规范;

BeanUtils工具中封装了许多类,核心是BeanUtils类;

EL表达式:
在JSP开发中,为了获取Servelt域中储存数据用java代码来写<%= expression %>的方式较为繁琐,也会造成混乱,不易维护的特点;

格式:
以${开头,以}结尾;
${表达式}

当域对象里面的值不存在时,使用EL表达式获取域对象里面的返回值为空字符串;而使用java方式获取,返回值是null时,会报空指针异常。所以在实际开发中建议使用EL表达式获取域对象中储存的数据;

EL中保留字:就是事先定义好并赋予了特殊含义的单词;

变量、常量、字符串常量、Null常量;

点运算符:访问对象的属性或者方法;
方括号运算符[]:如果是使用了特殊的符号,就需要用[]来访问属性和方法,用法同点运算符;
例:user[“my−name”]1.{user[“my-name”]} 1.user[“my−name”]1.{user.username}等价于${user[“username”]}

  1. 方括号运算符还可以访问List集合或数组中指定索引的某个元素,如${user[0]}访问数组元素的第一个值;
  2. ${user[0].username}用于访问数组第一个元素的username属性;

算数运算符;计较运算符(得到的是boolean值);

Empty运算符:用于判断某个对象是否为null或者“”;
语法格式:${empty var}

Var变量引用集合(Set Map List)类型对象,并且在集合中没有任何元素,就返回true;

条件运算符:
${A?B:C}
A条件为true返回B的值,否则,返回C的值;

用()来控制运算各级的优先级;
EL隐式对象:

PageContext对象:

在web开发中,PageContext HttpServelt HttpSession ServletContext这四个对象之所以能储存对象,是他们内部都定义了一个Map集合,有一定的作用范围;

习惯把这些Map集合称为域;Map集合所在的对象称之为域对象;
EL表达式只能在这作用域中获取对象

JSTL:
降低页面复杂程度,提高代码的重用性,为了统一标签库,就使用JSTL;

标签库 标签库的URL 前缀
Core c
SQL Sql
XML x
Functions f
L18N fmt

core:核心标签库
<c:out>:输出文本内容的标签;
<c:if>:用于条件判断的标签;
<c:forEach>:用于迭代循环的标签;

Functions:函数标签库
自定义EL函数,提取子字符串和获取字符串长度;

导入这两个包 Jstl.jar和standard.jar至lib目录下;

然后使用taglib指令导入Core标签库;

”Object[]“是定义了一个一维的对象,这个Object是任何对象的父类,也就是说可以转换成任何的类型。举例:
Object[] object = new Object[3] ;
object [0] = new String(“12312”);
object [1] = new String[] { “String1”, “String2” };
object [2] = new Date();
解释:也就是说Object类型之后可以给任意类型的值或者对象赋值给当前的object 对象,而不需要强制类型转换,方便操作。

隐式对象就是不用声明就可以直接使用的对象;

针对java web基础系统梳理随笔录相关推荐

  1. Java Web基础面试问题——Cookie和Session

    Java Web基础面试问题 Cookie 和 Session 的区别 什么是HTTP 超文本传输协议,是一种用于分布式.协作式和超媒体信息系统的应用层协议. 设计HTTP最初的目的是为了提供一种发布 ...

  2. Java Web基础

    目录 Java Web基础 HTML基础 HTML补充 CSS基础 CSS补充 JavaScript基础 JavaScript补充(例题) Java Web补充 Java Web基础 HTML基础 标 ...

  3. ssh+mysql实现的Java web论坛系统源码

    今天给大家来演示一下一款有spring+struts2+hibernate+mysql实现的Java web论坛系统源码,本系统功能类似与csdn论坛,用户发帖时可以设置积分,当结帖时可以选择给评论的 ...

  4. Java web基础学习笔记

    1.xml概述 1.1xml:xml一种数据存储格式,这种数据存储格式在存储数据内容的同时,还能够保存数据之间的关系 1.2xml保存数据的方法:xml利用标签来保存数据的内容,利用标签之间的嵌套关系 ...

  5. 【转】Java学习---Java Web基础面试题整理

    [原文]https://www.toutiao.com/i6592359948632457731/ 1.什么是Servlet? 可以从两个方面去看Servlet: a.API:有一个接口servlet ...

  6. Java web 基础

    以 GET /static/ 为开头:表示静态资源 一个页面请求时,该页面会有许多静态页面组成,会在服务器端产生对应的日志信息.我们在进行日志分析时,显然要将这部分内容过滤掉. 1. HTTP.GET ...

  7. Java Web基础知识之安全:人生苦短,注意安全

    关于web程序中的安全方面,想必大多数人都不甚了解,或者说感觉没有必要了解,身边开发网站的人主要就是注重后台的功能和前台的界面,不要说程序的安全问题,甚至后台数据库访问的问题可能都没有下大力气解决.但 ...

  8. java WEB 基础复习_开篇--Java Web基础知识

    本篇主要是博客的开篇,是一些很基础的知识,我写博客的目的很简单.主要是供自己学习使用,督促自己学习,希望自己能坚持下来. 当前三大主流的Web动态网页技术是PHP(Personal Home Page ...

  9. [转]Java Web基础——Action+Service +Dao三层的功能划分

    原文地址:http://blog.csdn.net/inter_peng/article/details/41021727 参考来源:http://www.xuebuyuan.com/2153333. ...

最新文章

  1. 某程序员求助:30万年包留在家乡华为,50万年包去新加坡shopee,选哪个?
  2. 计算分数加减表达式的值
  3. Exercise: Logistic Regression and Newton's Method
  4. 计算机网络实验报告4icmp,实验04-ip、icmp协议分析
  5. python返回字符串长度的函数_Python如何查找字符串的长度?(代码示例)
  6. 看到的精彩的地方 分享下
  7. Xilinx FPGA用户原语介绍
  8. Java基础面试题集(二)
  9. asp毕业设计—— 基于asp+access的网上论坛设计与实现(毕业论文+程序源码)——网上论坛
  10. 2012年8月 至 2014年2月1日读书列表
  11. ubuntu命令 图片 壁纸_[教程]Ubuntu下完整配置自动壁纸切换
  12. 程序猿真的觉得写代码比女朋友重要吗?
  13. 我的世界rpg服务器无限点卷无限金币地址,我的世界RPG插件无限刷任何物品 | 手游网游页游攻略大全...
  14. Parameter number 2 is not an OUT parameter 问题的解决方法
  15. 怎么从 Java8 升到 Java11?
  16. Python 入门经典必背的 18 个程序,学完就入门 Python 了
  17. GT工具中用到的英文词解释
  18. C++坑人游戏(加更)
  19. 什么是PSAM卡、SAM卡、SIM卡
  20. 数字孪生流域建设是什么意思?它有哪些可行性关键技术?

热门文章

  1. 【QA】Python代码调试之解决Segmentation fault (core dumped)问题
  2. 汽车tbox是车联网系统
  3. macOS下 弹出无法保存文件,请检查权限或文件是否处于只读状态
  4. 同济大学计算机硕士毕业单位,同济大学硕士毕业开题报告.doc
  5. 别让 Linux 成为拿offer的阻碍
  6. 1.从创建开源仓库开始
  7. python编写简单聊天程序
  8. win11文件复制进subsystem for android
  9. Rotate RotateAround
  10. web大学生个人网站作业模板 HTML期末大作业