Servlet
●Servlet的service方法结束后,Servlet引擎会检查getOutputStream和getWriter方法返回的输出流对象,是否已经调用close被关闭,如果没有,则Servlet引擎将调用close关闭输出流对象。
● 同一个response对象,getOutputStream和getWriter不能同时使用
当Servlet出现转发的时候,由于response对象不变,因此原来的Servlet和转发后的Servlet中,使用的方法必须一致。
例如test1中,使用了getOutputStream,同时又使用了this.getServletContext().getRequestDispatcher("/test2").forward(request, response);
在test2中,就不能使用getWriter方法。
而使用重定向的方式,则可以。因为是两个response对象
● Request、Response
web服务器每次收到客户端http请求,都会创建一个代表请求的Request对象,和代表响应的Response对象。
● ServletContext
代表当前web应用,被各Servlet共享。
ServletConfig.getServletContext方法获得该对象,或直接this.getServletContext()
四个域:context、request、session、page
为整个应用配置参数:
<context-param>
<param-name>name</param-name>
<param-value>Context</param-value>
</context-param>
转发Servlet请求:
RequestDispatcher rDispatcher = this.getServletContext().getRequestDispatcher("/index.jsp");
rDispatcher.forward(request, response);
● Myeclipse添加Servlet源码包
https://blog.csdn.net/interest1_wyt/article/details/78589627
● ServletConfig
Servlet内置对象:Request,Response,ServletConfig,ServletContext,session,cookie。
ServletConfig为Servlet配置参数。在web.xml中添加(servlet元素内):
<init-param>
<param-name>name</param-name>
<param-value>rao</param-value>
</init-param>
配置的参数会封装到ServletConfig对象中,然后传给Servlet。
传递的时间和地点是,在初始换的时刻,在Servlet的init方法中
使用this.getServletConfig(),直接获得待ServletConfig对象
● 修改Servlet不重启Tomcat
tomcat安装目录下的conf/context.xml文件,在Context节点上添加reloadable=”true”
● 修改Servlet模板
myeclipse安装目录->plugins->com.genuitec.eclipse.wizards_13.0.0.me201612231634.jar->templetes->servlet.java
● 使用Myeclipse开发Servlet
将Tomcat集成到Myeclipse:windows->preferences->Servers->runtime environments,选择Tomcat服务器;
发布应用到服务器:
● 提供动态web资源
只需写一个java类,实现Servlet接口.
将Servlet api添加到classpath:D:\Softwares\Tomcat8\apache-tomcat-8.5.37\lib\servlet-api.jar
编译;
在WEB-INF\web.xml添加下面几行(Servlet名为test):
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>servlet.firstServlet.test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
● 配置虚拟主机
在Engine中添加Host元素:
<Host name="www.sina.com" appBase="E:\Program\sina.com"></Host>
在conf\Catalina目录下新建www.sina.com目录。
这个网站(虚拟主机)下,可能有多个应用,例如mail、news。
当创建新的应用时,就在conf\Catalina\www.sina.com目录下新建对应的xml文件,实现访问路径到虚拟目录的映射,例如mail.xml,news.xml
在E:\Program\sina.com\news.xml中添加:<Context docBase="E:\Program\sina.com\news" />
访问:http://www.sina.com:8080/news/home.html
● web应用的目录结构
● 配置web应用于虚拟目录的映射
1. 在server.xml中的Host元素中添加:
<Context path="HelloServlet" docBase="E:\Program\Servlet\HelloServlet" />
其中path为对完访问URL路径,docBase为应用目录
重启web服务器
2.在conf/context.xml文件中,添加
特点:被所有应用共享
3.在conf\Catalina\localhost下,新建任意一个xml问题件,例如a.xml,在该文件名a,就是该应用的对外访问路径(相当于1中的path),向该a.xml中添加:
<Context docBase="E:\Program\Servlet\HelloServlet" />
当该xml名为ROOT.xml时,为缺省的应用,即访问该应用下的文件时,不需要输入该应用的对外访问路径,例如:http://localhost:8080,或http://localhost:8080/2.html
特点:不用重启服务站
4.当应用,例如demo,被放置到Tomcat服务器下的webapps目录下时,服务器会自动将该应用映射到虚拟目录,对应的访问路径就是该应用的目录名,demo
5.在应用的WEB-INF目录下建web.xml,控制着整个web应用
添加下面的内容,可配置默认首页:
<welcome-file-list>
<welcome-file>1.html</welcome-file>
</welcome-file-list>