Servlet 相关知识
一、 servlet 的定义
1.Servlet 是接受来自网络的请求( form 表单,以及其他的请求),并对不同请求作出不同的响应。
2.Servlet 是一个位于服务器端的独立于平台和协议的Java 应用程序, 可以生成动态的web 页面, 也可以像jsp 一样直接输出信息。
3. Servlet 是基于 Http 协议运行在 web 容器中, web 容器可以控制 Servlet 对象的生命周期,控制请求由 Servlet 对象处理。
4.Servlet 必须在 web.xml 文件中注册服务器启动的时候 , 可以根据这些配置来加载 Servlet 类。
二、 tomcat
1 . web 服务器,常用的 web 服务器有 Tomcat , Jboss 等,我们所用到的 Tomcat 是一个开源的服务器, Tomcat 是一个用 java 语言编写的 web 服务器 ,所以需要有相应的 java 运行环境,也就是 JVM ,还要配置 tomcat 的具体路径。
2. 配置环境变量: CATALINA_HOME=/XXXX/XXX
3.tomcat 是否启动:地址栏输入 ttp://localhost:8080/ 或 http://127.0.0.1:8080/ 可以访问到 tomcat 的主页就是启动成功了。
4. 要想停止 tomcat 服务器要使用 shutdown.sh ( windows 中使用 shutdown.bat ),如果直接关闭启动窗口,就会造成 8080 端口占用错误,这时可以在使用 shutdown.sh 关闭一下服务器。
5. tomcat 可以识别的资源只有在 webapps 文件夹下, webapps 也就是 web 应用文件夹, webapps 下的文件夹这些文件夹中存放的就是 web 应用。
6.web 应用是有格式规范的:
7. 在 tomcat 服务器中,访问应用下的资源可以在端口号后加上 web 应用文件夹的名字 就可以看到资源 http://localhost:8080/xxxxx/xxxx.html , WEB-INF 文件夹中的资源是受保护的,不能够通过网络访问到。
三、 Servlet 的作用
1.Servlet 主要用来在控制层 结合mvc 模式做控制转发.
2.Servlet 的应用:
表单是HTML 中使用最广泛的传递信息的手段,Servlet 使用HttpServlet 类中的方法与表单进行交互 ,HttpServer 把客户请求正确的映射到相应的函数上:
<form method="get 或 post" action=" url-pattern">
......
</form>
a) doGet 用于处理 GET 请求
b) doPost 用于处理 POST 请求
四、 Servlet 中请求响应过程
五、 Servlet 的调用过程
1. 用户通过浏览器向 web 服务器发送请求
http:// 服务器 ip 地址:端口号 /web 应用名
2. 服务器为用户定位所需要的资源:
静态资源:
XX.html 静态页面,读取文件内容并发送到客户端
动态资源:
1 解析 web.xml 定位 Servlet 类的名字
2 装载类( WEB-INF/classes 的类文件或 WEB-INF/lib 下的 jar 文件)
3 创建该对象的实例
Class.forName("servle 的类名 ").newInstance();
<servlet-mapping>
<servlet-name>servlet 的名字(要和 servlet 标签中的相同) </servlet-name>
<url-pattern>/ 指定 servlet 相对于应用目录的路径 </url-pattern>
</servlet-mapping>
url-parttern 的配置,这个 url 就是 Servlet 的虚拟路径
http:// 服务器 ip 地址:端口号 / 应用文件夹名 /url-pattern
六、 Servlet 的生命周期分为以下四个阶段
( 1 )创建 Servlet 对象,通过服务器反射机制创建 Servlet 对象,第一次请求时才会创建 。
( 2 )调用 Servlet 对象的 init() 方法,初始化 Servlet 的信息, init() 方法只会在创建后被调用一次
( 3 )响应请求,调用 service() 或者是 doGet() , doPost() 方法来处理请求,这些方法是运行的在多线程状态下的。
( 4 )在长时间没有被调用或者是服务器关闭时,会调用 destroy() 方法来销毁 Servlet 对象。
七、 cookie 和 session 会话
Cookie : Cookie 是服务器发送给浏览器的纯文本信息,用户以后访问同一个 Web 服务器时浏览器会把它们原样发送给服务器。通过让服务器读取它原先保存到客户端的信息,网站能够为浏览者提供一系列的方便 .( 例如不用经常写登陆信息 )
Session :session 总是放在服务器上的,每个客户会跟一个sessionID (为了标识他是那个客户端的)对应。因为HTTP 是无连接的,如何区分同一个客户的多次请求呢,就需要客户端每次发请求的时候,发送相应的sessionID 。
Cookie 和 session 的比较:
1 、存在的位置:
cookie 保存在客户端, session 保存在服务器端
2 、安全性:
cookie 的安全性比 session 弱
3 、网络传输量
cookie 通过网络在客户端和服务器端传输 session ID 。
重写URL
把 session ID 加到一个连接可以使用一对方法来简化:response.encodeURL() 使 URL 包含 session ID ,如果你需要使用重定向,可以使用 response.encodeRedirectURL () 来对 URL 进行编码。
"<a href="+resp.encodeURL(req.getRequestURL().toString())+">test</a > "// 重写 URL : encodeURL(), 如果浏览器的 cookie 没有禁掉,则这句话没有对 req.getRequestURL().toString() 作任何处理,还是保持这个字符串的原样;如果 cookie 被禁掉了 , 则在字符串的后面加上一字符串 " ; "+session ID
encodeURL () 及 encodeRedirectedURL () 方法首先判断 cookies 是否被浏览器支持;如果支持,则参数 URL 被原样返回,session ID 将通过 cookies 来维持。