servlet初级学习

来源:互联网 发布:农村淘宝官网招蓦 编辑:程序博客网 时间:2024/04/29 16:54
Servlet映射里url有两种路径
1 精确路径: /face
2 模糊路径: /*
*.do
/icate/*
以/或者*开头,没有两者结合/icate/*.do这样的格式
如果有多个形式匹配,遵循2个原则
1 匹配度高的优先
2 *.do这样的格式优先级最低!

servlet的缺省路径(<url-pattern>/<url-pattern)是在tomcat服务器内置的一个路径。

该路径对应的是一个DefaultServlet(缺省Servlet)。这个缺省的Servlet的作业是用于解析web应用的静态资源文件

Url:读取文件顺序

1 到当前工程应用下的web.xml文件查找是否有匹配的url-pattern
2 如果没有匹配的url-pattern,则交给tomcat的内置的DefaultServlet处理
3 DefaultServlet程序到工程应用的根目录下查找是否存在一个名称为index.html匹配的静态文件
4 如果找到该文件,则读取该文件内容,返回给浏览器
5 如果找不到该文件,则返回404错误页面
结论:先找动态资源,再找静态资源


生命周期:

Servlet程序的生命周期由tomcat服务器控制的
构造方法:创建servlet对象的时候调用。第一次访问servlet的时候创建servlet对象
只调用1次,证明servlet对象再tomcat是单实例的
init方法:创建完servlet对象的时候调用
service:每次发出请求时调用,调用n次
destroy:习奥会servlet对象的时候调用。停止服务或者重启部署web应用时销毁servlet对象
只调用1次


Servlet自动加载:数字越大,优先级越低

<servlet><servlet-name></servlet-name><servlet-class></servlet-class><load-on-startup>0</load-on-startup></servlet>

有参数的init方法
该方法是servlet的生命周期方法,一定会被tomcat服务器调用
无参数的init方法
该方法是servlet的编写初始化代码的方法,是Sun公司设计出来专门给开发者进行覆盖,然后在里面编写servlet的初始逻辑代码的方法


servlet在tomcat服务器中是单实例多线程,只生成一个对象,多用户调用产生多个线程,
共享全局代码块可能产生线程安全问题需要加锁


ServletConfig对象:主要是用于加载servlet的初始化参数
创建时机:在创建完servlet对象之后,在调用init对象之前创建
得到对象:
1  直接从有参的init方法中得到,通过servlet里面定义全局变量得到
配置信息放在<servlet>标签里面
<init-param>
<param-name>patth</param-name>
<param-value>e:/a.txt</param-value>
</init-param>
2  this.getServletConfig().getInitParameter("patth");

方法: 
String getinitParameter(String name)根据参数名称获取参数值
Enumeration getinitParameterNames() 获取所有参数
getServletContext() 得到servlet上下文对象
String getServletName()  得到servlet的名称


ServletContext:Servlet的上下文对象,表示一个当前的web应用环境
方法:
String getContextPath()
得到当前web应用路径:部署到tomcat服务器上运行的web应用名称,就是项目名称
如果项目名称需要修改,除了修改MyEclipse里的项目名称,还需要修改项目Properties里面MyEclipse的Web下的WebContext-root目录
这是部署在tomcat下的目录
重定向用的比较多:response.sendRedirect(this.getContextPath()+"/index.html");

String getInitParameter(String name)
Enumeration getInitParameterNames()
得到web应用的2种初始化参数
配置,全局:
<context-param>
<param-name>AAAA</param-name>
<param-value>A is Null</param-value>
</context-param>
得到:
this.getServletContext().getInitParameter("AAAA");

setAttribute(String name,Object object)
Object getAttrbute(String name)
removeAttribute(String name)
和域对象有关的三个方法,域对象:用于保存数据,获取数据,可以在不同的动态资源之间共享数据
this.getServletContext().setAttribute("name","eric");只要没有删除会一直都在
其他域对象:
HttpServletRequest域对象-request
ServletContext域对象
HttpSession域对象-session
PageContext域对象

RequestDispatcher getRequestDispatcher(String path)
用于转发:
this.getServletContext.getRequestDispatcher("/index.html").forward(request,response);
重定向:
response.sendRedirect("/day10/index.html");
区别:
1 转发地址不变,重定向地址变成重定向地址
2 转发不能转发到当前web应用以外的资源,重定向可以
3 转发可以把数据保存到request域对象中,重定向不能



String getRealPath(String path)
InputStream getResourcaSsTREAM(String path)
得到web应用的资源文件




一个ServletConfig对象对应一个<Servlet></Servlet>
一个ServletContext对象相当于整个xml文件,全局的


创建时机:加载web应用时创建
得到对象:从ServletConfig对象的getServletContext方法得到
ServletContext context=config.getServletContext()





0 0
原创粉丝点击