servlet新手必会

servlet新手必会

servlet生命周期

既程序员可以操纵的阶段

​ 实例化>初始化>服务>销毁

特点:单例多线程

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)删除域值

xml中url-patten的多种写法

​ 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必须在用一个请求中

对于这三个域属性空间使用原则是 在可以保证功能需求的前提下 优先使用小范围大的 这样不仅可以节省服务器内存 还可以保证数据的安全性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值