韩顺平struts笔记
学习韩顺平之hibernate笔记

第一讲:Hibernate是什么?1、它是一个框架2、是一个orm框架(其它的apache ojb,ibatis,toplink)a)Orm(object relation mapping)对象关系映射框架b)O object-->业务层c)R relation-->关系数据库d)M mapping-->对象关系映射文件3、处于我们项目的持久层位置4、对JDBC的轻量级封装Hibernate的原理:1、相当于是一个翻译,业务逻辑层--->持久层-->数据库,所以业务逻辑层就不用关心用的是什么数据库,而直接和持久层打交道,持久层将从业务逻辑层得到的语句(并进行一系列优化)翻译成数据库的语句,实现一些功能。
这样当数据库变更时,我们就不用改动业务逻辑的一些sql语句。
2、每一层的耦合性减小,业务层和数据库层没有关系,可以达到轻松改变3、Hibernate可以用在j2se中4、Struts是web框架为什么有hibernate:以前我们换数据库需要重写SQL语句,和一些其它的语句,麻烦,第二讲:1、开发时一般先开发DB,在用工具生成mapping和domain2、Domain对象的名称首字母要大写3、Pojo (plain ordinary java object) 简单的JA V A对象和一张表对应(应该有一个键属性,有GET,SET方法,有一个无参的构造函数)4、对象关系映射文件:作用是用于指定domain对象和表的映射关系,取名:domain 对象。
Hbm.xml。
一般我们放在和domain对象同一个文件夹下(一个包下)5、创建一个sequencei.Create sequence emp_seqStart with 1Increment by 1Minvalue 1NomaxvalueNocycleNocache6、<hibernate-mapping><class name="Employee" table="employee" ><id name="id" column="id" type="ng.Integer"><!-- 该元素用于指定主健值生成策略hilo native increment sequence uuid --><generator class="sequence"><!-- 指定是哪一个sequence --><param name="sequence">emp_seq</param></generator></id><!-- 定义的属性--><property name="name" type="ng.String"><column name="name" not-null="false"></column></property><property name="email" type="ng.String"><column name="email" not-null="false"></column></property><property name="hiredate" type="java.util.date"><column name="hiredate" not-null="false"></column></property></class></hibernate-mapping>7、创建hibernate.cfg.xml并且配置<hibernate-configuration><session-factory><propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</p roperty><property name="ername">scott</property><property name="connection.password">tiger</property> <propertyname="connection.utl">jdbc:oracle:thin:@localhost:1521:orcl</prop erty><!-- 明确告诉hibernate连接的是哪类数据库 --><propertyname="dialect">org.hibernate.dialect.OracleDialect</property> <!-- 用于加载映射文件 --><mapping resource="com/yxl/domain/Employee.hbm.xml"/> </session-factory></hibernate-configuration>8、运用hibernatea)创建cfg对象,用于读取hibernate.cfg.xml的内容i.Configuration cfg = new Configuration.configure();b)创建sessionFactory这是一个会话工厂,是一个重量级的对象i.SessionFactory sf = configuration.buildSessionFactory();c)创建Session 相当于jdbci.Session session = sf.openSession();d)创建transactioni.Transaction transaction = session....();第四讲:一个数据库对应一个SessionFactory,它是单例的Pojo应该序列化,目的是唯一标识该对象,同时可以在网络上传输Hibernate 把对象分成三个状态:瞬时态,持久态,第五讲:<property name="show_sql">true</property>这是打印SQl语句<property name="hbm2ddl.auto">create</property>这是自动创建表的配置(如果有表则删除后重新创建一个表),也可以有update 这是更新表(如果以前的表没有改变结构,则更新值,如果没有表则创建)Mysql中没有sequence 用increment代替第六讲:编程格式:Try {......mit();} catch(Exception e) {e.printStackTrace();If(transaction!=null) {Transation.rollback();}} finally{If(session!=null&&session.isopen()) {Session.close();}}如果要自己定义主键号,则hbm.xml中的generator的策略用assigned第七讲:当configuration.configure(configNume) 这里的confignume有包名的话要写"com/yxl/config/hibernate.cfg.xml"1、Configuration 类A:读取hibernate.cfg.xmlB:管理对象关系映射文件C:加载hibernamte的驱动,url,用户D:管理hibernate配置信息注意事项:当配置时cfg.xml有包,则得把包名写在configure方法里2、..hbm.xml是一个表和对象的映射文件,一般和对象放在一个包下第八讲:1、SessionFactory :会话工厂:是一个interface作用:A:可以缓存sql语句和数据(称为session缓存)B:是一个重量级的类,比较吃内存,所以一个数据库对应一个SessionfacC:重点:用SessionFactory得到session的两个方法:1.openSession():是获取一个新的Session();2.getcurrentSession() 获取和当前线程绑定的session,就是在同一个线程获得的session是同一个。
javascript学习笔记-韩顺平

