这一周主要的重点仍旧在servlet上,而后学习了MVC模式,如何按照这个模式去实现一些复杂的功能。实现前端和后端之间相互联系,在编写程序的时候,必定要有一个清晰的思路,不能混乱,尤为是在处理各类页面相互跳转的时候。这一周还有一个重点就是JSP(JAVA server page)本质上它仍旧是一个servlet,只不过它的侧重点在于展现页面内容,方便咱们从服务器端获得响应。html
- servlet的多线程问题
- servlet的多线程机制:servlet的生命周期是由Web容器负责的,当客户端第一次请求某个servlet的时候,servlet容器会根据web.xml配置文件来实例化这个servlet,以后新的客户端来请求时,不会建立新的实例,也就是有多个线程在使用这个实例,servlet容器会自动使用线程池等技术来支持。因此在servlet中设置实例变量时要慎之又慎!
- servlet的JMM(java memory model):系统存在一个主存区,java中全部的实例变量都存在这个主存当中,对于全部的线程都是共享的,而后每个线程分配到一个工做内存区,工做内存由缓存和堆栈构成,缓存中保存的是主存中实例变量的拷贝,缓存并不老是和主存同步的,堆栈中保存的是线程中的局部变量,线程之间是没法相互直接访问堆栈中的变量。可是对于高并发的场景,此方法在一段时间内只能有一个线程在运行,因此也不是个很好的解决方法。
- 如何设计线程安全的servlet:一、实现SingleThreadModel接口,实现了此接口的类,将不会建立多线程,始终保持一个线程,也就是说容器将建立多个实例变量,因此如今被淘汰。二、使用synchronized关键字保证一次只有一个线程能够访问受保护的区段。三、避免使用实例变量,只要不使用实例变量,就不会形成数据紊乱的状况发生。
- 表单提交前的校验
- 主要是在JS中来实现,能够预先在客户端进行校验,保证数据传递的效率,方法有三种:一、在submit按钮中添加onclick事件,return true则提交,return false则不提交。二、直接用button按钮添加onclick事件,若是数据正确,则调用form对象的submit()方法。三、在form标签中修改onsubmit属性,return true则提交。
- 防止表单重复提交:在客户端中有两种方法,一、在js脚本中设置一个标志变量,来区分是否已经提交。二、在单击提交按钮后将提交按钮设置成disabled状态。可是这两种方法都不能应对浏览器后退和刷新的状况。
- Cookie:
- cookie是服务器保存在客户端上的一些信息,Cookie类,request对象的.getCookies();方法,返回的是一个Cookie数组,而后遍历就好了。有name和value属性。
- 向客户端写入Cookie:Cookie cookie=new Cookie("name","value");cookie.setMaxAge("millis");response.addCookie(cookie);注意在写入Cookie的时候要注意编码问题。
- JSP(java server page)
- 是一种服务器端脚本语言,能够混合java代码和html标签一块儿使用的技术,能动态生成html。JSP最终会生成java class,是一个规范,是J2EE中重要的一部分,jsp运行在web容器中,设计时是JSP形态,运行时是容器编译成的Servlet形态。
- JSP指令directives,用来设置属性,1,<%@page ... %>; 2,<%@include ... %>注意被包含的文件中不能有<html>,<head>,<body>; 3,<%@taglib ... %>;
- JSP声明Declaration,能够定义一些变量,同时也能够定义一些方法。<%! ... %>
- JSP表达式Expressions,表达式,<%= ... %>其结果会在HTML中显示。注意表达式中没有;号
- JSP脚本Scriptlet,jsp中嵌入的脚本代码。注意与html严格分开来。
- 9个内嵌变量,request, response, session, application, config, pageContext, out, page, exception(只能在isErrorPage="true"中使用)。
- jsp标签,<jsp:include .../>能够传递参数。与<%@include ..%>区别,一个是动态的取得标签所引用文件的输出结果,一个是在编译时静态的导入所引用的文件。
- JavaBean:就是一个java类,实现了SUN公司的JavaBean规范,set、get, is, 须要一个无参数的构造函数,须要实现序列化的接口Serializable
- <jsp:useBean /> ?
- <jsp:getProperty />取得JavaBean中的属性值
- <jsp:setProperty/>设置对象的属性值
- EL(ExpressionLanguage):在JSP中使用的运算式,${... },便于维护web数据,主要是用来存取、操做对象或数据。
- JSTL(Java Server Pages Standard Tag Lib):标准标记库,<c:out value=""/> <c:set var="" scope="" value=""/> <c:if test="">...</c:if> <c:choose><c:when test=""></c:when><c:otherwise></c:otherwise></c:choose> <c:foreach items="" var="" (varStatus)></c:foreach>总之JSTL就是用来解决jsp中出现<%javacode%>的状况的。*而后还能够自定义标签。
- MVC设计模式:model,指的是java的各类模型,也就是类;view,主要用jsp和jstl来实现;controller,servlet。
- filter:过滤器,是一段可重用的,转换http请求,响应内容和头信息的代码,它先于与之相关的servlet或jsp页面运行在服务器上。过滤器能够附加到多个servlet和jsp页面上,而且能够检查进入这些资源的请求信息。建立过滤器:创建一个类实现Filter接口。每一个filter也只有一个实例,对请求和响应进行拦截,并执行过滤方法,而后传到下一级filter或资源中。