Servlet
一、服务器
1.Tomcat(Apache)
2.JBoss
3.WebLogic
4.Webphare
二、Tomcat的使用
1.Linux下:
(1)配置环境变量:安装JDK、配置CLASS_HOME/CLASS_PASS/PATH
(2)下载Tomcat
(3)安装Tomcat:将下载好的Tomcat复制到”/home/soft01/”下
(4)启动Tomcat:打开Tomcat/bin,打开终端,执行命令 ./startup.sh
(5)访问Tomcat:打开浏览器,在地址栏输入http://localhost:8080,跳转后看到一只“猫”,代表成功。
(6)关闭Tomcat:打开/tomcat/bin,打开终端,执行命令 ./shutdown.sh
2.Windos下:
(1)配置环境变量:安装JDK、配置CLASSHOME/CLASSPASS/PATH
(2)下载Tomcat
(3)安装Tomcat:将下载好的Tomcat解压缩到要安装的位置,运行/apache-tomcat/bin/startup.bat
(4)访问Tomcat:打开浏览器,在地址栏输入http://localhost:8080,跳转后看到一只“猫”,代表成功。
(5)关闭Tomcat:运行shutdown.bat
三、一个Servlet项目(手动部署)
1.创建JAVA项目
2.创建Web目录:(规范)
WebRoot
WEB-INF
classes
lib
web.xml
3.设置编译目录:将项目编译目录更改到更改创建的classes文件夹下。
4.导入jar包:将核心jar包导入更改创建的lib文件夹下。再将这些导入的jar包加入项目类库中。
5.写一个servlet类
(1)继承javax.servlet.http.HttpServlet类
(2)重写service方法
6.注册servlet:配置WebRoot/WEB-INF/web.xml文件
在web-app标签下,增加:
(1) <servlet>
<servlet-name>tomcat中的文件名</servlet-name>
<servlet-class>包名.类名</servlet-class>
</servlet>
(2) <servlet-mapping>
<url-pattern>/网页路径名(“/不能省略”)</url-pattern>
<servlet-name>tomcat中的文件名</servlet-name>
</servlet-mapping>
7.将Servlet项目下的WebRoot文件复制到apache-tomcat/webapps目录下
四、再写一个servlet(使用eclipse)
1.创建一个Web项目
(1)自带Web目录
(2)自动设置编译路径为classes
(3)自动导入jar包
2.创建servlet类
(1)继承javax.servlet.http.HttpServlet类
(2)重写service方法
3.注册servlet:配置WebRoot/WEB-INF/web.xml文件
4.给Eclipse配置Tomcat
(1)Configure Server->
(2)Servers->
(3)Tomcat->
(4)选择配置的Tomcat版本->
(5)选择enable,配置Tomcat文件目录->
(6)JDK中选择JDK版本->
(7)Paths中prepend to classpath添加apache-tomcat/bin/tomcat-juli.jar包
5.部署Tomcat项目
(1)服务器图标->
(2)Manage Deployments->
(3)Server选择刚刚部署的Tomcat版本,点击add->
(4)在Project选择刚刚部署的Tomcat项目,点击Finish->
(5)完成部署。
五、常见错误
1.404,产生原因:Web服务器根据请求地址找不到对应资源。如:
(1)地址拼写错误。
(2)web.xml文件中两个<servlet-name>不一致。
(3)工程没有部署。
(4)Web应用程序部署结果没有遵守Servlet规范。
2.405,产生原因:Web服务器找不到service()方法处理请求。
3.500,产生原因:程序运行过程中报错。如:
(1)Servlet类没有继承HttpServlet类或者实现Servlet接口。
(2)web.xml文件中的<servlet-class>写错。
(3)service()方法运行时抛出异常。
4.端口被占用:修改端口,在apache-tomcat/conf/server.xml中,找到 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 行,将port修改为其他未使用端口。
六、HTTP协议
1.HyperText Transfer Protocol超文本传输协议:由w3c(万维网联盟)指定的一种应用层协议,用来规定浏览器与web服务器之间如何通信以及通信的数据格式。
2.通信步骤:一次请求一次连接,此种连接方式可以最大限度的连接更多的客户端。
(1)建立连接
(2)发送请求
(3)接受响应
(4)关闭连接
3.数据格式
(1)请求数据
① 请求行(request line):协议类型、路径、请求方式。
② 消息头(header):请求数据的描述信息。
③ 实体内容(body):浏览器向服务器发送的数据。
(2)响应数据
① 状态行(status line):协议类型、状态。
② 消息头(header):相应数据的描述信息。
③ 实体内容(body):服务器向浏览器发送的数据。
4.Servlet处理HTTP协议
(1)通信:浏览器和服务器已经实现了该通信过程,实际上他们内部都有通信组件撞门处理通信事宜。
(2)数据:服务器通过Servlet处理数据,service(HttpServletRequest,HttpServletResponse)方法处理数据。
5.以浏览器视角看待:
![Servlet学习笔记(一) - 無痕剑 - 無痕剑的博客 Servlet学习笔记(一) - 無痕剑 - 無痕剑的博客](http://img0.ph.126.net/UD3teM-xIF3V6HF1gD-tJQ==/4850095323802032855.png)
七、URL和URI:URI包含URL。
八、请求方式
1.浏览器向服务器发送请求及传递数据的方式。
2.GET
(1)采用URL传参,浏览器会将参数加在URL后面传递给服务器。url?code=nihao&pwd=123345&sex=M&interest=basketball
(2)参数在传递过程中可见,隐私性差。
(3)URL大小有限制,传递数据受限。
3.POST
(1)采用实体内容传参。
(2)参数在传递过程中不可见。
(3)实体内容大小没有限制。
4.使用场景
(1)表单、超链接发出的请求、地址栏直接输入的地址默认使用GET请求传参。
(2)向服务器获取数据时,使用GET请求。
(3)向服务器提交数据时,使用POST请求。
5.乱码问题
(1)产生原因:编码和解码不一致。
(2)GET请求解决方案(POST请求也可以使用)
① 修改apache-tomcat/conf/server.xml中的URIEncoding=”utf-8”。
② 让Servlet接收乱码,获取到参数后,使用ISO8859-1将String还原成byte,再将byte用utf-8转换成String进行处理。
(3)POST请求解决方案
① 在获取数据前,使用request的setCharacterEncoding("utf-8")方法,将实体内容按照utf-8方式解码。这样获取到的实体内容就是utf-8解码的数据了。
② 在发送数据(响应)前,使用Response的setCharacterEncoding("utf-8")和setContentType("text/html;charset=utf-8")方法,将发送数据格式转换为utf-8,并告诉浏览器,解码方式为utf-8。setCharacterEncoding("utf-8")方法也可以不写,省略时默认以setContentType("text/html;charset=utf-8")方法所带的解码方式来设置发送数据格式。
九、满足如下规定的类,叫做JavaBean:
1.必须有包
2.有默认构造器
3.实现序列化接口
4.通常有get/set方法
十、重定向
十一、Servlet容器处理资源访问请求路径
通过将请求资源路径中的具体资源名(/域名/部署名/具体资源名)与web.xml文件中的<url-pattern> 标签中的内容进行匹配,严格匹配后找到对应资源并执行。在<url-pattern>标签中输入完整的字符,则为精确匹配。输入*号表示通配符匹配,*号表示0个或多个字符,*.someting表示匹配到以.someting结尾的资源,前面不加/号。如:
<url-pattern>*.duang</url-pattern> 具体资源名以.duang结尾
<url-pattern>/*</url-pattern> 任意资源名
十二、Servlet生命周期
启动Tomcat(startup),就会new一个Servlet对象,new一个ServletConfig对象,再将ServletConfig对象传入init方法,初始化Servlet对象。初始化完成后,调用service方法是用该Servlet对象。是用完成后可以shundown调用destroy方法销毁该Servlet对象。
一个类型的Servlet只能创建、初始化、销毁一次,是一个单例,但是处理和请求的方法可以多次调用。
默认情况下,在首次访问Tomcat时创建、初始化Servlet,也可以改为在启动Tomcat时同一创建、初始化Servlet。
1.实例化:默认是在首次访问时实例化Servlet,也可以在web.xml文件中的<servlet>标签里增加<load-on-startup>标签,标签中的数字为各个Servlet对象的加载顺序。
2.初始化:Tomcat在启动后会创建Servlet,然后会创建ServletConfig,并自动调用config的API读取web.xml中为此Servlet预制的数据,最后再调用init()方法,并传入config。
3.就绪
4.销毁
![Servlet学习笔记(一) - 無痕剑 - 無痕剑的博客 Servlet学习笔记(一) - 無痕剑 - 無痕剑的博客](http://img1.ph.126.net/Zwnr0iVqIvtG-t7BzCbmow==/3749528164863339748.png)
十三、Servlet核心接口与类
![Servlet学习笔记(一) - 無痕剑 - 無痕剑的博客 Servlet学习笔记(一) - 無痕剑 - 無痕剑的博客](http://img0.ph.126.net/Iq2PtblqRbon8Puc2YUAAQ==/6598119800321838672.png)
十四、ServletContext--伺服上下文、环境
1.可以给内部的个体提供共享资源。
2.是Servlet共有的环境。
3.其数据可以被所有的Servlet公用。
4.ServletContext与Servlet是一对多的关系。