第三讲∙Js的数据类型:∙基本数据类型∙数值类型∙字符串类型∙布尔类型通过typeof可以看到变量的具体数据类型举例:<html><head><title> New Document </title><script language="javascript">var vi="abc";var v2=890;window.alert("v1是"+typeof v1);window.alert("v2是"+typeof v2);vi=456; //体现js是动态语言:即数据类型可以任意变化window.alert("v1是"+typeof v1);//体现js是动态语言</script></head><body></body></html>∙复合数据类型∙数组∙对象∙特殊数据类型∙Null 即:var=null∙Undefined即:如下代码<script language="javascript">window.alert(tt ); //直接报错:未定义var tt; //未给值</script>∙Js定义变量,初始化,赋值∙定义变量:即var=a∙初始化:即在定义变量时就给值∙赋值:即:比如你先定义一个变量 var=tt ,然后再给值:tt=780;∙js数据类型转换:∙自动转换例子:var=123; //a是数值a=”hello” //a的类型是string∙强制转换例子:字符串转换成数字Var a="123” ;a=parseInt(a); //使用系统数强制转换Var b=90 ; //b是numberb=b+””, //b就是string∙运算符∙+ — * / %∙%(取摸:即两个数相除的余数) 强调:取模主要用于整数之间取模例子:编写一个程序,判断两个数是否能够整除<script language="javascript">var a=90;var b=8;if(a%b==0){window.alert("能整除");}else{window.alert("不能整除");}</script>∙++,运算符a++ = a=a+1a-- = b=b-1++a 表示先把自己加1再赋值--a 表示先把自己减1再赋值例子:Var a=56;Var b=++a; //b=++a等同于[a=a+1;b=a] b=a++等同于[b=a; a=a+1;] Window.alert(b);Window.alert(a);∙--运算符∙Var a=56;∙Var b=--a; //b=--a等同于[a=a-1;b=a] b=a--等同于[b=a; a=a-1;]∙Window.alert(b);∙Window.alert(a);例子:编写一个程序,判断两个数是否能够整除<script language="javascript">var a=90;var b=8;if(a%b==0){window.alert("能整除");}else{window.alert("不能整除");}</script>∙++,运算符a++ = a=a+1a-- = b=b-1++a 表示先把自己加1再赋值--a 表示先把自己减1再赋值例子:Var a=56;Var b=++a; //b=++a等同于[a=a+1;b=a] b=a++等同于[b=a; a=a+1;] Window.alert(b);Window.alert(a);∙--运算符∙Var a=56;∙Var b=--a; //b=--a等同于[a=a-1;b=a] b=a--等同于[b=a; a=a-1;]∙Window.alert(b);∙Window.alert(a);错误案例:更正:输出:myfuns.js代码:调用myfuns.js案例一:Js文件:调用:案例2:Js文件:调用:abc(5);输出:3 3 4Js文件:调用:数组在内存中的存在形式:内存数据调用案例:输出:900内存数据分析:输出:35 90 900内存数据调用分析:输出: hello world abc 顺平输出: h e l l o w o r l d a b c 顺平输出: hello world输出:0=451=902=0gg=9000二维数组的遍历:输出:shunping 123 4.5a b c优化排序:输出:输出:找到下标为4数组转置:输出:。
韩顺平JS笔记第一部

