web二阶段总结

**1.数据库

    数据库

    关系型数据库(用表和表之间的关系保存数据之间的关系的数据库称为关系型数据库) mysql

    SQL

        库操作

create database创建库

show database查看库

show  create  database  db_name显示数据库创建语句

alter database db_name修改数据库

drop database 删除数据库

use db_name选择数据库

        表操作

    常见数据类型

字符串型:varchar char

大数据类型:blob text

数值型:tinyint,int,double,float,

日期型:date,time,datetime

    字段约束

主键约束:primary key

唯一约束:unique

非空约束:not null

外键约束:

检查约束

创建表:create table

查看表:desc tabname

查看当前所有表:show table

查看当前数据库建表语句:show create table tabname

修改表:alter table tabname

删除表:drop table tbname

        表记录(一个javabean对象对应一条表记录)

插入数据:insert into tabname

修改数据:update tabname set

删除数据:delete from tabname

查询数据:select * from tabname

聚合函数

sum

avg

max

min

排序

order by

分组

group by

    sql语句的编写技巧

        关键字的书写顺序

        select from where group by having order by limit

        关键字的执行顺序

        from where group by having select order by limit

    多表设计

        1 - 1 设计在任意一边

        1 - * 在多的一边设计外键保存一的一方的主键

        * - * 设计第三方关系表存储两张表的主键的对应关系

       

    多表查询

        笛卡尔积查询

            两张表相乘的结果,往往包含大量错误数据

        内连接查询

            只包含两张表都有对应数据的数据

            select * from a,b where a.id = b.aid;

            select * from a inner join b on a.id = b.aid;

        外连接查询

            左外连接查询

                在内连接的基础上 增加左边有右边没有的数据

                select * from a left join b on a.id = b.aid;

            右外连接查询

                在内连接的基础上 增加右边有左边没有的数据

                select * from a right join b on a.id = b.aid;

            全外连接查询

                在内连接的基础上 增加左边有右边没有的数据 和 右边有左边没有的数据

                select * from a full join b on a.id = b.aid;#mysql不支持

                select * from a left join b on a.id = b.aid;

                union

                select * from a right join b on a.id = b.aid;#可以通过union模拟实现全外连接查询

**2.JDBC

    数据库驱动、JDBC

数据库厂商提供的用来操作数据库的jar包就叫做数据库的驱动

JDBC(Java DataBase Connectivity)就是Java数据库连接,

说白了就是用Java语言来操作数据库

               

    6个步骤实现JDBC

1*注册驱动

2*获取数据库连接

3*获取传输器对象

4*传输sql语句到数据库中执行,获取结果集对象

5*遍历结果集获取需要数据

6*关闭资源

    SQL注入攻击 - PreparedStatement   

原理:由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户,恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻击方式就叫做sql注入

防止:这时候就需要用到PreparedStatement对象

(预编译机制,用问号?来传递参数效率要比Statement高,省去了字符串的拼接,代码更加优雅)

      批处理

业务场景:当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率

  执行批处理SQL语句:Statement.addBatch(sql)

  执行批处理命令:execyteBatch()

  清除批处理命令:clearBatch()

  示例代码:

    Connection conn = null;

  Statement st = null;

  ResultSet rs = null;

try {

    conn = JdbcUtil.getConnection();

    String sql1 = "insert into person(name,password,email,birthday)     values('kkk','123','abc@sina.com','1978-08-08')";

    String sql2 = "update user set password='123456' where id=3";

    st = conn.createStatement();

    st.addBatch(sql1);  //把SQL语句加入到批命令中

    st.addBatch(sql2);  //把SQL语句加入到批命令中

    st.executeBatch();

} finally{

    JdbcUtil.free(conn, st, rs);

}

采用Statement.addBatch(sql)方式实现批处理

优点:可以向数据库发送多条不同的SQL语句

缺点:

  SQL语句没有预编译,当向数据库发送多条语句相同,仅参数不同的SQL语句时,需重复写上很多条SQL语句

采用PreparedStatement.addBatch()实现批处理

优点:发送的是预编译后的SQL语句,执行效率高

缺点:只能应用在SQL语句相同,单参数不同的批处理中.因此此种形式的批处理经常用于在同一个表中批量插入数据,或批量更新表的数据

      连接池

        通过连接池共享连接,减少连接的创建和销毁次数

  频繁的开关连接相当的耗费资源,所以我们可以设置一个连接池,在程序中共享,需要连接时从池中获取,用完再还会池中,通过池共享连接,减少开关连接的次数,提高程序的效率

    使用c3p0

  1.导入jar包

  2.写配置文件

  <?xml version="1.0"?>

