您的位置:首页 > 编程语言 > Java开发

JAVA-JSP/Servlet 笔记(九)

2016-01-26 15:16 357 查看
1、如果用户禁止cookie,如何继续使用session (了解)?
     1)可以使用url重写来解决这个问题。
     2)什么是url重写
          浏览器向服务器发请求时,请求地址由服务器来生成(服务器会在请求地址后面添加 sessionId)。
     3)如何编程
          a,  response.encodeURL(String url);
          该方法用在链接地址,表单提交地址。比如
          <a href="<%=response.encodeURL("some")%>"></a>
          <form action="<%=response.encodeURL("del.do")%>">
          b, response.encodeRedirectURL(String url);
          该方法要用在重定向,比如
          response.sendRedirect(
          "<%=response.encodeRedirectURL("list.do")%>");
          注意:
               转发不用考虑。因为转发是服务器内部 一个组件通过容器调用另外一个组件,与 session无关。
2、prototype.js
     是一个流行的js框架,提供了很多有用的函数。

     a,  $(id):  document.getElementById(id);

     b,  $F(id):  $(id).value;

     c, $(id1,id2,id3...):  依据id1,id2...分别查找相应的节点,然后放到一个数组里面返回。

     d, strip(): 除掉字符串两端的空格。

     e, evalJSON(): 将json字符串变成javascript对象。

    
3、过滤器
     (1)过滤器是什么?

          servlet规范当中定义的一种特殊的组件,可以拦截servlet容器调用的过程并进行相应的处理。

     (2)如何写一个过滤器?

          step1,写一个java类,实现Filter接口。

          step2,在doFilter方法里面,编写拦截处理代码。

          step3,配置过滤器 (web.xml)。

     (3)过滤器的优先级

               当有多个过滤器都满足过滤的条件,容器 会按照<filter-mapping>的先后顺序来执行过滤器。

    (4)优点

               a, 可以将多个组件相同的处理逻辑集中写在过滤器里面,方便代码的维护。

               b,可以实现代码的"可插拔性": 增加或者减少某个模块,不影响整个程序的

          正常执行。
4、监听器

     (1)什么是监听器

          servlet规范当中定义的一种特殊的组件,用来监听容器产生的事件并进行相应的处理。

          主要有两大类事件:

               a, 生命周期相关的事件: 当容器创建或者销毁request,session,ServletContext(servlet上下文)时产生的事件。

               b, 绑订相关的事件:当容器调用了request, session,ServletContext的setAttribute, removeAttribute产生的事件。

     (2)如何写一个监听器

          step1, 写一个java类,实现相应的监听器接口。 (要依据监听的事件选择相应的监听器接口,比如,要监听session的创建或者销毁,选择 HttpSessionListener)。

          step2, 实现监听器接口方法。

          setp3, 配置监听器(注册)。

     (3)ServletContext接口

          1)servlet上下文是什么?

               当容器启动的时候,会为每一个应用创建唯一的一个符合ServletContext接口的一个对象,该对象会一直存在,除非容器关闭或者应用被卸载。

          2)如何获得servlet上下文?

               a, GenericServlet 提供了getServletContext();

               b, HttpSession 提供了getServletContext();

               c, ServletConfig 提供了getServletContext();

               d, FilterConfig 提供了getServletContext();

          3)作用

               a, 绑订数据  setAttribute,removeAttribute, getAttribute

          注意:

                    request,session,ServletContext都可以绑订数据,区别如下:

                    区别1: 绑订的时间长度不一样,request绑订的数据存在的时间是一次请求与响应期间,

                              session是多次请求与响应期间,ServletContext会一直存在。

                    区别2:request绑订的数据可以被同一个请求 当中所涉及的各个组件访问(转发)。session绑订的数据可以被多个请求所涉及的组件访问。

                 
4000
            ServletContext绑订的数据可以随时访问,任何组件都可以访问。

                              尽量优先使用生命周期短的,比如,使用 request能解决问题,就不要用session。

               b,访问全局的初始化参数全局的初始化参数指的是可以被同一个 应用中的所有的servlet,filter访问的初始化参数。String getInitParameter(String paraName);

               c, 依据逻辑路径获得实际部署时的物理路径

      
5、servlet线程安全问题

     (1)为什么说servlet会有线程安全问题?

          a, 容器在默认情况下,对于每个servlet,只有一个实例。

          b, 当有多个请求都去访问某个servlet,容器 就会产生多个线程调用servlet对象,就有可能产生线程不安全的情况(比如,多个线程去修改servlet对象的属性值)。

     (2)如何解决

               a, 使用synchronized加锁。加锁之后对性能会有一些影响。

               b, 让servlet实现SingleThreadModel接口。容器会为每一个线程创建一个servlet实例。 不建议使用(如果请求过多,会产生过多的servlet对象)。
6、上传文件(扩展)

     step1, 设置表单的enctype="multipart/form-data",并且,表单的提交方式必须为post。

     step2, 在服务器端,不能够使用request.getParameter方法。

     此时,要使用InputStream,request.getInputStream()获得一个字节输入流,然后分析该流获得相应的数据。一般使用一些工具来分析,比如apache提供的commons-fileupload.jar来分析。

