Java web基础
Java web是利用JE22部分或全部技术组件,实现多层次分布式应用。
j2EE与服务器
J2EE是一套企业及分布式应用标准规范,而不是产品。
- WEB服务器:只能支持web基础服务技术组件(servlet,filter,jsp)运行,不支持EJB。——Tomcat、jetty
- 应用服务器:支持web基础服务技术组件运行,也支持运行EJB组件的服务器。——JBoss、WebLogic、WebSphere
Tomcat
目录 | 描述 |
---|---|
/bin | 存放在Windows平台以及Linux平台上启动和关闭Tomcat的脚本文件 |
/conf | 各种配置文件,其中开发最关心的是server.xml |
/lib | 存放Tomcat服务器所需的各种jar文件 |
/temp | 存放Tomcat产生的临时文件 |
/logs | 存放Tomcat的日志文件 |
/webapps | 默认情况下把web应用放到此目录下 |
/work | Tomcat把由JSP产生的servlet放到此目录下 |
Servlet
Servlet是Java Servlet的简称,用Java编写的服务器程序,主要功能在于人机交互式地web浏览,生成动态Web内容。它运行在Web服务器中,调用Servlet方法处理客户端传过来的每一个HTTP请求。
Servlet处理HTTP请求时的过程
- init:初始化Servlet调用,如果web.xml中load-on-startup配置为0,则客户端第一次请求时初始化;配置为1,则客户端启动时初始化Servlet。
- Service:业务逻辑处理代码,客户端每次请求Servlet时都会调用该方法,根据请求参数HttpServletRequest的getMethod()返回访问类型结果判断是执行doGet()还是doPost()等。
- destory:当容器关闭时会先销毁所有的Servlet,容器关闭时会调用destory方法。
线程安全问题:一个Servlet在内存中只有一个实例,意味着所有请求可操作Servlet中的类的成员变量。为了避免多个线程操作Servlet中的类成员变量引起的线程安全问题,能不用类成员变量就不要用,设计为局部变量;如果必须要用,要记得加锁或者同步原语保证线程安全。
Servlet作用域主要用于传递数据和存储临时数据,作用域也是通过作用域对象保持数据。作用域由容器控制自动实例化。
response的重定向方法==sendRedirect()与request的重定向方法forward()==区别:sendRedirect()主要用于客户端的重定向,例如页面的跳转。forward()主要用于服务端的重定向,比如用户服务接口A,可以通过forward()带值定向到接口B。
Filter
Filter(过滤器)主要用于对请求(request)进行预处理,也可以对响应(response)进行后处理。一般实现身份认证,安全控制,编码转换,文字过滤,日志处理,内容加解密,统计访问量等,需要在请求或响应中额外处理的功能。
Listener
Listener(监听器)用于监听web应用中对象创建、销毁等动作的发生,然后通知相关业务逻辑做出相对于的处理。当对象的状态发生变化时,触发自动调用监听器对象中的方法。
JSP
JSP运行原理(JSP只做了解)
- 当服务器第一次接收到客户端对JSP的请求时,JSP引擎将对应的JSP文件转换成Servlet。
- JSP引擎调用Java编译器对Servlet代码进行编译生成字节码文件。
- 服务器将字节码文件加载到内存,并跟进请求执行业务逻辑。
- 处理结果返回客户端,一般为HTML文件。
web.xml
启动Java WEB工程时,容器会先去加载配置文件web.xml。web.xml负责初始化配置信息,规范配置约束。