<c3p0-config>

    <default-config>

        <property name="driverClass">com.mysql.jdbc.Driver</property>

        <property name="jdbcUrl">jdbc:mysql:///mydb1</property>

        <property name="user">root</property>

        <property name="password">root</property>

    </default-config>

</c3p0-config>

3.程序中获取连接池对象

ComboPooleDataSource pool = new CombopooledDataSource

3.HTML、CSS、JS(DHTML)、JQUERY

    静态资源

    HTML - 组织网页结构

        <a> <img> <table> <form>

    CSS - 美化页面

        选择器 常见的css属性

    JS(DHTML) - 一门脚本语言,可以在浏览器中执行,DHTML通过将HTML中的标签转换为JS对象,方便我们通过JS操作页面

    JQUERY - JS库,简化了js开发

        选择器

        常见方法

4.tomcat

    在tomcat中配置虚拟主机

        server.xml 中 <Engin>下配置 <Host name="虚拟主机名" appBase="虚拟主机管理的目录">

    如果在虚拟主机中配置web应用

        将web应用丢到虚拟主机管理的目录,将文件夹改名为ROOT,则变为缺省web应用

        server.xml 中<Host> 中配置<Context path="访问路径" docBase="web应用文件夹位置"/>,将path改名为空,则变为缺省web应用

        在conf/Catalina/[Host]/下创建xxx.xml在其中配置<Context docBase="web应用文件夹位置"/> 其中文件名称为访问路径,将文件名改为ROOT.xml,则变为缺省web应用

    如何配置web应用

        xxx

            |-html css js ...jsp...

            |-WEB-INF

                |-classes

                |-lib

                |-web.xml

        在web.xml中配置web应用各种信息

**5.HTTP协议

    浏览器和服务器之间通信的协议

  HTTP协议就是一套基于tcp/ip协议的应用层协议

  他规定了客户端(通常是浏览器)和服务器之间的通信方式

  基本原则:

    基于请求响应模型

    一次请求对应一次响应

    请求只能由客户端发出,服务器被动等待请求作出响应

    请求

        一个请求行

            GET /index.jsp HTTP/1.1

            请求方式 - 8种 - GET/POST

        若干请求头

            User-Agent:客户端的基本信息

            Referer:和防盗链相关的头,对当前资源的访问来自于哪个页面的超链接

            Cookie:和cookie相关的头

        实体内容

            GET提价时为空

            POST提交时包含请求参数

      内容为需要传递给服务器的内容数据

    响应

        一个状态行

            HTTP/1.1 200 OK

            状态码

                200成功 302重定向 304表示通知浏览器使用缓存中的资源 307表示通知浏览器使用缓存中的资源 404地址错误,找不到资源 500服务器错误

        若干响应头

            Location:配合302使用实现请求重定向

            Content-Type:服务器发送的数据是什么格式的,如果是字符格式的数据,则还可以通知服务器发送的数据使用的是什么编码,浏览器会根据这个头指定的编码决定使用哪个编码来打开收到的数据

            Refresh:定时刷新相关的头,通知浏览器,过几秒后自动刷新访问哪个网址

            Set-Cookie:和Cookie相关的头

            Expires:通知浏览器是否缓存

            Cache-Control:通知浏览器是否缓存

            Pragma:通知浏览器是否缓存

      之所以有三个头,是因为历史原因,所以为了网页的兼容性考虑,通常这三个头要一起使用

        实体内容

