package test;
/*
* 1、web应用程序
* 桌面应用程序
* 嵌入式应用程序
* 2、Tomcat服务器:
* Apache Jakarta的开源项目
* JSP/Servelt 容器
* 目录结构:
* /bin;存放各种平台下用于启动和停止Tomcat的命令文件
* /conf:存放Tomcat服务器的各种配置文件,server.xml中修改端口号,默认8080
* /lib:存放Tomcat服务器所需的各种JAR文件
* /logs:存放Tomcat的日志文件
* /temp:Tomcat运行时用于存放临时文件
* /webapps:当发布web应用时,默认会将web应用的文件发布到此目录中
* /work:Tomcat把由jsp生成的Servlet存放于此目录下
* 3、编写web应用程序
* 在webApps创建项目目录
* 编写index.jsp;
* 创建WEB—INF目录:Java的web应用程序得安全目录,客户端无法访问,只有服务端可以访问;
* 1)web.xml,项目部署文件;可以设置欢迎页
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
* 2)classes文件夹,用以防止*.class文件
* 3)lib文件夹用于存放需要的jar包;
*
* 4、JSP:简化的Servlet设计,实现了Java当中使用HTml标签。Jsp是一种动态网页技术标准,也是JAVAEE的标准。JSP与Servlet一样,是在服务器端执行的。
* Jsp:Java平台,安全性高,适合开发大型的,企业级Web应用程序;hadoop
* javaEE适合做,电子银行,中国移动,12306
* Asp.net: .Net平台,简单易学,安全性以及跨平台性差;
* Php:简单,高效,成本低开发周期短,特别适合中小型企业的web应用开发。
* LAMP:Linux+Apache+MySQL+PHP
* JSP元素构成:
* 静态内容:
* 指令:
* page:通常位于jsp页面顶端,同一个页面可以有多个page指令;
* <%@ page 属性1=“属性值1” 属性2:=“属性2值”.... %>
* 属性:
* language:指定JSP页面使用的脚本语言:java
* import:通过该属性引用脚本语言中使用到的类文件:无
* contentType:指定JSP页面所采用的编码格式:text/html ISO-8859-1
*
* include:将一个外部文件嵌入到JSP文件中,同时解析这个页面中的JSP语句;
* taglib:使用标签库定义新的自定义标签,在JSP页面中启用定制行为;
* 表达式:
* 在JSP页面中执行的表达式
* <%=表达式 %>//表达式不以分号结束
* 小脚本:
在JSP页面中执行的java代码。
语法:<% java代码%>
* 声明:
* 在JSP页面中定义变量或者方法
* 语法:<%! JAva代码%>
* 注释:
* HTML注释:<!-- html注释-->;客户端可见
* JSP注释:<%-- html注释--%>;客户端不可见
* JSP脚本注释://
*
* JSP页面生命周期:
* 用户发出请求-->如果是第一次请求-->JSP引擎把该JSP文件转换成一个Servlet,生成字节码文件,并执行jspInit();
* -->如果不是第一次请求-->则请求生成的字节码文件
* -->解析执行,jspService();用来处理客户的请求,对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果多个客户同时请求该JSP文件,则jSP引擎会
* 创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及相应时间。但多线程的编程带来的同步
* 问题,由于该Servlet始终著于内存,所以响应是非常快的。临界资源共享和保护问题;
*
* JSP内置对象:是web容器创建的一组容器,不需要使用new关键字就可以使用的内置对象;
* 1、out:
* out对象是JspWriter类的实例,向客户端输出内容的常用对象;
* 1)void println();向客户端打印字符串
* 2)void clear();清除缓冲区的内容,如果在flush之后调用会抛出异常
* 3)void clearBuffer();清除缓冲区内容,在flush之后调用不会抛出异常
* 4)void flush();将缓冲区的内容输出到客户端
* 5)int getBufferSize();返回缓冲区以字节数的大小,如不设缓冲区则为0
* 6)int getRemaining();返回缓冲区还剩余多少可用
* 7)boolean isAutoFlush();返回缓冲区满时,是否自动清空还是抛出异常
* 8)void close();关闭输出流
* 2、request
* 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出相应;
* 它是HttpServlteRequest类的实例,request对象具有请求域,完成客户端的请求之前,该对象一直有效。常用方法:
* Stirng getParameter(String name);返回那么指定参数的参数值
* String[] getParameterValues(String name);返回包含参数name的所有值的数组
* void setAttribute(String,Object);存储次请求中的属性;
* object getAttribute(String name);返回指定属性的值
* String getContentType();得到请求体的MIME类型
* String getProtocol();返回请求用的协议类型及版本号
* String getServletName();返回接受请求的服务器主机名;
* 3、response
* 包含了响应客户端请求的有关信息,但在JSP中很少直接用到它。他是HttpServleResponse类的实例。response具有页面作用域,即访问一个页面时,
* 该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。
* String getCharacterEncoding();
* void setContentType(String type);设置相应的MIME类型
* PrintWriter getWriter();返回可以向客户端输出字符的一个对象
* PrintWriter与内置out对象的区别:PrintWriter对象输出优先于out对象;out.flush()强制输出,可以优先于PrintWriter;
* sendRedirect(java.lang.String location)重新定向客户端的请求。
* 4、session
* session表示客户端与服务器的一次会话;是HttpSession的一个实例;
* web中的session指的是用户在浏览某一个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间;
* session也就是用户浏览这个网站所花费的时间
* 在服务器的内存中保存着不同用户的session;和用户一一对应;
* session对象在jsp页面被装载时,自动创建,完成会话管理;
* 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,称为一个会话;
* 当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种方法知道这是一个客户,就需要session对象;
* 常用方法:
* long getCreationTime();session的创建时间
* public String getId();session创建时JSP引擎为它设的唯一id号
* Object setAttribute(String name,Object value);使用指定名称将对象绑定到此会话
* Object getAttribute(String name);返回与此会话的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则null
* String[] getValueNames();包含session中所有可用属性的数组
* int getMaxInactiveInterval();返回两次请求间隔多长时间此session被取消
* session生命周期:
* 创建:当客户端第一次访问某个jsp或者Servlet的时候,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求时,都会将SessionId携带过去
* 服务端会对此SessionId进行校验;
* 活动:某次会话当中通过超链接打开的新页面属于同一次会话;
* 制药当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话;
* 除非本次会话的所有页面都关闭后再重新访问某个jsp或者Servlet将会创建新的会话;
* 原有的会话依然存在,只是这个旧的SessionId仍然存在于服务端,只不过再也没有客户端会携带它然后交于服务器校验。
* 销毁:调用session.invalidate()方法;
* Session过期(超时),默认30分钟
* 设置超时时间:setMaxInactiveInterval()//设置过期时间
* <session-config>
<session-timeout>1</session-timeout>
</session-config>
* 服务器重启;
* 6、application:
* application对象实现了用户数据间的共享,可存放全局变量
* application开始于服务器的启动,终止于服务器的关闭;
* 在用户的前后连接或不同用户之间的连接中,可以对aplication的同一属性进行操作;
* 在任何地方对applicatiion对象的操作,都会影响到所有用户对此的访问;
* application对象是ServletContext类的实例
* 常用方法:
* void setAttribute();
* Object getAttibute();
* Enumerration getAttribute();返回所有可用属性名的枚举;
* String getServerInfo();返回Servlet引擎名和版本号;
* 7、page:
* page对象就是指当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例;
* pageContext:
* 提供了对JSP页面内所有的对象及名字空间的访问;
* pageContext可以访问到本页坐在的session对象,也可以取本页面application的属性值;
* 本类名也叫pageContext;
* void forward();使当前页面重导到另一个页面
* void include();包含令一个页面;
*
* 8、Config:
* 是在一个servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时用到的参数(通过属性名和属性值构成)以及
* 服务器有关的信息(通过传递一个ServletContext对象);
* 9、Exception:
* 异常对象,当一个页面运行时发生了异常,就产生这个对象,如果一个JSP页面要应用此对象,就必须把page中的isErrorPage设置为true,否则无法编译,
* 如果抛出异常需要跳转到其他页面,则需要在page中加添加errorPage="xx.jsp";实际时java.lang.Throwabled对象,常用方法:
* Stirng getMessage();返回描述异常的消息;
* String toString();返回异常的简短描写消息;
* void printStackTrace();显示异常及其栈轨迹
* Throwable FillInStackTrace();
*
* web程序的请求响应模式:
* request--->response
* 缓冲区:Buffer,就是内存的一块区域用来保存临时数据;
* get与post区别:
* get:以明文的方式通过URL提交数据,数据在URL中可见,提交的数据不超过2k,安全性较低,效率较高。适合提交数据量不大,安全性不高的数据。搜索,查询等;
* post:将用户信息封装在HTML中的HEADER内。适合提交数据量大,安全性高的用户信息。注册,修改,上传等;
*
* 请求转发于请求重定向的区别:
* 请求重定向:客户端行为,response.sendRedirect();从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变;
*
* 请求转发:服务器行为,request.getRequestDispatchor().forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变;
*/
public class TestJavaWeb {
}