未分类

作者: 高永骁 | 来源:发表于2018-06-07 22:06 被阅读0次

静态网页

动态网页CGI  asp(html+JavaScript+com组件) PHP 

jsp(html+java片段+jsp语法+js)在servlet基础上发展的

B/S开发模式(browser/server)浏览器→服务器

C/S开发模式(client/server)客户端→服务器

html:行内元素 独占一行      块级元素

target=  _blank新建选项卡打开 _self当前选项卡打开

在frameset中,可以给target指定一个frame的name

display改变元素的样式

CSS层叠样式表

常用的选择器:

标签选择器父子选择器class类选择器(.) ID选择器(以#开头) 通配符选择器(*)

浮动float

JavaScript:解释性语言  是基于对象和事件驱动

广泛用于客户端的web开发的脚本语言,常给html添加动态功能

没有class(类)

var Fish = new Fish()当做类使用

数字类型布尔类型字符串类型(使用引号)

false 0 “”null undefined NaN都表示false。

null:变量的值为null/赋值为null

undefined:变量没有值/声明了变量,没有赋值

算术运算:

推断:refer

当if遇到||运算时 从前向后运算  遇到真的时候返回真的对象 当没有真 就返回最后一个为假的对象

var input = window.prompt();

window.alert();

document.write();

强转parseInt();变整型

JS中,函数/方法定义的时候,形参不需要var

数组:foreach: Java中遍历的是元素  JS中是下标 用in替代:

数组中的键值对只能遍历出来

函数:自定义函数系统函数

调函数只看函数名

function函数调用时可直接赋参数 

用arguments可以for循环出赋予的参数(arguments里存放了通过参数传来的参数值)

重载:无重载后面的会覆盖前面的

定义类(原型对象)和对象:

没有类的概念,类怎么来?创建对象实例可通过构造函数实现

function Car(){}

var c = new Car();

1、①动态绑定属性 c.name=””;②动态绑定方法 c.run = function(){}

2、有参构造方法中 动态绑定 用 this.替换上面的c.  不用this用var 是私有的

即在JS中 被this修饰的都是公开的 否则为私有

静态绑定Car.prototype.属性或方法 所有对象都拥有了这些属性和方法

Array直接new 直接放

JSON一种简洁的方式创建一个对象 var car = {:,:,}

①var str = '{"name":"huangxiaojian","age":"23"}'

JSON.parse(str)    age: "23" name: "huangxiaojian"

②var a = {a:1,b:2}   

JSON.stringify(a)    "{"a":1,"b":2}"

封装

继承:①使用对象冒充的方式实现继承  多继承 多重继承

this.xx =父名;

this.xx();

  ②原型链:上面所示的静态绑定。

多态无态的

JS内建对象

Object对象.constructor,返回代码    Math    Date  String  Array  Boolean  Number

系统函数

URL:统一资源定位

URI:统一资源标识符

都能表示网络资源但前者可以获取资源

eval();

JS事件驱动机制

document.getElementById(“id号”);

-c→ C

DOM

删除p标签:先获取父节点 再删除子节点

onsubmit询问是否提交表单

window.setInterval(“方法”,毫秒)  每隔多少毫秒 调用一次方法

open(“网站”, “_self”)不新建的打开网站

span.innerText

History列表

Location对象

Navigator对象

Screen对象

Event对象  事件

Document对象常用函数

document.createElement(“a”)创建一个标签

了解:Tomcat WebSphere WebLogic

Tomcat:入门级服务器,支持JSP Servlet

WebSphere: IBM专业级应用服务器,支持JSP Servlet 数据库连接池管理 EJB容器等

WebLogic:世界第一应用服务器,支持数据库连接池 EJB容器 集群管理

Servlet与CGI(通用网关接口)的区别

Servlet是通过多线程的方法运行service的,一个实例服务于多个请求,实例一般不销毁。CGI是每次请求都会创建新的进程,服务完后就销毁

接收、处理、响应

Servlet:

servlet在Web服务器的运行过程:装入→→初始化→→调用→→销毁

主要体现在:init()service()destory()

加载和实例化:Servlet容器负责加载和实例化Servlet

1、初始化:init()  读取配置信息、初始化参数等,在Servlet生命周期中只执行一次。

2、调用:service()  ServletRequest请求对象和ServletResponse响应对象, 此外还可调用doGet()、doPost()方法来处理请求。

3、销毁:destory()  在Servlet生命周期中只执行一次,结束时。

配置:

1、创建一个java工程

2、搭建javaweb框架

①在项目里面创建一个文件夹webroot

②在webroot中创建WEB-INF的文件夹

③在WEB-INF中创建classes和lib

3、修改项目的编译路径(把以前编译到bin目录改为WEB-INF下的classes目录)

右键工程文件,build-path,进去选source 选择classes,classes会消失

4、从服务器的根路径中找到lib,然后再从lib中找到servlet-api.jar

拷贝到WEB-INF下的lib中,然后在该文件上右键 选择build-path →add to build

5、从服务器根目录中找到webapps,打开找到root,在找到WEB-INF 把其中的web.xml拷贝到WEB-INF目录下。

6、在web.xml文件夹中配置外界访问的servlet,添加如下代码:

thing//thing链接下面的thing

/nice//nice是将来浏览器访问的字符串

thing

ServletText//ServletText是src下的全限定名

7、告诉服务器要到指定的目录去自动部署项目,找到服务器根目录中的conf中的server.xml

在Host标签之间添加如下代码:

path中放的是上下文路径 可忽略 

8、访问:http://ip:port/上下文路径/资源名称(就是是哪个面的nice)

//给用户访问资源提供接口

<servlet-name>ming

/search 可以直接写多个

//根据名称找到具体的服务类

HTTPServlet类:专门处理HTML表单(FROM),不必重写父类的init()方法和destory()方法。

缺省的service()方法可以调用与HTTP请求方式相应的doXxx()功能。

get方法:数据量小、没有安全性考虑  post方法:数据量大 有安全放面考虑

当服务器调用Servlet的service() doGet() doPost()方法时,均需要请求和响应对象作为参数。

GET POST请求参数的乱码:字符流两次修改编码 字节流一次

响应页面的乱码

一:请求参数的乱码

GET:根据本来的编码(ISO-8859-1)获取其字节数组,再把字节数组按照我们的编码(UTF-8)来编码

  POST:同样拥有GET的方式; 设置request.setCharactorEncoding("你的编码");

二:响应页面的乱码

GET POST:

1):字节流

