TC608——Java中的Servlet编程问答

来源:互联网 发布:jquery popup加载数据 编辑:程序博客网 时间:2024/04/27 18:36

Servlet整理

author:lxy1.什么是Servlet?运行在Servlet容器中,由服务器服务器直接解析运行的Java应用小程序,2.怎样创建一个Servlet实质:通过继承或实现接口类并重写方法。步骤:[1].创建一个类,继承HttpServlet(实现Servlet接口 或 继承GenericServlet类也可以) [2].重写方法;doGet、doPost等(接口中需要将所有方法重写,但是service方法是处理请求) [3].在web.xml文件中配置
3.Servlet的生命周期:大致过程:[1].创建Servlet对象,并调用init()方法对web进行资源初始化[2].通过service方法来处理请求[3].通过destroy来销毁Servlet细节:[1].当创建一个Servlet后,第一次访问web时会创建一个Servlet对象,并调用init一次方法,同时开启一个线程来调用service方法,init只调用一次[2].当第二次访问时再开启一个线程来调用service方法处理请求[3].Servlet常驻内存,一般情况只会创建一次。[4].如果在Servlet中创建了成员变量要处理线程安全,开发中尽量避免创建
4.Servlet接口和HttpServlet类中的 doGet和doPost 方法的关系?[1].一个Servlet被访问时,默认service方法处理请求,[2].service方法在Servlet中定义,但是在HttpServlet中复写具体内容[3].在HttpServlet 的service方法中,会根据请求方法调用不同的方法[4].根据多态,在调用doGet 、doPost时,调用的是自己Servlet的方法 补充:模板设计模式: public abstract class Car {public abstract void fire(); // 打火public abstract void run();// 行驶public abstract void stop();// 停止//模板public void drive() {fire();run();stop();} } //继承Car接口的Bmw类 public class Bmw extends Car {@Overridepublic void fire() {System.out.println("bmw fire");}@Overridepublic void run() {System.out.println("bmw run");}@Overridepublic void stop() {System.out.println("bmw stop");} } //测试 public class Test {public static void main(String[] args) {Car c = new Bmw();c.drive();} }
5.认识TomCat中文件夹:|-bin存放启动、关闭等服务器程序|-conf存放配置信息|-lib存放jar包|-logs存放日志文件|-temp存放临时文件|-webapps存放部署应用,内部有几个文件夹就有几个应用 |-WEB-INF |-classes Java类 |-lib Java类运行所需jar包 |-web.xml wab应用的配置文件 |-images图片等媒体文件|-work服务器工作目录
6.Servlet的自动加载:[1].通过在web.xml文件<servlet>标签中加上<load-on-startup>2</load-on-startup> 让Servlet跟随服务器启动而创建[2].作用:加载资源[3].标签中取值1--10,数值小优先级高,优先级相同按照配置顺序加载。
7.Servlet配置中的url-pattern:[1].一个Servlet 是否可以映射到多个路径?可以[2].url-pattern 的写法(有无*)a.完全匹配要求必须以"/"开始b.目录匹配:以"/"开始以 * 结尾c.扩展名匹配:以*.xxx结尾以上三种写法优先级:a > b > c;
8.web开发中的路径问题:[1].浏览器访问服务器有几种方式? a.浏览器地址栏输入URL b.超练级 <a href="http://www.itheima.com" >黑马</a> c.表单 <form action="...." method="post">...</form> //常用请求方式post get,除了表单可以post,其他都是get d.javascript[2].访问Servlet路径 a.绝对路径: |--带协议一般用于访问站外资源,开发不常用 <a href="http://www.baidu.com" >百度</a> |--不带协议 在浏览器端写一个"/",相当于是服务器的路径,后面加上工程名,再加上资源名就可以 一般用于访问站内资源,开发中常用<a href="/day7_2/demo1">demo1Servlet</a> 相当于:http://localhost:8080 b.相对路径: |-- ./XXX 同处于第二目录(工程名下)的路径 |-- ../XXX 退回上一级目录寻找目标 结论:开发中推荐使用不带协议的绝对路径 "/工程名/servlet-pattern的值"
9.Servlet接口中的init方法:[1].为什么在Servlet接口中init方法是有参数的而我们所覆写的方法没有参数?|--父类中已将init(ServletConfig config)方法重写,我们重写的方法不是接口中的方法而是其父类中定义的[2].ServletConfig是什么,有什么作用?|--ServletConfig对象代表的是Servlet的配置对象,由服务器创建,每一个Servlet都有一个自己的ServletConfig对象,不可公用|--作用:public void init(ServletConfig config) throws ServletException {this.config = config;this.init();} |---获得初始化参数当第一次访问一个Servlet时,就会创建一个ServletConfig对象,通过init方法传递到Servlet,那么我们就可以在Servlet中获取其配置信息 |---可以获得Servlet的name 获取ServletConfig对象:this.getServletConfig(); |---可以获得ServletContext对象ServletConfig的常用API: |--public String getServletName(); //用于获取Servlet名称 |--public String getInitParameter(String name); //用于获取init-parent中指定的value值 |--public Enumeration getInitParameter(String name); //用于获取所有的init-param中的name名称 |--public Servlet ServletContext getServletContext(); //用于获取一个ServletContext对象
10.关于ServletContext对象[1].ServletContext代表的是一个web应用[2].获取ServletContext对象ServletConfig。getServletConfig();[3].作用: a.获取全局初始化参数String getInitParameter(String name)EnumerAtion getInitParameterNames()在web.xml文件中可以配置 全局初始化参数<context-param><param-name>name</param-name>vparam-value>tom</param-value></context-param>此配置针对于整个web应用 b.让Servlet实现信息共享 ServletContext是一个域对象(相当于一个Map,它的作用是整个Web应用中) c.可以获取路径(资源)*-* 在web开发中,要想获取资源,必须使用绝对的磁盘路径。实例总结:1.web中访问不到MyEclipse WebRoot以外的文件,部署只有此文件中内容才会被部署进服务器
0 0
原创粉丝点击