web开发基础

<%--  --%>该注释不会显示在客户端,
<!--  -->该注释会显示客户端
JSP内置对象之get和post的比较
1、get:以明文的方式通过URL提交数据,数据在URL中可以看到,提交的数据最多不超过2KB,安全性低但效率高。适合提交数据量不大,安全性不高的数据,比如:搜索,查询等功能
2、post:将用户提交的信息封装在html header内,适合提交数据量大,安全性高的用户信息。比如:注册,修改,上传等功能
JSP之请求重定向和请求转发比较
1、请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变
2、请求转发:服务器行为,request.getRequestDispathcher().forward(requset,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变
JSP的session对象
session表示客户端与服务器的一次会话
session是指用户在浏览某个网页时,从进入网站到浏览器关闭这段时间内,也就是用户浏览这个网站所花费的时间。
session实际上就是一个特定的时间概念

保存用户的状态量大机制

session和cookie

cookie的作用
1、对特定对象的追踪
2、保存用户网页浏览记录和习惯
3、简化登录

session和cookie对比


session是在服务端保存用户信息
session保存的是Object类
session随会话的结束而将其存储的数据销毁
session一般保存重要的信息

cookie实在客户端保存信息
cookie保存的是String类型
cookie可以长期保存在客户端
cookie一般保存不重要信息
使用URLEncoder.encode来指点编码,用URLEmcoder.decoder来解码
如果使用<jsp:forward>跳转之后,有如下特点:
          1.  服务端跳转,跳转之后地址栏不改变
          2.属于无条件的跳转。跳转之前的语句会执行,而跳转之后的语句将不会执行,那么如果现在在jsp中使用了JDBC的话,很明显必须在跳转之前进行数据库的关闭,否则数据库就再也无法关闭了。
 如果使用response.sendRedirect()跳转的话,有如下特点:
         1.客户端跳转,地址栏发生了改变
        2.跳转是在所有语句都执行完之后才完成的操作
         3.还要注意的一点就是这个跳转不可以传递request属性,也就是说不可以传递参数,request也无法取得参数值。
include指令和include动作比较
包含的内容不同:include指令包含的是文件的实际内容,二include动作包含的是页面的输出结果
转成的servlet不同:include指令是将主页面和包含页面转换成为一个servlet
include动作是将主页面和包含的页面转换为独立的servlet

创建servlet三步骤
 *1、继承HTTPServlet
 *2、重写doget(),dopost()方法
 *3、配置web.xml
j2ee6.0,servlet3.0以上可用注解方式,简单
关于查看系统API缺少资源的问题,提示说需要导入缺少的jar包,其中该jar包是source或者src的jar包
有时候web网页跳转不正常,需要重启tomcat服务器
路径:servlet:可绝对可相对(有/,无/)
web.xml: 必须带/
日期类型与字符串类型的转换:
采用SimpleDateFormat类进行转换,具体方法如下。
1、定义SimpleDateFormat对象 SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
2、字符串转换成日期数据:Date d = sdf.parse("日期字符串");

日期数据转换成日期字符串:String sd = sdf.format(日期变量);


重写equals()方法必须重写hashcode()方法
尽量保证使用对象的同一个属性来生成hashCode()和equals()两个方法。在我们的案例中,我们使用员工id。
eqauls方法必须保证一致(如果对象没有被修改,equals应该返回相同的值)
任何时候只要a.equals(b),那么a.hashCode()必须和b.hashCode()相等。
两者必须同时重写


设计模式之单例模式

单利模式之一饿汉模式:类加载的时候便进行了创建
1、将构造方法私有化,不允许外部直接创建对象
2、构造方法用private修饰,用static静态创建一个对象,创建一个获取对象的static方法
单例模式之二懒汉模式:懒汉模式也就是将实例化代码new 放在了获取实例的类方法中。延缓了实例化的进度,也体现了封装。
单例模式
1:饿汉模式,加载慢,获取快,线程安全
2:懒汉模式,加载快,获取慢,线程不安全
单列模式分为:
饿汉式:声明的同时直接实例化。 特点:加载类时比较慢,但运行时获取对象的速度比较快,线程安全。
懒汉式:声明的时候不实例化。 特点:加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。
实现单列模式的三个步骤:
1、将构造方法私有化,不允许外界直接创建对象。
2、声明类的唯一实例,使用private static修饰。
3、提供一个供外界获取实例的方法,使用public static修饰。

  类内部  本包 子类 外部包 
 public  √  √
 protected  √  √ ×
 default  √  √ × ×
 private  √  × × ×
修改web项目的名称后要相应的在properties中修改myeclipse的web中context-root的路径,改成修改后的web项目名称
ServletContext、HttpSession、ServletRequest对象的中属性的增加和删除有单独的事件监听器
XXAttributeListner

监听的事件包括
attributeAdded()
attributeRemoved()
attributeReplaced()
request.getAttribute的值获得是从request.setAttribute的值
request.getParameter是请求的参数值
在写CountPeople计算在线人数,且获取ip的demo时,每次部署项目前都得停止当前项目,然后开启。restart项目获取不到当前在线人数
OutputStream os = new FileOutputStream(filename,true);//true表示每次是追加;false表示每次覆写

守护线程:一般运行于后台,为其它的用户线程(运行在前台,处理具体任务)来服务,当所有的用户线程都消亡,没有可服务的对象,守护线程即会自动消亡。例如检测服务,常见例子如JAVA的垃圾回收机制。所有在守护线程里面不适合做计算以及业务逻辑的操作
创建方式:在线程启动之前(调用start()方法),调用setDaemon(threadName,true)来申明这个是守护线程即可   守护线程不能操作IO读写操作,因为一旦被服务的线程运行结束,守护线程就会停止运行,可能导致IO读写不完整。

四种解析方式:DOM SAX DOM4J JDOM
DOM使用步骤:
准备工作
1、创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
2、创建一个DocumentBuilder的对象
DocumentBuilder db=dbf.newDocumentBuilder();
3、通过DocumentBuilder对象的parser方法加载xml文件到当前项目
Document document = db.parse("books.xml");
sax解析xml
解析的时候,是startElement-characters-endElement , characters解析完一个属性,就到endElement,然后又解析一个属性又到endElement,最后解析完全部属性,到endElement又到startElement开始下一个节点。
xml的SAX解析并
将解析的内容及xml结构形式保存至Java对象中。
SAX解析:
1、获取一个SAXParserFactory的实例:SAXParserFactory factory = SAXParserFactory.newInstance();
2、通过factory获取SAXParser实例:SAXParser parser = factory.newSAXParser();
3、创建SAXParserHandler对象:SAXParserHandler handler = new SAXParserHandler();
4、将xml文件和解析方式handler加载到SAXParser实例:parser.parse("books.xml",handler);

JUnit是Java提供的一种进行单元测试的自动化工具。测试方法可以写在任意类中的任意位置。使用JUnit可以没有main()入口进行测试。
DOM4J在灵活性和对复杂xml的支持上都要强于DOM
DOM4J的应用范围非常的广,例如在三大框架的Hibernate中是使用DOM4J的方式解析文件的。
DOM是w3c组织提供的一个官方解析方式,在一定程度上是有所应用的。
当XML文件比较大的时候,会发现DOM4J比较好用
1.JUnit:Java提供的单元测试;@Test注解;采用JUnit不需要程序入口main方法
2.性能测试结果:几kB的xml文件;建议使用DOM4J解析
DOM-33ms
SAX-6ms
JDOM-69ms
DOM4J-45ms
工程右键build path --Add library--JUnit单元测试 --version:JUnit4
DOM:33,SAX:6
JDOM:69;DOM4J:45
DOM 有可能溢出
Junit4
1、测试方法上必须使用@Test进行修饰
2、测试方法必须使用public void进行修饰,不能带任何的参数
3、新建一个源代码目录来存放我们的测试代码
4、测试类的包应该和被测试类保持一致
5、测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖。
6.测试类使用Test作为类名的后缀,例如CaculateTest(不是必须的)
7.测试方法使用Test作为方法名的前缀,例如testAdd()(不是必须的)
8.可以在左侧界面单独选择测试类
9.自动生成:右键新建一个JUnit Test Case——更改源代码目录——可以选择相应需要进行测试的方法

#Junit——运行流程#
几种测试方法的运行顺序:
1.@beforeClass修饰的方法会在所有方法被调用前执行,该方法是静态的,在测试类被加载之后就会执行。在内存中只会存在一份实例。比较适合加载配置文件
2.@AfterClass所修饰的方法通常迎来对资源的清理,如关闭数据库的连接

2.@Before、@After会分别在每个测试方法前后执行一次

web 过滤器

过滤器1放行 --> 过滤器2放行--->业务逻辑返回请求结果-->过滤器2放行-->过滤器1放行-->用户响应界面
在LoginFilter项目中给success.jsp添加过滤器,直接通过URL跳转前先判断是否已经登录
struts配置时登陆action最好不要用login,会和struts的保留字起冲突
Struts2接受参数:
1,使用Action的属性接受参数,在Action中定义需要接受的属性,并写它的set/get方法。
2,使用DomainModel接受参数,创建实体类定义需要接受的属性,并set/get方法,在Action中创建实体类名属性。并在界面进行指定。
3,使用ModelDriver接受参数,在Action中实现ModelDriver<实体类名>接口,并实现方法返回当前需要转换的对象,删除set/get方法,并对 对象 进行实例化,并取消指定。
4,request
5,获取List集合中的参数。获取多个参数。

学习了拦截器之后可以用拦截器来控制用户的权限
action配置了自定义的拦截器之后defaultStack会失效,我们可以把自定义的拦截器和fefaultStack拦截器组成一个拦截器栈来配置action
关于myeclipse配置hibernate也是折腾啊,版本问题!     myeclipse添加hibernate4.1,但myeclipse最高支持3.3.要么自己手动导入4.1的jar包,要么就用3.3的hibernate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章