我的java培训日记-4

原创 2007年09月25日 15:17:00
                                          传智播客java培训日记-4
1. Servlet程序详细讲解
       Servletclass文件必须放在WEB-INF/classes文件夹下
       ② 对每个单独的WEB程序的Servlet容器进行讲解。写了一个servlet实例
③用显示火车票剩余数量的例子引入产生动态网页内容的讲解,服务器送给浏览器的内容不一定非得是来自一个网页文件,而可以是程序动态创建出来的,Servlet就是这样一种程序。
④查看Servlet的使用帮助,在<Tomcat安装目录>/webapps/tomcat-docs/servletapi
⑤配置 web.xml文件的servlet元素,主要有servlet-name和servlet-class
     其中name可随意,指定servlet-class是WEB程序中WEB-INF/classes文件夹中的要加载的 .class 文件
                   配置 web.xml文件的servlet-mapping元素,主要有servlet-name和url-pattern
其中name必须与servlet的name相同,url-pattern为要映射的虚拟路径,可以是在硬盘上并不存在的文件(夹)
⑦  同一个servlet类可以在web.xml中映射成为多个名称不同的servlet容器
⑧讲解了Servlet程序的作用,在讲解Servlet接口中的方法时,顺便说明了ServletContext和ServletConfig是什么,接着分析如何写Servlet时带出了GenericServlet类的大概代码原理。
伪代码:
class xxx implements Servlet
{
       private ServletConfig config = null;
       init(ServletConfig config)
       {
              this.config = config;
       }
      
       service(ServletRequest request,ServletResponse response)
       {
              config.getServletContext();
       }
      
       ServletConfig getServletConfig()
       {
              return config;
       }
      
       destroy
       {
       }
      
       getServletInfo()
       {
              reutrn "i am "
       }
}
Java虚拟机的类装载器的加载根目录为<JAVA安装目录>/jdk1.6/jre/lib/ext
讲了Tomcat与Java虚拟机的类加载机制,大致为当运行的代码需要装载某个类时,上下文类装载器会委托它的父级类装载器来装载这个类,如果父级类装载器无法装载这个类时,上下文装载器才自己进行装载,如果它自身仍不能装载,就会产生错误,如下图…类的加载需要正确的classpath设置

             

Bootstrap
 
System
Common
Catalina
Shared
Webapp1
Webapp2
当WEB程序需要用到某个类时,类加载器先向上委托加载,,如果不能处理,就向下返回由它自己加载
                      
2.时刻想着线程安全问题,只要是多段函数访问同一个方法,多个对象的变量引用同一个目录,都有可能会出现线程安全问题
3.模板方法设计模式的一些思想
架构师将类的框架设计好后,将某部分不确定代码做成一个抽象方法,然后交由其它程序员继承这个类,并实现这个抽象方法.
Class abstract BaseServlet
{
service() throws IOException,ServletException
{
    try
    {
           doService()
    }
    catch(SqlException e)
    {
           throw new IOException(e);
    }
}
    public abstract void doSevice();
}
YourServlet extends BaseServlet
{
    public doService()
    {
           ....
    }
}
4class编译文件自动保存目录的方法
使用命令 Javac –d class文件的保存目录 XX.java
可写个批处理文件,例 a.bat,直接将JAVA源文件托至些BAT文件即可
javac –d d:/ %1
pause
5. 鲍习涛的问题
为什么加了System.out.println()后,前面用write方法写入的内容才会显示在屏幕上?
这是因为System.out是PrintStream类,PrintStream是个带缓冲的包装类,println()会自动调用System.out.flush()方法。
6. 写了一个获取ip地址和请求参数的Servlet例子程序,并注册运行。接着分析了Servlet的工作原理,以及Request和Response是接口的设计原理,很好地说明了“面向接口编程,而不要面向类编程”的思想
       例:MyWebServlet.java   我自己写的
       import javax.servlet.*;