①:我们自己要用给浏览器传输什么编码的数据(如:utf-8)

②:告诉浏览器使用什么编码解析数据(要和上面的utf-8一致)

2):字符流

①:我们自己要用给浏览器传输什么编码的数据(如:utf-8)

action:填写提交的URI

Cookie:一种用于保留用户操作信息的客户端技术

步骤:new一个cookie ,添加到响应里去           

set-cookie和cookie 原理

更新cookie

cookie.setPath(“/”);  cookie.setDomain();

编码URLEncoder

解码URLDecoder

Session:一种用于保留用户操作信息的服务端技术

服务器创建session:服务器把创建好的一个对象的地址映射成id,把默认id通过cookie传递给浏览器

session不传输,在服务器内存中开辟空间存放

步骤:请求获取session,设置session

只需要创建并设置值即可,不需要添加响应中,会自动添加session对象的地址映射id到本次请求的响应头中

销毁session和移除session中的属性

获取session看其是否有值来判断需不需要登录

Servlet页面间对象传递的方式:request、cookie、session、application

注解

1、@webServlet(“/annotation”)  相当于

多参数:@webServlet(

urlPatterns={“/annotation1”,“/annotation2”}, initParams=@webinitParams{name = ”users”, value = “gyvsxy”}

)

2、在web.xml中将metadata-complete改为false,意味不忽略注解

ServletContext全局应用程序: 全局只有一个Servlet对象。

web.xml中设置 

ServletContext和ServletConfig对比:前者全局应用对象,后者表示Servlet的初始化参数。

URL重定向 :在服务端让浏览器重新跳到指定的页面

