servlet学习笔记

来源:互联网 发布:软件开发售后服务 编辑:程序博客网 时间:2024/05/21 12:41

1、servlet(服务器端编程)而脚本程序运行在客户端(浏览器端)
2、常见的web服务器
iis  apache  tomcat(免费的最好用的) jboss  weblogic
3、动态网页技术
cgi  asp  php(lamp 免费 linux+apache+mysql+php) jsp
4、区分 web服务器 应用服务器  jsp/servlet容器
web服务器 apache(静态页面)
应用服务器 iis(应用程序可以运行)
jsp/servlet容器tomcat(运行jsp servlet)

tomcat下载
windows下使用  start.bat  shutdown.bat
5、需要修改的地方
配置tomcat   context  reloadable=true   userconfig
(config  server.xml user.xml)

6、http协议(超文本传输协议) 以明文方式发送数据 不安全的方式  安全使用https协议
用于从www服务器传输超文本到本地浏览器的传输协议
http协议是以tcp/ip为基础的高层协议
现在广泛使用http1.1

7、servlet
servlet是服务器端运行的程序
用于完成b/s架构下客户端请求的响应处理
常见的servlet容器tomcat  jetty

8、webapp的概念web application
满足sun的java web application在项目文件夹下必须存在:WEB-INF文件夹web.xml+classes文件夹+lib文件夹(注意大小写 )

继承httpservlet  重写doget()  dopost()方法
web.xml里面配置servlet classes文件夹下
防止servlet编译好的class文件urlmapping对应的相对地址,相对于项目根路径

response.getWriter();

地址栏中敲的时候分大小写(tomcat)weblogic貌似不区分大小写

路径问题

servlet生命周期
加载 classloader --实例化new --初始化init --处理请求doget  dopost-- 退出服务destory
整个过程在服务器端只存在一个servlet对象
第一次客户端请求的时候new一个servlet对象 后调用init方法初始化(也是只调用这一次) 以后调用service方法即doget dopost直到退出,或者重新加载时调用destory方法销毁servlet对象 关闭资源
tomcat中有一个线程池 里面存在很多线程对象,客户端请求时会分配一个线程去调用那个唯一的servlet对象的service方法
下例展示servlet生命周期
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class TestServletLifeCycle extends HttpServlet {

 /**
  * Constructor of the object.
  */
 public TestServletLifeCycle() {
  System.out.println("Constructor");
 }

 /**
  * Destruction of the servlet. <br>
  */
 public void destroy() {
  System.out.println("destroy");
 }

 /**
  * The doPost method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to post.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  System.out.println("service");
 }

 /**
  * Initialization of the servlet. <br>
  *
  * @throws ServletException if an error occurs
  */
 public void init() throws ServletException {
  System.out.println("init");
 }

}
每次刷新都只会调用service方法(体现多线程)只有重新加载或者关闭才调用destory

servlet有两个init方法
一个带参数 一个不带参数
带参数servletconfig的主要是在web.xml中添加init-param

 <form action="ThreeParams" method="post">
 

 9、cookie
 http协议是无连接的协议
 服务器端可以向客户端写内容 但是内容必须是文本内容,长度有限,客户端可以阻止服务器端的写入
 cookie分为两种  属于窗口/子窗口,存在于内存中,窗口一旦关闭就消失,不设置生命周期
 属于文本的 存在于文本中即cookie文件夹中 需要设置生命周期,即使窗口关闭若没有到周期还能访问
 一个servlet/jsp设置的cookie能够被同一个路径下面或者子路径下面的servlet/jsp读到 
 路径=url   路径!=真实文件路径
      设置cookie
   Cookie cookie = new Cookie("Session-cookie-"+i, "cookie-value-s"+i);
   response.addCookie(cookie);
   
   cookie = new Cookie("P-cookie-"+i, "cookie-value-s"+i);
   cookie.setMaxAge(3600);
   response.addCookie(cookie);
   
   获取cookie
   Cookie [] cookies = request.getCookies();
    for(int i=0;i<cookies.length;i++) {
     out.println((String)cookies[i].getName());
     out.println((String)cookies[i].getValue());
    }
 
 
 session  解决http协议的无连接性
 cookie采用的策略是服务器端向客户端写入cookie 但是客户端可以禁用cookie
 因此采用session编程
 服务器端创建session 并且把sessionid通过cookie记录到客户端cookie里 同事服务器端也有一个sessionid
 session不同于cookie 不存在路径问题,只要是同一个窗口就可以访问到同一个session对象,
 cookie被禁用后sessionid无法写入cookie服务器端只能每次新建一个新的session对象,为解决此问题可以采用url重写的方法
 response.encodURL(request.getRequestURL.toString())这样在禁用cookie之后可以在url后面加上没有写到cookie的sessionid
 
 session是服务器端的一小块内存 与客户端的窗口对应 客户端和服务器有对应的sessionid
 客户端向服务器端发送sessionid的时候有两种方式cookie(内存cookie)
 重写url  response.encodURL(request.getRequestURL.toString())
 如果禁用cookie就不能使用依赖cookie的session  如果想安全使用session,不论是否禁用cookie只能采用url重写的方式增加编码负担,因此很多网站要求打开cookie
 
 
 servletcontext  servlet上下文   servlet不能单独运行必须放到容器中才能运行
 servlet与tomcat是怎么打交道的呢? 是通过servletcontext

原创粉丝点击