1.Tomcat:先配置java环境和tomcat环境
配置端口号:到conf里面的server.xml中找到port:8080 可以修改端口号,最大到65535,注意不能占用默认的端口
work:存放tomcat动态生成的资源
appwebs:存放写的web文件
logs:日志
lib:tomcat要使用的架包
2.创建一个web应用:
静态网站:
第一步:在webapps下创建一个目录(名称不能包括中文和空格),这个目录被称为项目目录
第二步:在文件里创建一个html文件,在里面写内容就完事了
动态网站:
第一步:在webapps下创建一个目录
第二步:在项目目录下创建这些内容:
创建一个WEB-INF文件(!!它下面的资源是允许浏览器访问的):
web.xml文件
lib文件夹(存放架包)
classes文件夹(存放编译出来的.class文件)
创建一个静态或者动态的页面
3.配置外部应用(了解):就是不放在tomcat那个webapps里也能找到它的方法
(待补充)
4.配置虚拟主机(就是用网址http://www.itcast.cn访问我们的项目):
第一步:将端口号改成80,因为默认端口号就是80
第二步:在本机上可以解析域名为127.0.0.1,这需要修改 C:\WINDOWS\system32\drivers\etc\hosts文件添加网址与127.0.0.1的绑定关系
第三步:在server.xml文件中添加一个<Host>(主机):里面的name=“http://www.itcast.cn” appBase="F:/itcastapps"
5.server.xml里面元素介绍:
http协议:请求,响应。如果是IE浏览器需要安装HttpWatch软件,来查看请求和响应,谷歌自带。
请求: 请求格式
请求行
多个请求头信息:头名称:头值
空行
请求体
Connection:Keep-Alive
响应:响应格式
响应行(协议/版本 状态码的解析)
响应头(key/value格式)
响应内容的MIME类型:Content-Type:text/html;charset=utf-8
空行
响应正文
6.POST请求的内容:
1.表单中的数据会自动使用url来编码
2.utf-8编码格式里一个汉字占3个字节,GBK编码格式里一个汉字占2个字节
中文转换:一个中文三个字节 每一个字节先加上128 然后转换成16进制 最后添加%前缀
3.在上传的时候修改Content-Type里面的内容
4.个别请求头(点击链接跳转到百度会添加一个请求头,直接输入网址则不会出现):Referer:http://localhost:8080/hello/index.jsp 能统计访问量
5.响应码:200,请求成功
404,请求的资源没找到,客户端错误的请求了资源
500,请求资源找到了,但服务器内部出现了错误
302,重定向,表示服务器要求浏览器重新发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址
304, Last-Modifired:最后请求时间
请求头:
if-Modified-Since:把上次请求的index.html的最后修改时间还给服务器
状态码:304,比较if-Modified-Since的时间与文件真实的时间一样时,服务器会响应304.且不会有响应正文,表示浏览器缓存的就是最新版本
6.常用响应头
HTTP/1.1 200 ok:响应协议为HTTP1.1,状态码为200,表示请求成功,ok是对状态码的解释
Server:Apache-Coyote/1.1:服务器的版本信息
Content-Type:文本格式;编码格式;响应体的编码格式
Set-Cookie:响应给客户端的Cookie
Data:响应的时间,这可能会有8个小时的时区差
具体关于请求头与响应头:http://blog.csdn.net/qingkongyeyue/article/details/54925741
javaweb三大组件:Servlet和Listener和Filter
Servlet:一个项目里每个servlet都是处理不同的请求的,都是独一无二的。
作用:接受请求数据,处理请求,完成响应
实现Servlet的方式:
1.实现javax.servlet.Servlet接口
2.继承javax.servlet.GenericServlet类(一般用下面那种,比较方便)
3.继承javax.servlet.http.HttpServlet类
如何让浏览器访问servlet?
1.给servlet指定一个servlet路径(在web.xml中配置)
2.访问servlet路径,找到我们写的servlet实现类
(servlet类是由我们自己写的,对象是由服务器创建的,并由服务器来调用)
ServletConfig: servlet配置介绍:
HttpServlet:
HttpServlet extends GenderServlet(){
void service(ServletRequest,ServletResponse)--生命周期方法
强转两个参数为http协议相关的类型
调用本类的service(HttpServletRequest,httpServletResponse)方法
void service(HttpServletRequest,httpServletResponse)-->参数已经是Http协议相关的,使用起来方便得多
它会通过request得到当前请求的方式
根据请求的方式调用doGet()和doPost()方法
doPost(){} 重写
doGet(){} 重写
}
servlet与线程安全(servlet不是线程安全的,所以效率很高):
初级:不要在servlet中创建成员变量,只创建局部变量。
中级:可以创建无状态的成员(例如:只有方法的类)
高级:可以创建有状态成,但是状态必须为只读的
让服务器在启动的时候就创建servlet:
<load-on-startup>0</load-on-startup>//配置在web.xml的servlet里面的信息,设定了servlet的启动优先级,数字越小优先级越高。
一个servlet可以绑定多个url-pattem,这样会有多种途径来访问一个servlet
在url-pattem中可以使用通配符 * . ,这样servlet可以绑定一组url,例如/*,就可以匹配所有的URL,一个url中最多出现一个通配符,而且*不能出现在两端
Tomcat文件下config里面的web.xml了解:
首先它是所有web.xml的父文件,写在它里面的文件相当于写在每一个web.xml之中
servlet里面有个叫default的servlet,匹配优先级最低,界面对应404界面。
servlet与反射:Tomcat使用类名创建对象,调用方法,就是通过反射来做到的
ServletContext:一个项目只有一个这个对象,多个servlet之间可以用它来传递数据;
这个对象在tomcat启动时启动,销毁时销毁。
ServletContext是javaweb四大域对象之一:
PageContext
ServletRequest
HttpSession
ServletContext
所有的域对象都有存储数据的功能,因为内部有个Map用来存储数据,
ServletContext用来操作数据的方法:
void setAttribute(String name,Object value):存数据,一样的名字的值会覆盖,和map相同
Object getAttribute(String name):取数据,根据数据的名字来取数据的值
Servlet可以获取初始化参数,但这个参数是局部参数。换句话说,一个servlet只能获取到自己的初始化参数,不能获取到别人的。
ServletContex可以获取到应用的初始化参数与servlet初始化参数不一样
配置所有servlet的公共初始化参数(直接被根元素所包含):
<context-param>
<param-name>xxx</param-name>
<param-value></param-value>
</context-param>
使用ServletContext.getInitParameter("xxx");
获取文件或者文本存放的真实路径:
this.getServletContext().getRealPath("/index.jsp");
获取资源流,即以输入流的形式获取资源
例如:获取a.txt资源流:InputStream in=servletContext.getResourceAsStream("/a.txt");
获当前路径下所有资源的路径
this.getServletContext().getResourcePaths("/WEB-INF");
获取类路径下的资源:
首先获取到ClassLoader,用this.getClass().getClassLoader()
然后用它的方法getResourceAsStream("要读取文件的路径"),得到一个InputStream
---恢复内容结束---