既程序员可以操纵的阶段
实例化>初始化>服务>销毁
特点:单例多线程
1.一个servlet实例只会执行一次无参构造器和init()方法 并在第一次运行时访问
2.用户每提交一次对当前servlet的请,就会执行一次servlet方法
3.一个实例servlet方法之后执行一次destory方法销毁 结束
4.默认情况下 servlet在web容器启动时不会被实例化
当你定义一个servlet时候记得在xml添加servlet配置对象
写在WEB—INF中的xml文件中
<servlet>//servlet config 配置对象 <servlet-name>servlettext</servlet-name> //<load-on-startup>1</load-on-startup>(1)大于0的数就行 有层次关系 数越小越优先 <servlet-class>com.one.servlettext</servlet-class> </servlet> <servlet-mapping> <servlet-name>servlettext</servlet-name> <url-pattern>/servlettext</url-pattern> </servlet-mapping>添加过后这个servlet才能被使用 还有 如果你想在加载服务器的同时运行servlet的话 执行以下操作
各种方法属性 getservletContext()//获取这个对象 getservletName() //获取servlet的名称 getInitparameterNames() //获取所有初始化参数 操作方法://Enumeration是枚举 Enumeration<String> names = config.getInitparameterNames()//获取 //遍历 while(names.hasMoreElements()){ //获取当前的值 String name = names.nextElement(); //获取指定参数的值 String value = config.getInitparameter(name); System.out.println(name+value)//namebjpowernode adressbj }//初始化参数 需要自己在xml文件中自己定义内容参数 xml里面写 <init-param> <param-name>name</param-name> <param-value>bjpowernode</param-value> </init-param> <init-param> <param-name>adress</param-name> <param-value>bj</param-value> </init-param>//写在servlet里边所有的文件共享域属性(在一个作用域)
getcontextpath()获取作用域应用的名称(相对路径吧) getrealpath()获取绝对路径从盘符开始 setAttribute(“key”,“value”)设置域内容 getattribute(key)获取域值 removeattribute(key)删除域值
1.精确路径模式 可以添加精确的路劲 比如:come——>/a/b/c/come 这其中的abc都不存在 是你自己写进去的 也可以吧/a/b/c/come看做一个整体调用路径 2.通配符路径模式:
比如:/a/ *代表你请求路径只有携带了/a的景区路径 部分才可以被当做当前servlet来处理 比如:/a/asd 或者/a/b/asd /a后面写多少都可以 因为你/ *了 3.全路径模式:使用(/ 或者/)调用 例如:‘’/a/ * 这个可以是任意的字符 只要前面写了/a后边不论加多少路径都可以 /a/b/axljalsd和/a/axljalsd结果一样 / 的方法和/ *用法一致 / *和/的区别 1./ *拦截所有的资源包括动态和静态 jsp/HTML 2./ 不会拦截动态的 jsp 4.后缀名拦截 xxx.do 只要是.do结尾全部拦截 不管前面有多少东西 例如:/a/b.do 或者 b.do 注意:后缀名模式和通配符模式不能连用 / *.do是不可以的
原则:1.优先路径匹配: 如果你的路径和两个servlet路径都符合那么运行第一个位置 2.精确路径优先原则 所有路径模式中的大哥 路径精确地直接执行 不论是否在第一位置 3.最长路劲优先原则 类似于2 /sum/ *和/sum/a/b 执行后者PrintWriter out=response.getwriter() out.print/write/append();
输出流 在浏览器中显示你想显示的结果 直接out.方式添加你想假的内容
//获取标准输出流 PrintWriter out = response.getWriter(); //三种输出方式 out.append("123"); out.append("456"); out.print("abc"); out.println("******"); out.write("张三"); //关闭输出流 out.close();相对路径和绝对路径
资源路径和资源名称
路径中最后一个斜杠之前的全是路径 最后一个为资源名称
前台路径与后台路径
前台:html之类的前端路径 作用是查找
后台:java或者xml配置文件 作用是标识
绝对路径=相对路径+参照路径
使用浏览器默认将路径转化为绝对路径
相对路径类型参照路径相对路径转化为绝对路径的完成者前台路径当前web服务器的根路径http://localhost:8080浏览器后台路径当前web应用的根路径http://localhost:8080/paramyweb服务器以路径名开头当前访问资源的路径浏览器/服务器注意:当你填写路径时候 在路径前添加一个 / 和没有斜杠直接写路径是两码事 当你二者都能满足要求 优先选择加 /
因为加斜杠的路径不会改变时是写死的路径 不加的话可能会发生改变
特例:后台路径重定向时候不能用后台路径 这是因为sendRedirect方法的本质决定的 这个方法可以完成项目资源的跳转 也可以跳转到其他资源所以这个后台路径的参照路径为当前web服务器的根
推荐写法:动态获取
response.sendRedirect(request.getConrtextPath()+"/otherServlet")从大到小 servletContext>HTTPSession>HTTPSessionRequest
servletcontext 既 application,置入其中的域属性是整个应用范围的 可以完成跨会话共享数据 HTTPSession 置入其中的域属性是会话范围的 可以完成跨请求共享数据 HTTPSessionRequest 置入其中的域属性是请求范围的 可以完成跨servlet共享数据 但这些servlet必须在用一个请求中
对于这三个域属性空间使用原则是 在可以保证功能需求的前提下 优先使用小范围大的 这样不仅可以节省服务器内存 还可以保证数据的安全性