JS笔记Javascript的基本介绍∙JS是用于WEB开发的脚本语言:∙脚本语言是什么:∙脚本语言往往不能独立使用,它和HTML/JSP/PHP/配合使用∙脚本语言也有自己的变量,函数,控制语句(顺序,分支,循环)∙脚本语言实际上是解释性语言(即在执行时直接对源码进行执行),编译性语言效率会更高一些∙Java程序.java→.class→jvm ,js→浏览器(js引擎来解释执行)∙Js主要在客户端(浏览器)执行∙因为js是由浏览器来执行的,因此这里有个问题,不同类型的浏览器可能对js的支持不一样。
∙开发工具的选择:记事本 myeclipse<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><script language="javascript">function test(){window.alert("hello world!");}</script><title> New Document </title></head><body><input type="button" onclick="test()" value="点击一下吧"/></body></html>案例:1需求:打开网页后,显示hello !<html><head><!--js代码是放在head标签间,但实际上也可以放在别的位置--><script language="javascript">window.alert("hello");</script></head><body></body></html>问题:∙js的位置可以随意放∙js必须使用 <script language="javascript"> 代码</script>∙在一个html文件中(JSP/PHP/)可以出现多对(script)片段,浏览器会按照先后顺序依次执行案例2:∙如何定义变量:∙如何运算:<html><head><title> New Document </title></head><body><!----js代码是放在head标签间,但实际上也可以放在别的位置--><script language="javascript">//js中变量的定义(js中变量用var表示,无论什么类型)var num1=1;var num2=60;var result=num1+num2;window.alert("结果是"+result); //alert函数 window.alert表示弹出一个对话框 </script></body></html>∙Js的变量类型是怎样决定的1) Js是弱数据类型语言,即:在定义变量时候,统一使用var表示,甚至可以去掉var这个关键字2) Js中的变量的数据是由js引擎决定的v ar name=”shunping”; //name是字符串var kk=2 //kk是数字name=234; //这时name自动变成数∙Js的命名规范(函数/变量):1) 使用大小写字母,数字,$可以命名2) 不能以数字打头3) 不能使用js保留字和关键字(即java里的关键字)4) 区分大小写5) 单行注释://6) 多行注释:/*…….*/Js的数据类型:基本数据类型3种1数值类型特殊数值:1)NaN 不是数字var a=”abc”window.alert(parseInt(a));2)Infinity 无穷大window.alert(6/0);3)isNaN() 如果是数字的话返回false4)isFinite() 如果是无穷大返回false2.字符串类型可以用双引号也可以用单引号,单个字符也可以看成字符串,有特殊字符用\转义window.alert("asada\"r"); 输出asada”r3.布尔类型true false通过typeof可以看到变量的具体数据类型举例:<html><head><script language="javascript">var num1=123;var num2="abcd";window.alert("num1是"+typeof num1);window.alert("num2是"+typeof num2);var num1=false //体现js是动态语言:即数据类型可以任意变化window.alert("num1是"+typeof num1); //体现js是动态语言</script></head><body></body></html>∙复合数据类型∙数组∙对象∙特殊数据类型∙Null 即:var a=null∙Undefine即:如下代码<script language="javascript">window.alert(tt ); //直接报错:未定义∙var tt; //不报错未给值输出Undefine</script>∙Js定义变量,初始化,赋值1)定义变量:即var a2)初始化:即在定义变量时就给值3)赋值:即:比如你先定义一个变量 var tt ,然后再给值:tt=780;∙js数据类型转换:1)自动转换例子:var a=123; //a是数值a=”hello” //a的类型是string2)强制转换例子:字符串转换成数字var a="123” ;a=parseInt(a); //使用系统函数强制转换var b=90 ; //b是numberb=b+””, //b就是string∙运算符+ — * / %%(取摸:即两个数相除的余数) 强调:取模主要用于整数之间取模例子:编写一个程序,判断两个数是否能够整除<script language="javascript">var a=90;var b=8;if(a%b==0){window.alert("能整除");}else{window.alert("不能整除");}</script>∙++,运算符a++ --> a=a+1b-- = b=b-1++a 表示先把自己加1再赋值--a 表示先把自己减1再赋值例子:var a=56;var b=++a;window.alert(b); b=57window.alert(a); a=57--运算符var a=56;var b=--a;window.alert(b); b=55window.alert(a); a=55window.prompt(); prompt() 方法用于显示可提示用户进行输入的对话框。
韩顺平Spring笔记