*6.Servlet

    sun提供的动态web资源开发技术

  按照这套规范写出来的Servlet可以放置到web应用中在Servlet可以放置到web应用中在Servlet容器中运行

  init(ServletConfig config)

  初始化方法,会在Servlet被创建出来后立即执行,做一些初始化的工作

  destory()

  销毁方法,会在Servlet被销毁之前执行,做一些善后工作

  service(ServletRequest req,ServletResponse res)

  服务方法,每当有请求访问Servlet时,此方法执行,处理请求的代码要写到这个方法里

    Servlet

        |-GenericServlet

    GenericServlet抽象类是对Servlet接口的默认实现,对Servlet接口中的大部分方法都做了默认实现,只有servlet方法是一个抽象方法需要继承者自己实现,实现者只需要实现Service方法在其中写处理请求的代码即可

            |-HttpServlet

      继承自GebericServlet类,在GenerucServlet类的基础上对HTTP协议进行了优化并且实现了其中的service抽象方法,在其中判断了请求的请求方式,并根据方式的不同分别调用不同的doxxx()方法

    通常我们在开发Servlet时,直接继承HttoServlet覆盖对应的doGet()doPost()方法即可,一般不推荐直接覆盖service()方法

    Servlet对外访问路径的配置,可以使用*号通配符,但只能为/开头/*结尾 或 *.后缀形式

    如果一个路径被多个<url-pattern>配置则优先级规则为:

        哪个最像找哪个,*.后缀优先级最低

    Servlet调用过程 及 生命周期

**7.Request

    代表请求的对象

    ServletRequest

        |-HttpServletRequest(子类)

    增加了很多关于http协议相关的方法

    获取客户机信息

        getRequestURL方法 -- 返回客户端发出请求完整URL

        getRequestURI方法 -- 返回请求行中的资源名部分

        getQueryString方法 -- 返回请求行中的参数部分

        getRemoteAddr方法 -- 返回发出请求的客户机的IP地址

        getMethod方法 -- 返回客户机的请求方式

        getContextPath方法 -- 获得当前web应用的虚拟目录名称

    获取请求头

        getHeader(name)方法 --- String

        getHeaders(String name)方法 --- Enumeration<String>

        getHeaderNames方法 --- Enumeration<String>

        getIntHeader(name)方法  --- int

        getDateHeader(name)方法 --- long(日期对应毫秒)

    获取请求参数

        getParameter(String name) -- String 通过name获得值

        getParameterValues(String name) -- String[] 通过name获得多值 如: 爱好

        getParameterNames() -- Enumeration<String> 获得所有请求参数的name

        getParameterMap() -- Map<String,String[ ]> key :name value: 多值

        乱码原因和解决 request.setCharacterEncoding();

    请求转发特点:

      一次请求一次响应

      地址栏地址不会变化

    域对象提供的方法

      setAttribute(String name,Object value)

      用来存储一个对象,也可以称为存储一个域对象

      getAttributr(String name)

      用来获取request中的数据

      removeAttribute(String name)

      用来移除request中的域属性

      getAttributeNames()

      获取所有域属性的名称

    实现转发

        getRequestDispatcher("路径").forward(request,response)

    实现包含

        getRequestDispatcher("B的路径").include(request,response)

    作为域对象使用

        生命周期

            请求开始创建

            请求结束销毁

        作用范围

            整个请求范围内

        主要功能

            在请求范围内(转发、包含过程中)共享数据

**8.Response

    代表响应的对象

    ServletResponse

        |-HttpServletResponse

    设置状态码

        setStatus(int sc)

        setStatus(int sc, String sm)

    设置响应头

        setIntHeader(String name, int value)

        setHeader(String name, String value)

        setDateHeader(String name, long date)

    获取指向实体内容的流(打给浏览器)

        PrintWriter getWriter();(字符流)

        ServletOutputStream getOutputStream();(字节流)

        响应输出乱码原理及解决 response.setContentType("text/html;charset=utf-8")

    实现请求重定向

        response.sendRedirect()

    实现定时刷新

        response.setHeader("refresh","3;url=xxx")

    实现禁止缓存

        response.setDateHeader("Expires", 0);

        response.setHeader("Cache-Control", "no-cache");

        response.setHeader("Pragma", "no-cache");

**9.Session

    将会话数据保存在服务器端的技术

    服务器为每个浏览器创建对应的session对象保存和该浏览器会话产生的数据(给予JSESSIONID的cookie工作)

    是一个域对象

    生命周期

        第一次调用request.getSession()时创建

        连续超过30分钟没人用销毁

        手动调用invalidate方法销毁

        服务器非正常关闭销毁

    作用范围

        整个会话范围

    主要功能

        在会话范围内共享数据

**10.Cookie

    将会话数据保存到客户端的技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会待着各自的数据去,这样,web资源处理的就是用户各自的数据了

  cookie是会话相关的技术,可以保存会话产生的数据,客户端技术,将数据保存在客户端,基于

    set-Cookie响应头和 Cookie请求头工作的

    new Cookie():创建cookie

  setValue/getValue:设置和获取cookie的值

    setMaxAge()/getMaxAge():设置cookie存活时间

    setPath():设置浏览器访问哪个地址及其子类地址时,待着cookie信息过来,

    response.addCookie()发送cookie

    request.getCookies()获取cookie

  删除:设置一模一样的新cookie,将MaxAge改为0

11.JSP

    jsp是java提供的动态页面技术

    看起来像html但是能写java代码

    jsp在第一次被访问时翻译成Servlet,访问jsp其实是Servlet执行

    模板元素 -- 被直接输出给浏览器

    脚本表达式 -- <%= %> -- 计算表达式的值 输出给浏览器

    脚本片段 --<% %> -- 直接复制粘贴到对应位置执行

    jsp指令

        page指令

        include指令

        taglib指令

12.EL

    想要的基本都能拿

    ${param.username}

    ${header.host}

    ${cookie.remname.value}

    ${pageContext.request.contextPath}

    ${sessionScpoe.user}

13.JSTL

    <c:if>

    <c:foreach>

14.ServletConfig

    代表servlet在web.xml中的配置信息

*15.ServletContext

    代表当前web应用的对象

    是一个域对象

    生命周期

        服务器启动web应用加载 立即创建,唯一代表当前web应用

        直到服务器关闭 web应用移除出容器时,随着web应用的销毁被销毁

    作用范围

        整个应用范围

    主要功能

        在应用范围内共享数据

16.PageContext

    代表jsp页面运行环境的对象

    是一个域对象

    生命周期

        访问jsp页面开始时创建

        访问jsp页面结束时销毁

    作用范围

        jsp页面范围

    主要功能

        在jsp页面内共享数据

**17.AJAX

    异步请求 局部刷新

  实现Ajax需几个步骤

  1-创建XMLHTTpRequest对象

  2-服务器端向客户端进行 响应(注册监听)

  3-客户端与服务器端建立连接

  4-客户端向服务器端发送请求

**18.JAVAEE开发模式

    MVC软件设计思想

    javaEE经典三层架构

  web层(网络层)

    --Servlet

    --JSP

  Service层(业务逻辑层)

    --Service

    --JavaBean

  Dao层(数据访问层)

**19.Filter

    过滤器

    拦截请求(对资源的访问) 允许/不允许通过 在通过之前和之后执行额外代码

开发过滤器步骤

    写一个类实现Filter接口

    在web.xml中配置Filter的拦截路径

    如果一个路径被多个Filter拦截,多个Filter按照<filter-mapping>的配置顺序依次拦截

生命周期

  服务器启动,web应用加载后,立即创建过滤器->调用init方法执行初始化->拦截到资源,dofilter方法执行->服务器关闭或web应用移除出容器时,随着web应用的销毁,过滤器对象销毁,销毁之前调用destory方法执行善后工作

   

*20.Listener

    监听三大作用域创建销毁的监听器

        ServletContextListener

        HttpSessionListener

        ServletRequestListener

    监听三大作用域属性变化的监听器

        ServletContextAttributeListener

        HttpSessionAttributeListener

        ServletRequestAttributeListener

    使javabean自己感知自己在Session域中状态变化的监听器  

        HttpSessionBindingListener

        HttpSessionActivationListener

 

*21.MD5

    数据摘要算法

    任意二进制经过MD5算成128位二进制

    原文相同MD5值相同

    原文不同MD5值不同

    只能由原文算成密文

    密文无法算回成原文

    数据库中的密码保存

    cookie中的密码保存

*22.URL编码

    HTTP协议只支持ISO8859-1

    对于非ISO8859-1的字符,需要通过URL编码处理后才能传输

    平常浏览器和服务器会自动进行URL编解码

        张 --> 01010001... --> 3D4F6A --> %3D%4F%6A

    但某些场景下需要开发者自己进行URL编解码

        URLEncoder.encode()

        URLDecoder.decode()

**23.事务

    逻辑上的一组操作 要么同时成功要么同时失败

    数据库默认的事务是一条语句独占一个事务

    可以通过命令手动管理事务

    start transaction;

    commit;

    rollback;

    conn.setAutoCommit(false)

    conn.commit();

    conn.rollback();

    事务的四大特性

        原子性

        一致性

        隔离性

        持久性

    隔离性:

        读 读 --> 不隔离

        写 写 --> 要隔离

        读 写 --> 可能存在脏读、不可重复读、虚读/幻读问题,这些问题某些场景下是问题,某些场景下不是问题

    四大隔离级别

        (读未提交)read uncommitted; - 有脏读 不可重复读 虚读/幻读 问题

        (读提交)read committed;   - 不可重复读 虚读/幻读 问题

        (可重复度)repeatable read;  - 虚读/幻读 问题

        (串行化)serializable;     - 可以防止所有问题 但性能很差

        在防止想要防止的问题的前提下 选择性能尽量好的隔离级别 - repeatable Read

    锁机制

        共享锁

            共享锁和共享锁 可以共存

            共享锁和排他锁 不可以共存

        排他锁

            排他锁和任意锁不能共存

        非seri下查询不加锁 seri下查询加共享锁

        任意模式下增删改加排他锁

        =============================================

        改(排他)          --互斥--          改(排他)

        非seri查(不加锁)  --共存--  非seri查(不加锁)

        非seri查(不加锁)  --共存--  seri查(加共享锁)

        seri查(加共享锁)  --共存--  seri查(加共享锁)

        seri查(共享)      --互斥--         改(排他)

        =============================================

依赖注入和控制反转

控制反转(IOC):

将对象的创建的权利以及对象的生命周期的管理过程交给Spring框架来处理,

这个由spring框架管理对象创建和生命周期的机制称为控制反转

依赖注入(DI):

如果spring容器通过IOC控制大量的bean对象,也能将对象的关系管理起来,是通过DI注入依赖完成的

通俗的将就是,由容器动态的将某个依赖关系注入到组件中,依赖注入的目的不是为了软件带来更多的功能,而是为了提升组件重用的频率,为系统搭建一个灵活可扩展的平台

依赖注入有哪几种方式:

工厂方法注入

属性注入

构造器注入

控制反转有哪几种方式:

属性注入

构造器注入

注释注入(@Resource)

自动扫描注入(dao类上@Repository,Server类上@Service("p"))

Spring自动装配的方式

1.默认方式,手动装配,需要通过ref设定bean的依赖关系

2.byName:根据neam的名字进行装配,当一个bean的名称和其他bean的属性一致,则自动装配

3.byTpye:根据bean的类型装配,当一个bean的属性类型与其他bean的属性类型一致,则自动装配

4.constructor:根据构造器装配,与byType相似,如果bean的构造器与其他bean]类型相同的属性,则进行自动装配

5.autodetect:如有默认构造器,则以constructor方式进行装配,否则也byType方式进行装配

@Autowired作用是什么

是一个注释,可以对类成员变量,方法及构造函数进行标注,让spring完成bean自动装配的工作

简答来说就是引入由Spring容器管理的bean

Spring

1.解析spring.xml配置文件,

2.执行beanFactory的后处理器

3.由beanFactory创建每个类对应的单例对象,利用了反射根据类名创建每个类的实例对象(构造,初始化方法)

4.执行bean的后处理器

5.执行依赖注入

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
十四节气是中国传统的时间划分方式,与农事活动和天文现象关联密切。在现代的Web源代码开发中,我们可以借用十四节气的概念来描述一套高效的开发流程。下面以一个典型的Web源代码开发项目为例,来解释十四节Web源代码的意义。 1. 立春:项目准备阶段,确定项目的需求和目标,制定项目计划和时间表。 2. 雨水:进行用户需求调研,收集和整理用户反馈,确定优化和改进的方向。 3. 惊蛰:项目启动,搭建开发环境,开始编写源代码。 4. 春分:进行代码审核和测试,确保代码质量和功能完整性。 5. 清明:清理和优化代码,清除冗余和无用的代码,提升代码性能和可读性。 6. 谷雨:进行功能性测试,确保各项功能的正常工作。 7. 立夏:进行用户界面的设计和开发,提供良好的用户体验。 8. 小满:进行性能测试和优化,确保系统能够承受高并发和大数据量的访问。 9. 芒种:进行安全性测试,保护用户数据和系统免受恶意攻击。 10. 夏至:进行部署和上线,将代码正式发布到生产环境。 11. 小暑:监测系统运行情况,及时解决出现的问题和错误。 12. 大暑:收集和分析用户使用数据,获取反馈并进行优化和改进。 13. 立秋:进行版本迭代和升级,添加新功能和修复已知问题。 14. 处暑:进行系统维护和性能优化,确保系统运行平稳和高效。 15. 白露:进行数据备份和恢复测试,确保数据的安全性和可靠性。 16. 秋分:进行代码重构和优化,提升系统的可维护性和扩展性。 17. 寒露:进行跨平台和跨浏览器测试,确保系统在不同环境下都能正常运行。 18. 霜降:进行灾难恢复和应急备案,准备应对系统故障和数据丢失的情况。 19. 立冬:进行代码性能分析和调优,提升系统的响应速度和效率。 20. 小雪:进行安全漏洞扫描和修复,确保系统不受到黑客攻击和数据泄露。 21. 大雪:进行用户反馈调研和用户体验改进,满足用户需求和期望。 22. 冬至:进行系统整体评估,总结项目经验教训,准备下一阶段的开发计划。 23. 小寒:进行持续集成和自动化测试,提升开发效率和代码质量。 24. 大寒:进行源代码版本控制和文档整理,确保代码的可追溯性和可维护性。 通过以上十四节Web源代码的划分,可以使开发团队在项目开发过程中有一个清晰的时间轴和任务安排,从而提高项目开发效率和代码质量,最终实现一个高效、稳定和安全的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乔同学Online

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值