import java.io.*;
public class MyWebServlet extends GenericServlet
{
                public void service(ServletRequest  req,ServletResponse  response) throws ServletException,IOException
            {
                 String ip = req.getRemoteHost();
                 response.getWriter().println("Your ip issss:"+ ip);
            }
}
7. 在上面的例子基础上进行扩展,讲解了Servlet的映射问题,接着演示了ServletContext和ServletConfig的应用,通过ServletConfig获得Servlet的注册名称和配置参数,通过ServletContext获得Web服务器程序的名称getServerInfo方法。Servlet运行于Web应用程序中,而每一个WEB应用程序对应一个Context元素,所以,就把Servlet运行的Web应用程序称之为ServletContext,这从名字上就可以知道其作用。一个虚拟目录就是一个Web应用程序,把某个目录单独挂到服务器上,这个目录就成了一个独立的Web应用程序,这个目录下的子目录不是独立的web应用程序。
8. 接着把Servlet注册两次,每个映射给不同的url,一个是/action/*,一个是*.html,借此说明了映射的优先级问题。
9. 接着引出了tomcat的DefaultServlet,别人都不要的请求交给它。
       关于第七和第八点的例子,张老师写的。
import javax.servlet.*;
import java.io.*;
import java.util.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet
{
       /*Enumeration getInitParameterNames()
       {
              return getServletConfig().getInitParameterNames();
       }*/
       public init(ServletConfig conf)
       {
              super.init(conf);
              init();
       }
       public init()
       {
       }
     public void doGet(HttpServletRequest req,HttpServletResponse response) throws ServletException,IOException
       {
              PrintWriter out = response.getWriter();
              ServletConfig config = getServletConfig();
              Enumeration e = /*config.*/getInitParameterNames();
              while(e.hasMoreElements())
              {
                            String name = (String)e.nextElement();
                            String value = /*config.*/getInitParameter(name);
                            out.println(name + ":" + value + "<br>");
              }
              HttpServletRequest request = (HttpServletRequest)req;
              Enumeration e2 = /*config.*/request.getHeaderNames();
              while(e2.hasMoreElements())
              {
                            String name = (String)e2.nextElement();
                            String value = /*config.*/request.getHeader(name);
                            out.println(name + ":" + value + "<br>");
              }
              String ip = req.getRemoteAddr();
              String time = new Date().toString();
              out.println(ip + ": " + time);
              out.println(req.getParameter("userid") + ": " + req.getParameter("bookid"));
              response.getWriter().println(getServletConfig().getInitParameter("corporation"));
              response.getWriter().println(getServletConfig().getServletName());
              response.getWriter().println(this.getClass().getClassLoader().getClass().getName());
              response.getWriter().println(getServletConfig().getServletContext().getServerInfo() );
}
}
10. 接着讲解了类装载器
通过对比Student类的实例对象是各个学生,强调了Class类的实例对象是各个类字节码。
Class clazz1 = Class.forName("Abc")
Class clazz2 = Class.forName("Student")
Student st = clazz2.newInstance();
一个类装载器负责从特定的位置加载和创建类字节码,应用程序中安装有多个类装载器,应用程序会尝试依次使用各个类装载器去加载某个名称的类,这个尝试使用的规则就是委托代理机制。
11. 要让多个应用程序都能装载某个Servlet,把Servlet放在哪里?
应把Servlet放在<tomcat安装目录>/common/lib中,要做成jar包放在这个文件夹中.classes文件夹放置零散的class文件。
12. 按书做了类装载器的实验,不过是把Servlet类放置到了<java安装目录>/jre/lib/ext目录中,一定要打成jar包。
13. 讲解了Servlet程序的作用,在讲解Servlet接口中的方法时,顺便说明了ServletContext和ServletConfig是什么,接着分析如何写Servlet时带出了GenericServlet类的大概代码原理。
14. 讲解了HttpServlet类
HttpServlet是GenericServlet的子类,SUN公司在HttpServlet中重写了service方法,并在这个方法中调用了另一个service方法(两个service接受的参数类型不同),,所以我们只需要根据自己的需要重写service2方法即可。
 
详细:www.itcast.cn 

黑马培训前期java基础加强学习日记一

java开发前奏、java基础。面向对象

java培训之junit4

java培训之junit4Junit主要讲三点:1. @Test 2. @Before 3. @RunWith(SpringJUnit4ClassRunner.class) @Contex...

--面向对象第一部分--java学习日记4(基础知识)

面向对象的三大特性:继承、封装和多态
  • qq_1991
  • qq_1991
  • 2014年07月15日 14:42
  • 679

Java学习日记4(Servlet监听器)

监听器

【笨鸟先飞】Java重新学习日记4---类和对象

类是对象的类型,对象是类的实例。 第一次学习java的时候,觉得这句话非常拗口,且难以理解,现在明白了类和对象的区别之后,觉得还是这句话。   类和对象难以理解,我认为是在学习的初期,所接触到的...
  • dax120
  • dax120
  • 2017年07月27日 18:48
  • 49

黑马程序员_Java学习日记5_面向对象总结4

----------------------android培训、java培训、期待与您交流! --------------------- 1。Java中的异常处理总结 异常体系: Throw...

黑马程序员Java学习日记(4)集合(一)

------- android培训、java培训、期待与您交流! ----------                    黑马程序员Java学习日记(4)集合(一) 1.前言: (1)为...

黑马程序员_日记4_Java继承,抽象类和接口

——- android培训、java培训、期待与您交流! ———-继承一、继承的概述继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力...

黑马程序员_Java学习日记25_高新技术4

----------------------android培训、java培训、期待与您交流! --------------------- 泛型 1.入门泛型的基本应用 JDK1.5的...

2016.05.15培训日记

今天所学的知识点: 1.异常和日志:异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。主要有两种:编译的时候提示异常,程序运行的时候提示异常。 2.Java使用异常处理机...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我的java培训日记-4
举报原因:
原因补充:

(最多只允许输入30个字)