spring的快速入门案例①spring是什么struts 是 web 框架 (jsp/action/actionfrom)hibernate 是 orm框架,处于持久层.spring 是容器框架,用于配置bean,并维护bean之间关系的框架☞spring中有一个非常概念: bean (是java中的任何一种对象javabean/service/action/数据源./dao, ioc(控制反转inverse of control) di( dependency injection 依赖注入)☞画一个框架图快速入门开发一个spring项目.1.引入spring的开发包(最小配置该包把常用的jar都包括, 还要写日志包2.创建spring的一个核心文件 , [hibernate有核心 struts核心文件 ], 该文件一般放在src目录下,该文件中引入 xsd文件:可以从给出的案例中拷贝一份.3.配置bean<!-- 在容器文件中配置bean(service/dao/domain/action/数据源) --><!-- bean元素的作用是,当我们的spring框架加载时候,spring就会自动的创建一个bean对象,并放入内存UserService userSerivce=new UserService();("韩顺平");--><bean id="userService" class=""><!-- 这里就体现出注入的概念. --><property name="name"><value>韩顺平</value></property></bean>4.在中,我们怎么使用到spring 的applicationContext对象(容器对象)ApplicationContext ac=new ClassPathXmlApplicationContext("");UserService us=(UserService) ("userService");();5.细节讨论传统的方法和使用spring的方法5.1使用spring ,没有new 对象,我们把创建对象的任务交给spring框架5.2spring的运行原理图:我们再看spring对上面案例总结:spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可.ioc是什么答:ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器,而程序本身不再维护.DI是什么答: di(dependency injection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术☞学习框架,最重要的就是学习各个配置.把Applicationcontext做成一个单例的.上机练习: 把我写的代码走一遍.spring开发提倡接口编程,配合di技术可以层与层的解耦举例说明:现在我们体验一下spring的di配合接口编程的,完成一个字母大小写转换的案例:思路:1.创建一个接口 ChangeLetter2.两个类实现接口3.把对象配置到spring容器中4.使用通过上面的案例,我们可以初步体会到di配合接口编程,的确可以减少层(web层) 和业务层的耦合度.思考题:接口ValidateUser有一个方法:check()有两个类CheckUser1 implements ValidateUser{checkBeanFactory factory = new XmlBeanFactory(new ClassPathResource("com/hsp/ioc/"));("student");结论:1.如果使用ApplicationContext ,则配置的bean如果是 singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存)2.如果是 BeanFactory ,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度)3.规定: 一般没有特殊要求,应当使用ApplicatioContext完成(90%)bean 的 scope的细节入门案例:三种获取ApplicationContext 对象引用的方法1.ClassPathXmlApplicationContext -> 通过类路径2.FileSystemXmlApplicationContext -> 通过文件路径举例:ApplicationContext ac=new FileSystemXmlApplicationContext("文件路径 / ");3.XmlWebApplicationContextbean的生命周期为什么总是一个生命周期当做一个重点Servlet -> servlet生命周期 init() destory()java对象生命周期.往往笔试,面试总喜欢问生命周期的问题①实例化(当我们的程序加载文件),把我们的bean(前提是scope=singleton)实例化到内存②调用set方法设置属性③如果你实现了bean名字关注接口(BeanNameAware) 则,可以通过setBeanName获取id号④如果你实现了 bean工厂关注接口,(BeanFactoryAware),则可以获取BeanFactory⑤如果你实现了 ApplicationContextAware接口,则调用方法⑥如果bean 和一个后置处理器关联,则会自动去调用ObjectpostProcessAfterInitialization方法⑦使用我们的bean11. 容器关闭12. 可以通过实现DisposableBean 接口来调用方法 destory13. 可以在<bean destory-method=”fun1”/> 调用定制的销毁方法小结: 我们实际开发中往往,没有用的这么的过程,常见的是:1->2->6->10->9->11上机练习: 把使用每个bean的时间记录到一个文件 ,内容是xxbean. 使用时间是 : 1999-11-11 11:11:11问题:通过BeanFactory来获取bean对象,bean的生命周期是否和Applicationcontext 是一样吗不是一样的,bean是工厂中创建的生命周期会简单一些:配置bean的细节① scope 的说明:☞尽量使用 scope=”singleton” ,不要使用prototype,因为这样对我们的性能影响较大.②如何给集合类型注入值.java中主要的集合有几种: map set list / 数组Department类:package class Department {private String name;private String [] empName;private List<Employee> empList;private Set<Employee> empsets;private Map<String,Employee> empMaps;public Set<Employee> getEmpsets() {return empsets;}public void setEmpsets(Set<Employee> empsets) { = empsets;}public String[] getEmpName() {return empName;}public void setEmpName(String[] empName) {= empName;}public String getName() {return name;}public void setName(String name) {= name;}public List<Employee> getEmpList() {return empList;}public void setEmpList(List<Employee> empList) {= empList;}public Map<String, Employee> getEmpMaps() {return empMaps;}public void setEmpMaps(Map<String, Employee> empMaps) { = empMaps;}}..Foo”><property name=”属性”><!—第一方法引用--><ref bean=’bean对象名’/><!—内部bean--><bean><properyt></property></bean></property></bean>③继承配置public class Studentpublic class Gradate extends Student在文件中体现配置<!-- 配置一个学生对象 --><bean id="student" class=""><property name="name" value="顺平" /><property name="age" value="30"/></bean><!-- 配置Grdate对象 --><bean id="grdate" parent="student" class=""><!-- 如果自己配置属性name,age,则会替换从父对象继承的数据 --><property name="name" value="小明"/><property name="degree" value="学士"/></bean>思考: 目前我们都是通过set方式给bean注入值,spring还提供其它的方式注入值,比如通过构造函数注入值!通过构造函数注入值关键代码:<!-- 配置一个雇员对象 --><bean id="employee" class=""><!-- 通过构造函数来注入属性值 --><constructor-arg index="0" type="" value="大明" /></bean>自动装配bean的属性值(1)byName的用法:<!-- 配置一个master对象 --><bean id="master" class="" autowire="byName"> <property name="name"><value>顺平</value></property></bean><!-- 配置dog对象 --><bean id="dog" class=""><property name="name" value="小黄"/><property name="age" value="3"/></bean>原理图:(2)byType: byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。
韩顺平老师java视频课程笔记1-13课

JA V A学习记录第一讲//pulic:表示这个类是公共的,一个java文件中只能有一个public类//class :表示这是一个类//Hello:类名(公共类的类名必须和文件名一致)public class Hello{//一个主函数,相当于是程序的入口public static void main (String args[]){/* 多行注释*///System.out.println("hello");int a=10;// 定义一个变量,变量名位a,它的值为10// int为4个字节,long为8个字节int b=20;int result=a+b//输出结果system.out.println("结果是"+result)}}第二讲JA V A基本数据类型四大类型整数类型小数(浮点)类型基本数据类型布尔类型字符类型1.整数类型整数类型表示一个整数,常用的整数类型有:byte, short, int, long范围:byte 一个字节-128 – 127short 两个字节-32768 - 32767int 四个字节-2147483648 – 2147483647long 八个字节一个字节= 八个byte例:一个byte0 0 0 0 0 0 0 1 最高位为符号位0表示正数,1表示负数1 1 1 1 1 1 1 1 – 0 1 1 1 1 1 1 12.小数(浮点)类型常用类型有float, double3.布尔类型可以表示:真或者假,类型是boolean4.字符类型表示单个字符,字符类型是char,chai是两个字节,可以存放汉字。
多个字符称为字符串,在java中用String表示,String属于类。
.在java中,对char进行运算的时候,直接当做ascii码对应的整数对待。
(汉字则是unic码)定义变量int a初始化变量int a = 45给变量赋值int a ; a =45基本数据类型转换int a = 1.2 错误会损失精度double a = 4 正确数据类型可以自动从低精度向高精度转换。
传智 韩顺平 html+css+javascrtpt 课程笔记2(吐血整理)

javascript 2===============================================================================1.js面向/基于对象编程-----类(原型对象)与对象(实例)(1)js面向/基于对象特征介绍Javascript是一种基于对象(object-based)的动态脚本语言,你遇到的所有东西都是对象。
js的面向对象技术广泛应用于AJAX等优秀框架。
☞特别说明:基于对象也好,面向对象也好,实际上都是以对象的概念来编写程序。
从本质上并无区别,所以这两个概念在课程中是一样的。
因为javascript中没有class(类),所以有人把类也称为原型对象。
其实这两个概念在编程中发挥的作用都看成一个意思。
(2)为什么需要原型对象(类)?例子:张老太养了两只猫猫:一只猫叫小白,今年3岁,白色;还有一只叫小花,今年5岁,花色。
(3)类(原型对象)————如何自定义类(原型对象)和对象创建类的方式有5中方法:工厂方法——使用new Object创建对象并添加相关属性使用构造函数来定义类(原型对象):上面的Cat类就是用此种方法基本语法:function 类名/原型对象名(){}创建对象:var 对象名=new 类名/原型对象名();使用prototype构造函数及原型混合方式动态原型方式2.如何判断一个对象实例是不是Cat类型?✧if(a instanceof Cat){window.alert(“a是Cat的实例”)}✧if(a.constructor== Cat){window.alert(“a是Cat的实例”)}3.带var和不带var的区别var abc=89;function test(){abc=900;//在函数里,如果不带var,则表示使用全局的abc变量89。
//如果带var,则表示在函数中,定义一个新的私有的abc变量。
韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)

java平台1、J2SE java开发平台标准版2、J2EE java开发平台企业版java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。
不同系统上要安装对应的虚拟机才可以运行java程序开发步骤1、编写源文件 (.java)2、编译源文件为类文件(.class)可用J2SE或J2EE编译3、在虚拟机上运行注释//单行注释/* */多行注释java内容介绍java编程可以分成三个方向:1、java se (j2se)桌面开发 java中的基础中的基础2、java ee (j2ee)web开发3、java me (j2me)手机开发java se课程介绍java面向对象编程(基础)java图开界面开发java数据库编程java文件io流编程java网络编程java多线程编程java ee基础1java面向对象编程--数据库编程-->java sejava 基础2html--css--javascript-->div+cssjava ee中级部分Servlet--Jsp-->mvc模式java ee高级部分Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架java之父gosling1990 sun启动绿色计划1 | 4451992 创建oak语言-->java1994 gosling参加硅谷大会演示java功能,震惊世界1995 sun正式发布java第一个版本,目前最新是jdk7.0java开发工具记事本、(jcreator、jbuilder退出舞台了)、netbean、eclipse如何选择开发工具先选择记事本,对java有一定了解后再使用eclipse高级开发工具为什么呢?1、更深刻的理解java技术,培养代码感2、有利于公司面试java语言的特点1、java语言是简单的2、java语言是面向对象的3、java语言是跨平台(操作系统)的[即一次编译,到处运行]4、java是高性能的java第一个程序hello.java运行java程序要安装和配置jdkjdk是什么?1、jdk全称java dvevlopment kit中文java开发工具包2、jdk是sun公司开发的3、jdk包括jre(java runtime envirnment)java运行环境、一堆java工具和java基础的类库(类共3600左右,常用类在150个左右)4、可以在下载**开发安装jdk,用户执行需要安装jre配置JDK添加环境变量即可windows下配置jdk在计算机属性--高级设置--环境变量--添加PATH将JDK所在路径指定即可。
韩顺平servlet笔记2完整版

out.println("name ="+val); session 为什么有? 问题 1: 如何实现在不同的页面,可以去查看信息(比如说购物车),同时还要实现不同的用 户看到的信息是自己. session 工作原理图
session 的生命周期是 30 分钟
session 小结:
① session 是存在服务器的内存中 ② 一个用户浏览器,独享一个 session 域对象 ③ session 中的属性的默认生命周期是 30min ,你可以通过 web.xml 来修改 ④ 3 种 session 生命周期的设置 (1)一个地方是 tomcat/conf/web.xml
③ cookie 存放中文,怎么处理 存放: String val=.URLEncoder.encode("顺平","utf-8");
Cookie cookie=new Cookie("name",val); 取出: String val=.URLDecoder.decode(cookie.getValue(), "utf-8");
mycookie.setMaxAge(7*3600*24);//保存一周
response.addCookie(mycookie);
b=true;
break;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
!Struts视频笔记:Struts是一个开源的web框架,框架提高了程序的规范的同时也约束了程序员的自由为什么会有struts:因为我们队mvc理解的不同,可能造成不同公司写程序的时候,规范不统一,这样不利于程序的维护和扩展,所以我们有必要用一个统一的规范来开发项目(struts)Struts 的好处: 程序更加规范化,开发效率提高了,可读性增加了,程序的可维护性增加了^运行原理:一个请求从浏览器发送给web服务器,,web服务器首先解析主机然后解析web应用的名称在解析出资源名转发给总司令ActionServlet(该类由struts框架提供给我们的无需编写,只需配置)ActionServlet有一个文件,该文件配置了表单actionForm(军火库),还配置了action,以及他们之间的对应关系,当ActionServlet拿到命令后它会查询文件去填充数据,把用户的数据填充到表单里边,下个动作就是去调用指定的action(小队长),action去从表单中读取数据,调用某个model(士兵,如service)完成任务,完成任务把结果返回给ActionServlet总司令(返回一个执行的结果),-->总司令又去查询文件,决定跳转到哪个jsp页面,返回一个执行结果(形成静态html文件)直接返回给web服务器服务器再把静态页面以http响应给浏览器,登录小项目过程步骤: 新建web工程导入struts包编写编写actionForm和action配置编写和配置测试中的<action>中的scope指的是actionform的生命周期范围 struts中<action>的scope默认是session@配置过滤器public class MyFilter extends HttpServlet implements Filter {@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {("gb2312");("gb2312");~(arg0, arg1);}配置<filter><filter-name>MyFilter</filter-name><filter-class> </filter><filter-mapping><filter-name>MyFilter</filter-name>…<url-pattern>/*</url-pattern></filter-mapping>上面这次比较浪费资源每次都要去实例化但是下面这种过滤器不太彻底,往数据库里插入数据时还是会经常出现乱码public class MyFilter extends HttpServlet implements Filter {private String encoding;public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {ction</url-pattern>*</servlet-mapping>写一个关于安全性的过滤器,用于过滤一些用户注册使用的关键字private String keywords[];public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {String username=("username");"this is safe filter !");if(username!=null){;for(String key:keywords){if(username)){("err", username+"被第二个管理安全的过滤器拦截了");("/WEB-INF/").forward(arg0, arg1);return ;}}}—(arg0, arg1);}public void init(FilterConfig arg0) throws ServletException {keywords=("keywords").split(";");}然后在配置过滤器还有设置要过滤的关键字<init-param><param-name>keywords</param-name>><param-value>xiaomao;xiaoxiao</param-value></init-param>每个action是单态的,包括actionserver,对网站并发性有影响若要证明的话在***中声明一个静态变量,每次访问自加什么是单态: 单态是指在整个运行过程中,始终是一个对象;默认放在WEB-INF目录下,也可以放到其他地方,只需要在中的<init-param>?<param-name>config</param-name><param-value>/WEB-INF/</param-value></init-param>有多个只需用","号隔开java 中插入数据库的语句需要注意标点("insert into user(username,password) values("+"'"+()+"'"+","+"'"+()+"'"+")");jstl(jsp startand tag liblary) jsp标准标签库: 可以提高开发速度,代码简洁升级jsp 页面<!DOCTYPE HTML PUBLIC"-oString();escapeXml表示是否安装html样式显示默认是true:表示以文本显示;如何输出request,session,application, pageContext域对象的数据<%("hello","request你好!");("hello","session你好!");("hello","application你好");("hello","pageContext你们<a href=''>百度</a>");%>这里有个优先级的问题,pageContext>request>session>application |<c:out value="${hello}" default="没有值" escapeXml="false" >如果是在同一个页面,那么这段代码输出pageContext你们好百度<%User u=new User();("admin");("admin");("user",u);%>,<c:out value="${}"></c:out> | |<c:out value="${}"></c:out>相当于(User) ("user").getUsername();<c:set>:<c:set var="abc"value="中国,北京"scope="request"></c:set><c:out value="${abc}"/><c:remove var="abc"/> 移除之后中国北京将不再显示<c:catch>:<c:catch var="err">#<%int i=3/0; %></c:catch><c:out value="${}"></c:out><c:if test="${2<30true:false}">ok</c:if><c:if>:<%("a","hello");("age","22"); %>"判断字符串:<c:if test="${a=='hello'}">hello</c:if>判断数值<c:if test="${age>12 and age<30 or age==22}">年龄大于12 小于30 ${age }</c:if> <%】ArrayList<User> al=new ArrayList<User>();User u1=new User();("陈超");("tiger");User u2=new User();("system");("manager");(u1); (u2);)("alluser",al);%><c:forEach items="${alluser}" var="u">${}${} <br/></c:forEach>第一种迭代<c:forEach var="i" begin="1" end="10">${i} </c:forEach> ]<br/>第二种迭代<c:forEach var="i" begin="1" end="10" step="3">${i} </c:forEach><br />用于分隔字符:<c:forTokens items="11;33;44;52;" delims=";" var="temp">${temp}</c:forTokens>什么时候用$符,什么时候不用$如果是从某个域对象中取出值,取的是一个变量就要用$ ,取的是一个固定的值就不要$第一种:(); 这种方式比较慢第二种:应用名/goManagerpageNow=”+pageNow*<c:if test="${pageNow>1}">前一页:<a href=”/web应用名/goManagerpageNow=${pageNow-1}”></c:if>当前页:<c:forEach><a href="/web应用名/gotoManagepageNow=${i}">[${i }]</a></c:forEach><c:if test="${pageNow<pageCount}">后一页:<a href=”/web应用名/goManagerpageNow=${pageNow+1}”></c:if>当前页${pageNow } /总页数 ${pageCount } 跳转到<input type="button" id="pageNow" name="pageNow" value="跳"/><%Map map=new HashMap();nvalidate(); etServletContext().getRealPath("file");)打印路径os=new FileOutputStream(keepFilePath+"\\"+fileName);;String uuid= newFileName=uuid+(beginIndex, ());int fileSize=();"uuid:"+uuid);"文件名称:"+fileName);"新文件名称:"+newFileName);"文件大小:"+fileSize);<InputStream is=null;OutputStream os=null;try {etServletContext().getRealPath("file");打印路径os=new FileOutputStream(keepFilePath+"\\"+newFileName);//读取文件并写出到服务器fileint len=0;//缓存byte []bytes=new byte[1024];//循环处理)while((len=(bytes))>0){(bytes,0,len);//读一点写一点return ("loginok");}} catch (FileNotFoundException e) {();} catch (IOException e) {[();}finally{try {();} catch (IOException e) {();}}>return ("loginerr");}}注意事项:如果文件名是中文怎么办做一个过滤器("UTF-8");("UTF-8");(arg0, arg1);—案例: 保存到数据库中Create database userdb2;Use userdb2;Create table t_users(username varchar(30) unique not null,myphoto varchar(128) not null,##保存新的文件名myphoto2 varchar(128) not null ##保存旧的文件名);?Q:37文件下载如果下载的文件时中文名那么我们需要在action中对其进行处理String filterFilkename="GB2312");思考: 如何控制文件的大小如何控制文件上传类型可以从D:\Program Files\Tomcat \conf目录下的中可以查看文件的类型*如何防止用户名重复`。