7、jsp 标签

       (1) jsp标签

          1)jstl (java standard taglib java标准标签库,由apache提供的一些常用的标签,后来捐献给了sun,sun将这些标签命名为jstl)。

          2)编程步骤

               step1,将jstl相关的jar文件拷贝到WEB-INF\lib下。

               D:\czh\MyEclipse 5.5.1 GA\

               eclipse\

               plugins\

               com.genuitec.eclipse.j2eedt.core_5.5.1\

               data\

               libraryset\JSTL1.1\lib

               standard.jar jstl.jar

          step2, 使用taglib指令引入要使用的jsp标签<%@taglib uri="" prefix=""%>

               uri: 命名空间,就是一个字符串,用来区分同名的元素。为了保证命名空间的唯一性,经常使用一个域名来表示命名空间。

               prefix:前缀
         1、jsp标签是如何运行的?

               容器依据标签的命名空间找到标签的描述文件(容器会从WEB-INF\下查找,找不到,再查找WEB-INF\lib下的jar文件),接下来,依据标签的名称

               找到标签的描述(标签类的名称),然后将这个标签类实例化,调用其方法。

     2、jstl的核心标签

          1)if标签

          <c:if test="" var="" scope="">

               标签体

          </c:if>

          如果test属性值为true,则执行标签体的内容。

          标签体可以是html,也可以是java代码。test属性可以使用el表达式来赋值。var属性用来指定一个绑订名称 scope属性用来指定绑订的范围(page,request,session,application)

     2)choose标签

          <c:choose>

               <c:when test="">

                    标签体

               </c:when>

               ....

               <c:otherwise>

               </c:otherwise>

          </c:choose>

               when表示一个分支,当test属性值为 true时,执行该分支的内容。

               test属性可以使用el表达式。when标签可以出现1次或者多次。otherwise标签可以出现0次或者1次,表示例外。

     3)forEach标签

               遍历集合

          <c:forEach var="" items="" varStatus="">       </c:forEach>

          items属性:指定要遍历的集合,可以使用el

          表达式。

          var属性:指定一个绑订名称,绑订范围是 pageContext,容器每一次从集合当中取一个对象然后将这个对象绑订到pageContext, 绑订名称由var属性来指定。

          varStatus属性:指定一个绑订名称,绑订范围是pageContext,绑订值是一个封装了当前迭代状态的对象。该对象有几个方法可以获得当前迭代的状态,比如

               getIndex():返回当前正在被访问的对象的下标,下标从0开始。

               getCount():返回是第几次迭代。值从1开始。

3、自定义标签

     step1, 写一个java类,继承SimpleTagSupport类。

     step2, 在doTag方法里,编写相应的处理逻辑。

     step3, 在.tld文件里面,描述标签。

          .tld文件要放在WEB-INF\下。

          <body-content>empty</body-content>

          该标签没有标签体。

          <body-content>scriptless</body-content>

          该标签可以有标签体,但是,标签体里面不能够写java代码(即不能够写<% %>  <%= %>  <%! %>)。

          <body-content>JSP</body-content>

          标签有标签体,标签体的内容可以写java 代码。只有复杂标签技术才支持JSP,简单标签技术只支持empty,scriptless

4、如果使用javaee5.0,如何使用el表达式和jstl标签

     javaee5.0对应的servlet规范是servlet2.5,     tomcat6.0实现了该规范。

     javaee1.4对应的servlet规范是servlet2.4,     tomcat5.5实现了该规范。

     如果要使用javaee5.0,建议使用tomcat6.0及以上版本。

     另外,如果要使用jstl标签,因为javaee5.0 已经将jstl对应的jar文件作为javaee5的核心包包含进来了,不必再拷贝相应的jar文件到 WEB-INF\lib下了。

    
 8、mvc (model,view,controller)
     (1)什么是mvc?
          是一种软件架构的思想, 即将一个软件的模块按照 模型、视图、控制器来进行划分:其中,模型用来封装业务逻辑;视图用来生成表示逻辑;控制器用来

               协调模型和视图(视图要通过控制器来调用模型,模型返回的处理结果也要先交给控制器,由控制器来选择合适的视图来显示处理结果)。
          使用mvc最重要的原因是可以实现"模型的复用“:
          一方面,模型不用关心处理结果如何展现,只需要将处理结果交给不同的视图来展现即可(即将模型返回的结果用不同的方式来展现);另外一方面,模型可以使用不同的视图来访问。
     (2)如何使用mvc来开发一个web应用程序
          1)使用servlet或者filter来充当控制器, 
使用java类来充当模型,使用jsp来充当视图。
          注意:
               模型也可以使用一些企业级的java组件.   比如,ejb,spring容器管理的javabean来实现。     视图也可以使用jsf,模板技术来实现。
     (3)mvc的优点
          1)可以实现“模型的复用”。
          2)系统的维护性更好:比如添加一个视图或者修改视图不会影响模型;反过来,修改或者添加新的模型,也不会影响视图。
          3)方便测试:比如,如果将业务处理代码直接写在servlet里面,需要部署之后才能测试;而写在java类里面,可以立即测试(不依赖servlet容器)。
     (4)mvc的缺点
          使用mvc,会增加代码量、相应地也会增加。 
        软件开发的成本,设计的难度也会增加。         
         

              

         

         

         

                   

          

              

    

         

         

                   

         

    

    

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jsp jstl prototype mvc