用法:resp.sendRedirect(url);注意:  /  当前路径

重定向不能访问WEB-INF下的文件.

请求转发:浏览器请求一个Servlet里的转发给另一个Servlet

用法:req.getRequestDispatcher("url").forward(req, resp);

URL重定向和请求转发:前者改变地址栏地址,可跨域;后者不变,可以访问WEB-INF下的文件,不可跨域

Servlet三大作用域对象:共享数据

ServletContext

Httpsession

HTTPServletRequest

作用域越来越小

JSP:

xx.jsp→在web.xml找jsp对应的处理类→JSPservlet源程序→xx_jsp.java→xx_jsp.class→返回

xx_jsp→HttpJspBase→HttpServlet(都是继承)

JSP注释是隐式注释和HTML注释不同的是:前者不会被发送到客户端

JSP的java代码片段和java代码表达式=和全局代码片段!

九大内置对象四大作用域

request:客户端请求,包含GET/POST请求的参数。

response:传给客户端的响应

session:与用户请求相关的对象,用于保存该用户的信息,跟踪用户的操作状态。

application:Servlet中正在执行的内容,一直存在到服务器关闭。

out:用来传送响应的输出

pagecontext:管理网页的属性

config:取得服务器的配置信息

page:JSP页面本身

exception:针对错误页面,没有被捕捉的异常就会生成此对象

JSP、Servlet的异同:都可以加载成.class文件,JSP的本质就是一个Servlet,不同点:一个用于前端,一个用于后台

EL

语法:${}

作用:获取作用域中的共享数据

注:依次从pageContext,request,session,application(由小到大)

EL获取指定作用域:${requestScope.}

找不到返回空字符串与findAttribute的不同点

${param.key}对应getParameter

EL访问对象

注:属性(property)=字段(field)+getset方法

${对象.属性}

set/getAttribute设置获取作用域的值 findAttribute依次寻找

getParameter获取请求参数中的值

JSTL:JSP Standard Tag Library 即JSP标准标签库

作用:替代java的逻辑操作代码

用法:先导入taglib指令 

单条件判断

<% %>

多条件匹配

<% %>

循环

<%循环体%>${}

foreach

<% %>${}

格式化日期:

<%%>

分页

自定义(pageCount pageSize)

过滤器过滤请求

接口Filter

name

