基础知识回顾第一章servlet的学习和理解

前言:关于servlet相信学过java的都不会陌生,我最近又把这些基础知识整理一遍,便于自已能更好的理解ssm或者ssh,下面开始

1:Servlet接口

servlet有5个方法下面分别简单的介绍每个方法的作用

1.1:public void init(ServletConfig config)

在servlet被实例化以后,servlet容器会调用init方法来初始化该对象,这个方法主要是完成在请求前的一些初始化工作,比喻调用数据库连接,实例化对象等

1.2:public void service(ServletRequest req, ServletResponse res)

这个方法是一个核心的方法,我们主要的操作就在这个方法中进行,在收到客户端请求以后然后进行业务的处理,把处理的信息响应给客户端

1.3:public void destroy()

这个方法是当servlet实例被移除的时候会调用,释放servlet中的资源,比喻关闭数据库连接等可以理解为析构函数

1.4:public String getServletInfo()

这个方法主要是用于返回Servlet的描述信息,这些信息可以是Servlet的作者,版本、版权信息等

1.5:public ServletConfig getServletConfig()

主要返回容器调用init以后传给servlet对象的ServletConfig对象

5个方法的作用说完了现在看下代码

 1 public class HelloWorldServlet implements Servlet{
 2
 3     private ServletConfig servletConfig;
 4     //private ServletInfo
 5     public void init(ServletConfig config) throws ServletException {
 6         this.servletConfig=config;
 7     }
 8
 9     public ServletConfig getServletConfig() {
10         return servletConfig;
11     }
12
13     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
14         String initReleName=this.servletConfig.getInitParameter("realName");
15         String servletName=this.servletConfig.getServletName();
16         String username=req.getParameter("username");
17
18         res.setContentType("text/html;charset=gb2312");//避免中文乱码
19         //得到PrintWriter对象,
20         PrintWriter out=res.getWriter();
21         //向客户端发送数据
22         out.println("Hello World " +username+"<br/>");
23         out.println("servlet名称:"+servletName+"<br/>");
24         out.println("内联的真实名称:"+initReleName+"<br/>");
25         //关闭流
26         out.close();
27     }
28
29     /**
30      *用于返回Servlet的描述信息,这些信息可以是Servlet的作者,版本、版权信息等
31      */
32     public String getServletInfo() {
33         String str    ="zhangsan";
34         return str;
35     }
36
37     public void destroy() {
38         // TODO Auto-generated method stub
39     }
40 }

我们在来配置一个web.xml

 1 <!DOCTYPE web-app PUBLIC
 2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 <web-app>
 5     <display-name>myservlet</display-name>
 6     <description>这是我的第一个servlet</description>
 7     <servlet>
 8         <servlet-name>HelloWorldServlet</servlet-name>
 9         <servlet-class>com.lp.servlet.HelloWorldServlet</servlet-class>
10         <init-param>
11             <param-name>realName</param-name>
12             <param-value>张三</param-value>
13         </init-param>
14     </servlet>
15     <servlet-mapping>
16         <servlet-name>HelloWorldServlet</servlet-name>
17         <url-pattern>/helloworld</url-pattern>
18     </servlet-mapping>
19 </web-app>

web.xml

注释1:xml中的Servlet第一个表示Servlet-name表示名称,为了和后面servlet-mapping中的Servlet-name进行关联,然后在影射的时候就可以找到需要的Servlet类了

在浏览器中输入http://localhost:8080/servlet-test/helloworld?username=lp然后我们可以看到效果

2:Servlet的生命周期

我用一幅图来表示

时间: 2024-10-11 01:08:42

基础知识回顾第一章servlet的学习和理解的相关文章

javaweb回顾第一篇servlet的学习和理解

前言:关于servlet相信学过java的都不会陌生,我最近又把这些基础知识整理一遍,便于自已能更好的理解ssm或者ssh,下面开始 1:Servlet接口 servlet有5个方法下面分别简单的介绍每个方法的作用 1.1:public void init(ServletConfig config) 在servlet被实例化以后,servlet容器会调用init方法来初始化该对象,这个方法主要是完成在请求前的一些初始化工作,比喻调用数据库连接,实例化对象等 1.2:public void ser

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(四)--java多线程安全问题(锁)

上一节售票系统中我们发现,打印出了错票,0,-1,出现了多线程安全问题.我们分析为什么会发生多线程安全问题? 看下面线程的主要代码: @Override public void run() { // TODO Auto-generated method stub while(true){ if(ticket > 0){//当线程0被调起的时候,当执行到这条判断语句的时候,线程1被调起抢了CPU资源,线程0进入冻结状态. try { Thread.sleep(100);//中断当前活跃的线程,或者

java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:

总结:实现Runnable接口比继承Thread类更有优势: 1.因为java只能单继承,实现Runnable接口可以避免单继承的局限性 2.继承Thread类,多个线程不能处理或者共享同一个资源,但是实现Runnable接口可以处理同一个资源. 下面我们做个测试:验证下.车站的售票系统售票的例子,车站的各个售票口相当于各个线程,我们先使用第一种方法几继承Thread类的方式实现: 代码如下: package com.lp.ecjtu.Thread; /** * * @author Admini

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int

java基础知识回顾之java Thread类学习(把)--java.util.concurrent.locks(JDK1.5)与synchronized异同讲解

看API文档介绍几个方法:  JDK1.5中提供了多线程的升级解决方案: 特点: 1.将同步synchronized显示的替换成Lock                    2.接口Condition:Condition替代了Object监视器方法(wait.notify.notifyAll),分别替换成了await(),signal() (唤醒一个等待线               程),signalAll() 唤醒多个线程.一个锁可以绑定多个condition对象,可以对应好几组wait,

java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)

死锁:是两个或者两个以上的线程被无限的阻塞,线程之间互相等待所需资源. 线程死锁产生的条件: 当两个线程相互调用Join()方法. 当两个线程使用嵌套的同步代码块的时候,一个线程占用了另一个线程的锁,互相等待阻塞,就有可能产生死锁. 下面看代码: 代码1:死锁的案例 package com.lp.ecjtu.Thread; /* 死锁:常见情景之一:同步的嵌套. */ class Ticket implements Runnable { private int num = 100; Object