【前言】
对Web基础的掌握对于现在的我们来说是很重要的,对于基础知识的积累要从点滴做起。
【过程】
1.jdk
1)jdk安装目录下的文件
bin文件夹:存放一些可执行程序
javac.exe:java编译器,将java文件编译成.class文件
java.exe:java运行工具
jar.exe:打包工具
javadoc.exe:文档生成工具
db文件夹:是一个小型的数据库,从JDK6.0开始,Java中引用了一个新的成员JavaDB,这是一个纯java实现、开源的数据库管理系统。
这个数据库不仅轻便,而且支持JDBC 4.0所有的规范,在学习JDBC 时,不再需要额外地安装一个数据库软件,选择直接使用JavaDB即可。
jre文件夹:包括虚拟机和运行时的类库。
include目录:由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的。
lib文件夹:lib是library的缩写,意为 Java 类库或库文件,是开发工具使用的归档包文件。
2)jdk的环境配置
我的电脑–》右键–》属性–》高级系统设置–》环境变量
新建一个名为Java_HOME的系统变量,里边的值为D:\Java\jdk1.7.0_72
Path添加%JAVA_HOME%\bin;
注意:环境变量名一定要配置为JAVA_HOME,Tomcat服务器是由Java语音开发的,它在运行时需要根据JAVA_HOME环境变量来获得JRE的安装位置,从而利用Java虚拟机来运行Tomcat。
2.Tomcat
1)简介
Web资源开发完毕后需要发布在web服务器上才能被外界访问。在小型的应用系统或者有特殊需要的系统中,可以使用免费的web服务器---Tomcat,该服务器支持JSP以及Servlet规范,其源代码是公开的,不仅可以和目前大部分主流的web服务器一起工作,还可以作为独立的web服务器软件。
2)Tomcat安装目录下的文件
bin:用于存放Tomcat的可执行文件和脚本文件
conf:用于存放Tomcat服务器的各种配置文件
lib:用于存放Tomcat服务器和所有Web应用程序需要访问的JAR文件
logs:用于存放Tomcat的日志文件
temp:用于存放Tomcat运行时产生的临时文件
webapps:Web应用程序的主要发布目录,通常将要发布的应用程序放到这个目录。
work:Tomcat的工作目录,JSP编译生成的Servlet源文件和字节码文件放到这个目录下。
3)Web应用
在Web服务器上运行的Web资源都是以Web应用形式呈现的,所谓Web应用就是多个Web资源的集合,Web应用通常也称为Web应用程序或Web工程。一个Web应用由多个Web资源或其他文件组成,其中包括html文件、css文件、js文件、动态Web页面、java程序、支持jar包、配置文件等。
开发人员在开发Web应用时,应按照一定的目录结构来存放这些文件;否则,在把Web应用交给Web服务器管理时,不仅可能会使Web应用无法访问,还会导致Web服务器启动报错。
目录结构
html文件,jsp文件,css文件,图片
WEB-INF目录
web.xml
classes
lib
一个Web应用需要包含多个目录,这些目录来存储不同类型的文件。其中,所有的Web资源都可以直接存放在Web应用的根目录下,在Web应用的根目录中还有一个特殊的目录WEB-INF,所有的配置文件都直接存放在这个目录中,WEB-INF还有两个子目录,classes目录用于存放.class文件,lib目录用于存放Web应用所需要的各种jar文件。
注:**在WEB-INF这个目录下的文件不能被外部直接访问**。
3.Servlet
4.Cookie&&Session
5.JSP
1)简介
在动态网页开发中,经常需要动态生成HTML内容,例如,一篇新闻报道的浏览次数需要动态生成。这时,如果使用Servlet来实现HTML页面数据的改变,需要调用大量的输出语句,导致程序非常臃肿。为了克服Servlet的这些缺点,推出了JSP技术。
JSP全名是JavaServer Page,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共存,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示,为了与普通HTML有所区别,JSP文件的扩展名为.jsp。
2)JSP的三个指令
为了设置JSP页面中的一些信息,Sun公司提供了JSP指令。
page指令
<%@page属性名="属性值" %>
属性
language:指明解释该JSP文件时采用的语言,默认为Java。
pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。
import:指定JSP页面翻译成Servlet源文件中导入的包或类。import是唯一一个可以声明多次的page指令属性。一个import属性可以引入多个类,中间用英文都会隔开。在JSP中,以下4个包中的类可以直接使用,不需要引用:
java.lang.*
javax.servlet.*
javax.servlet.jsp.
javax.servlet.http.*
include指令 把其他资源包含到当前页面中
<%@ includefile="/include/header.jsp"%>
taglib指令 在JSP页面中导入JSTL标签库。
6.请求和相应
1)简介
Servlet最主要的作用就是处理客户端请求,并向客户端做出响应。为此,针对Servlet的每次请求,Web服务器在调用service()之前,都会创建两个对象,分别是HttpServletRequest和HttpServletResponse。其中,HttpServletRequest用于封装HTTP请求消息,简称request对象。HttpServletResponse用于封装HTTP响应消息,简称response对象。
在Web服务器运行阶段,每个Servlet都只会创建一个实例对象。而每次HTTP请求,Web服务器都会为调用所请求Servlet实例的service(HttpServletRequest,HttpServletResponse)方法,重新创建一个request对象和一个response对象。
2)HttpServletRequest
HttpServletRequest接口继承自ServletRequest,用来封装HTTP请求消息。
StringgetMethod():获取HTTP请求消息中的请求方式(GET,POST)
StringgetRequestURI():获取请求行中资源名称部分,即位于URL的主机和端口之后、参数部分之前的部分
StringgetQueryString():获取请求行中的参数部分,也就是资源路径后面的问号以后的所有内容
StringgetContextPath():获取当前应用的虚拟目录(/HelloWeb)。
以后想要查某个类的类名,变量名.getClass().getName();
StringgetHeader(Stringname):获取一个指定头字段的值,如果请求消息中没有包含指定的头字段,返回null;如果请求消息中包含多个指定名称的头字段,返回其中第一个头字段的值
EnumerationgetHeaderNames():得到所有头信息值
EnumerationgetHeaders(String name):某个指定名称的所有头字段值。在多数情况下,一个头字段名在请求消息中只出现一次,但有时候可能会出现多次。
3)HttpServletResponse
HttpServletResponse接口继承自ServletResponse,专门用来封装HTTP响应消息。
PrintWritergetWriter():获取字符输出流对象
在doGet方法中写
PrintWriter out =response.getWriter();
out.write("hello");
访问后就可以在网页中看到信息。
但如果我要输出的是中文的话,会乱码,显示?
由于计算机中的数据都是以二进制形式存储的,因此,当传输文本时,就会发生字符和字节之间的转换。字符与字节之间的转换时通过查码表完成的,将字符转换成字节的过程称为编码,将字节转换成字符的过程称为解码,如果编码和解码使用的码表不一致,就会导致乱码问题。
response对象的字符输出流在编码时,采用的是ISO 8859-1的字符码表,该码表不兼容中文,会将汉字编码成63(在ISO 8859-1的码表中若查不到字符就会显示63)。当浏览器对接受到的数据进行解码时,会采用默认的码表GB2312,将63解码为?
解决方式
response.setContentType("text/html;charset=utf-8");
7.Filter
1)简介
在Web开发过程中,为了实现某些特殊的功能,经常需要对请求和响应消息进行处理。例如,记录用户访问信息,统计页面访问次数,验证用户身份等。Filter作为Servlet2.3中新增的技术,可以实现用户在访问某个目标资源之前对访问的请求和响应进行相关处理。
Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。
2)生命周期
当浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源。当服务器接受到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要先将响应结果发送给拦截器,在拦截器中对响应结果进行处理后,才会发送给客户端。
其实,Filter过滤器就是一个实现了javax.servlet.Filter接口的类,在javax.servlet.Filter接口中定义了三个方法。
init(FilterConfigfilterConfig):init()方法用来初始化过滤器,开发人员可以在init()方法中完成与构造方法类似的初始化功能,如果初始化代码中要使用到FilterConfig对象,那么,这些初始化代码就只能在Filter的init()方法中编写,而不能在构造方法中编写。
doFilter(ServletRequestrequest,ServletResponse response,FilterChain chain):参数request和response为Web服务器或Filter链中的一个Filter传递过来的请求和响应对象;参数chain代表当前Filter链的对象,在当前Filter对象中的doFilter()方法内部需要调用FilterChain对象的doFilter()方法,才能把请求交付给Filter链中的下一个Filter或者目标程序去处理。
destroy():destroy()方法在Web服务器卸载Filter对象之前被调用,该方法用于释放被Filter对象打开的资源。
这三个方法都是Filter的生命周期方法,其中,init()方法在Web应用程序加载的时候调用(服务器启动的时候),destroy()方法在Web应用程序卸载的时候调用(),这两个方法都只会被调用一次,而doFilter()方法只要有客户端请求时就会被调用,并且Filter所有的工作集中在doFilter()方法中。
【感受】
多读书,多总结。