/* 或者/xxx/*

根据请求类型过滤

较好用函数:

JS:

confirm():如果用户点击确定按钮,则confirm()返回 true。如果点击取消按钮,则 confirm() 返回 false。

Struts2

基于MVC设计模式的轻量级JavaEE框架,本质上相当于一个Servlet(控制层)

原生mvc模式使用jsp+javabean+servlet来实现。jsp充当v,javabean充当m,servlet充当c。

作为控制器来建立模型和视图的数据交互

基于拦截器

运行原理:客户端发送请求经过核心过滤器,然后询问ActionMapper需要调用哪个Action,如果需要,核心过滤器会把请求交给ActionProxy代理,代理通过配置管理器加载Struts.xml文件,找需要调用的Action类,ActionProxy会创建Action类的实例,调用对应的方法,在调用之前依次调用所有配置的拦截器,执行完Action返回字符串,实例会根据字符串查Result,再经过所有配置的拦截器返回响应,响应经过核心过滤器返回给客户端。

DTD获取本地xml提示  需联网  如果没网需手动配置本地DTD

Struts2配置常量(如编码集、扩展名、开发模式、动态方法调用)有三种方式:

①struts.xml中的②struts.properties中③web.xml的

###是properties的注释信息

核心组件:Action和拦截器

包配置:  name唯一  默认struts-default,这样该包中的action就具有了Struts2默认的拦截器等功能。  抽象包不能写action

包含配置:

实现Action控制类的三种方式:

①直接写类名(POJO)②继承ActionSupport③实现Action接口

配置Action:

不写method会根据反射执行execute方法

写方法调用方法

写action的三种方法:

直接写

通配符法: 1表示从第一个*开始  *→方法名

动态方法调用:常量配置里默认关闭动态方法调用

的name可用在form表单的action

下的 全局的

标签的type属性值默认是dispatcher,实际上就是转发

访问Servlet API

①ActionContext.getContext()  分别可用在request、application、session

②通过特定接口ServletRequestAware ServletResponseAware 等

③通过ServletActionContext访问

Action处理请求参数

①属性驱动:只需set        把表单的name作为属性 getset方法

②对象驱动  必须set和get    新建类

集合驱动

③实现模型驱动

ServletActionContext封装了以前的servlet

数据校验

重写validate方法中加

if(){this.addFielderror(键值)}

s标签 s:fielderror fieldname=””

避免重复提交

XML配置方式数据校验

XML名字:Action类名-validation.xml  与Action类在同一个包下

资源文件

①针对action类

与action在同一个包下

名称:ActionClassName.properties这个配置文件只对当前action有用

②针对包下的所有action    package.properties

this.getText

③struts.properties 全局

拦截器

自定义拦截器实现interceptor

需要在struts.xml中

在package中

//系统的

如果在中设置方法名 忽略拦截方法

通过配置的形式向拦截其中传递参数

param参数会在启动服务器时把其中的参数name通过对应的setter方法传递到拦截器中

设置默认拦截器只能有一个

下面的action都可以被拦截

给action单独用拦截器

在action中加

action之间的传递参数

redirect和chain

注解:单个@XXX(“”)多个@XXXS({@xx(“”),@xx(“”)})

JSON

{“key”:”value”,”key2”:”value2”}[{},{}]

JS中加入 $.ajax({})

不跳转页面请求数据

Listener监听器

实现HttpSessionListener  ServletContextListener  RequestListener等等

设置配置

防止表单重复提交

token字符串  每请求一次都会生成一个字符串 可放在 session、隐藏域

避免表单用户输入乱码

req.setCharacterEncoding(“”);

JavaEE三层:表现层、业务层、持久层

前端控制器:过滤器栈

值栈

用来管理请求数据

生命周期就是一次请求

由root和 Context组成

OGNL对象图形导航语言

替换EL的

Struts2用OGNL作为默认的表达式语言

OGNL是基于ValueStack数据结构

获取root中的数据

①对象.getRoot().push(值)

②对象.set(键值) 

③private String val=”123”;  public String getVal(){return val;}             

获取context中的数据

凡是写在context中的数据 前面要加#  便于维护

①对象.getContext().put(键值)

②context.put(键值)

校验

validate()对应

如果不通过就执行input如果通过 就执行execute的success

标签

国际化

上传下载

上传:①上传的表单以POST方式 ②提交需要指定编码为:multipart/from-data;

标签

不需要再去填写contextPath

多选框

取setAttribute的值

Hibernate

是一个面向对象的持久化框架

hibernate.cfg.xml

//连接数据库

true

采用getCurrentSession()创建的Session会绑定到当前的线程中去、而采用OpenSession()则不会。

采用getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用OpenSession()必须手动关闭。

采用getCurrentSession()需要在Hibernate.cfg.xml配置文件中加入如下配置:

如果是本地事物,及JDBC一个数据库:

thread

如果是全局事物,及jta事物、多个数据库资源或事物资源:

jta

类和表的映射配置文件:

xx.hbm.xml

//id是类中的属性  column是表中的字段

//设置主键

Transaction对事物的封装

save方法的执行流程

1、新建一个configuration对象

2、利用方法configuration.configure()加载hibernate.cfg.xml

3、根据xml中的连接数据库的信息连接数据库,并配置相关的property属性

4、加载解析映射文件,把映射文件的信息保存在configuration对象中

5、根据config创建sessionfactory对象,并创建session对象

6、执行保存事件

saveOrUpdate()方法

persist()持久化  JPA规范里面的  与save()有点相同

merge()与update()有点相同

load()与get()  load()动态的新建一个类:

Student stu =(Student) session.load(Student.Class, 3);多态

load():延迟加载  load()方法返回的是一个代理(代理只有一个ID),只有等真正使用该对象属性的时候才会发出sql语句

如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException

一级缓存

缓存:提高效率

在hibernate.cfg.xml中的

#hibernate.hbm2ddl.auto none/create/create-drop/update/validate

mapping文件获取属性是反射:反射不关心访问权限

OID:对象中对应数据表的主键的属性

自然主键(使用对象本身的属性作为主键)代理主键(序号)

主键生成策略:

assigned:手动设置主键

uuid:hibernate帮忙生成的

increment:查最大id然后加1

identity:数据库需支持自增

native:使用数据库支持的生成主键方式

持久化对象的状态

有没有被管理有没有id数据库中有没有值

瞬时态

持久态

脱管态

提交之前,delete之后,数据处于计划删除

session管理对象的状态 事务负责提交数据操作

事务处理方式(当多个事务同时访问数据库中的相同数据)

悲观锁:在每次操作数据时,悲观的认为会有其他事务来操作同一数据。加锁(数据库层次)

乐观锁:认为许多事务同时操作同一数据的情况很少发生。数据版本标识锁定机制(非库层次)

对象的关系

依赖关系

关联关系

聚合关系

组合关系

关联关系:一对多多对一多对多

多对一:

在多中:设置一的私有属性

一对多:

set:

在一中:Set<>  = new HashSet<>();

在一的xml中

list:

反转操作:

在双向关联中,一方的中加入inverse=”true”可以反转维护关系,即此方放弃对另一端关系的维护,而由对方来维护关系

一对多多对一双向:

删除时注意set里的inverse为false 

cascade级联删除:save-update、delete、all、delete-orphan、all-delete-orphan

一对一:先保存xx

多对多:两个set

注意中间表的主键重复需要把一个主键设置为

组件映射

SQL

HQL

Criteria

分页

HQL不支持 limit关键字

query.setFirstResult()

query.setMaxResults()

位置占位符?

名称占位符:xxx

Collection

query.uniqueResult()返回个数

SELECT NEW LIST(XX,XX,XX) FROM

SELECT NEW MAP(XX,XX,XX) FROM

session.getNameQuery()

主要是为了一些经常使用,在类的映射文件中添加一个标签“query”,属性name来指这个NameQuery的名字,在XML的innerText中写HQL语句

Spring

面向接口编程解耦

IoC/DI控制反转  依赖注入

IoC控制反转:说的是创建对象实例的控制权从代码控制剥离到IoC容器控制,实际就是你在xml文件控制,侧重于原理。

DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

IoC是目的,di是手段。IoC是指让生成类的方式由传统方式(new)反过来,既程序员不调用new,需要类的时候由框架注入(DI),是同一件不同层面的解读。

Bean:放在Spring容器中的对象

bean中的属性:

id: bean的全局唯一标识

lazy-init=”true/false”告诉容器,不要在容器启动的时候实例化bean

bean的作用域  scope=”” 

singleton单例模式对于无会话状态的bean(Dao、Service)来说是最理想的选择 

prototype原型类型,每次都会创建个新的对象 适合需要保持会话状态的bean(struts2的action)

bean的生命周期

singleton作用域下的bean的声明周期受spring容器的管理,

prototype作用域下的bean,容器只负责创建,管理交给客户端代码

bean里面的constructor-arg:可传入构造参数 index type ref value

bean里面的property 用于调用bean实例中的setter方法

name和value  name有对应的属性,不是随便写

name和ref  ref=”xx”:是把id为xx的bean传过来

在面向对象的程序中,想要使用某个对象,就需要先实例化这个对象

bean的实例化方法:

1、构造器实例化  通过实现类的默认无参构造器对bean进行实例化  传统bean的配置方式

2、静态工厂方法生产bean  class属性为对应的工厂实现类  factory-method

3、实例工厂方法  建立工厂bean,再通过factory-bean建调用工厂bean的bean,再通过factory-method指定实例化bean的方法

AOP

所有事务从Dao剥离,放在service层

静态代理

动态代理:

①通过实现接口的方式  代理类是对dao实现类的增强

Handler implements invocationHandler      proxy.newProxyInstance

public Object invoke(Object proxy, Method method, Object[] args)

method.invoke(obj, args);

proxy:代理方法调用的代理实例

method:

②通过继承的方式Enhancer

cglib  javassist:代码生成的库

AOP的xml和注解Annotation

xml

Annotation: point连贯方法

AOP:在某些事情即将发生的时候做某些事

XML

解析方式:DOM解析:把整个XML文件加载进内存进行解析

SAX解析:通过流的形式一行行解析

xmlns:xmlnamespace

dtd和schema的后缀xsd

SpringMVC

分离了控制器,模型对象,分派器,处理程序对象角色

DispatcherServlet:前端控制器,用于接收请求。

HandlerMapping接口:用于处理请求的映射。

DefaultAnnotationHandlerMapping:HandlerMapping接口的实现,用于把一个URL映射到具体的Controller类上。

HandlerAdapter接口:用于处理请求的映射。

AnnotationMethodHandlerAdapter:HandlerAdapter接口的试下,用于把一个URL映射到对应Controller类的某个方法上。

ViewResolver接口:用于解析View。

InternalResourceViewResolver:ViewResolver接口的实现,用于把ModelAndView的逻辑视图名解析为具体的View。

加载优先级

在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的Java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean

MyBatis(非标准的ORM框架)基于JDBC

做数据持久化(其他三种:流JDBC Hibernate(Hibernate是标准的对象关系映射ORM))

标准的ORM框架:

实现:

连接数据库:SqlSessionFactoryBuilder Reader SqlSessionFactory SqlSession

xml:

xxxMapper.xml:domain的类的映射文件

在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。

parameterType:在映射文件中通过parameterType指定输入 参数的类型  可省略

resultType:在映射文件中通过resultType指定输出结果的类型

#{}接收输入参数,类型可以是简单类型,pojo、hashmap

keyProperty keyColumn use

Apache Shiro

易使用的Java安全框架,进行认证、授权、加密和会话管理

web.xml配置shiroFilter(放在最上面) 

applicationContext-shiro.xml,对shiro进行配置

applicationContext.xml中引入该文件

JQuery EasyUI

实现CRUD DataGrid

使用的插件:

datagrid:向用户展示列表数据。

dialog:创建或编辑一条单一的用户信息。

form:用于提交表单数据。

messager:显示一些操作信息。

FormData

XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.

进度条

基于multipartResolver多部解析器的上传进度条

①写一个进度条的实体类

②实现ProgressListener

③继承CommonsMultipartResolver

④在springmvc的xml中重新配置自己的解析器

⑤编写Controller

⑥开发jsp、js页面

JQuery

XMLHttpRequest对象的 onload 回调函数是在异步请求加载完成后所执行的函数,当JavaScript监测到请求的数据全部传输完成后就会触发该函数。而 open() 函数设置异步请求的 method、URL 和同步方式等参数,执行 open() 后再执行 send() 函数才开始向服务器发送请求。

相关文章

  • 未分类

    数据库DB: SQL:结构化查询语言。 MySQL是一种关系型数据库 增: create databases db...

  • 未分类

    可重用性可拓展性可维护性 1 Javac java 源代码.java字节码 .class J...

  • 未分类

    静态网页 动态网页CGI asp(html+JavaScript+com组件) PHP jsp(html+jav...

  • 未分类

  • 每到一个城市,最喜欢去的是博物馆

    今日整理图片,还未分类,写文。

  • Leetcode未分类

    Leetcode 1147. Longest Chunked Palindrome Decomposition. ...

  • 石头剪刀布

    在此处输入标题 标签(空格分隔): 未分类

  • 作业一

    作业一 标签(空格分隔): 未分类 Student package com.niit.quickstart.bea...

  • PXE

    标签(空格分隔): 未分类 PXE是什么 预启动执行环境(preboot execution environmen...

  • session和cookie

    express相关 标签(空格分隔): 未分类 mac下执行 sudo ./mongod必须加 sudo mong...

网友评论

      本文标题:未分类

      本文链接:https://www.haomeiwen.com/subject/sdvnsftx.html