写Servlet的一些新手注意事项

Tomcat中的项目位置

你在IDE中编写的Java代码并不能直接运行在tomcat里面,因为他们的文件夹在不同的位置:你在IDE里敲的代码是存在你跟IDE指定的文件夹下的,只有IDE认得到它是一个项目。而想要让这些代码在Tomcat上运行,必须把.class文件(不是.java文件)放到tomcat里的webapps文件夹下。

你在web.xml里写的那些servlet配置里的路径,对应的是webapps文件夹里那个.class文件的路径,而不是你的java代码在IDE里看起来的路径。这一点很重要。你可以在IDE里加一个tomcat插件,自动把你写好的java项目编译部署到tomcat指定位置上。但是一开始最好手动去做这件事,让自己理解这个过程。

Servlet中的对象与线程

在写Servlet的时候需要注意,你写的一个Servlet的实现类,在启动Tomcat以后,对应的是一个Servlet对象,它是单例模式的。

你可以通过在web.xml中为每个servlet对象设置load-on-startup来改变它的初始化方式,可以选择它是在第一次请求的时候实例化或者在启动服务器的时候就实例化。默认是在第一次请求的时候实例化的。

一个客户端请求,被服务器接收以后,Servlet容器就会开一个单独的线程去处理这个请求,多个线程会访问堆中的同一个Servlet对象。

对于方法来说,每个线程在调用对象方法的时候会把方法的代码复制一份到自己线程的栈里面,所以方法不存在并发安全问题。

但对于对象里的成员变量就不一样了,成员变量是放在堆里的,被所有线程共享的,因此Servlet对象要做成无状态对象,也就是说不能在对象里放成员变量。

关于JSP

如果要往响应报文中写入数据,就需要通过response对象获取outputStream,然后调用print方法。如果要返回的是一个很长的HTML文本的话,需要不停的调用print方法就很不方便。

JSP可以看成是一种特殊的Servlet对象的写法,JSP在服务器启动以后会被解析成java代码和类,放在tomcat的work\Catalina\localhost目录下对应的项目名称文件中,通过分析源代码你就可以发现,JSP被自动转变成了一个Servlet,很多代码已经写好了,比如像out,error这样的内置对象都在代码中可以看到。写好JSP以后去看看这些源代码,可以帮你更好的理解JSP的工作原理,记忆更牢固

猜你喜欢

转载自blog.csdn.net/StarBallBigWar/article/details/82354432