#eclipse 开发Servlet
1.新建工程。
百度了下,只有在你的应用的WebContent/WEB-INF/lib加上库,才会显示。
开发与配置比较简单,但是eclipse部署应用到自己的tomcat上出现问题,查阅了网上的一些资料。
##eclipse配置Tomcat服务器server locations的方法(转之http://yedward.net/?id=303)
最近放弃了使用Myeclipse,转而使用eclipse作为开发工具,确实Myeclipse集成了太多东西,使得开发人员的配置越来越少,这不是个好事,使用eclipse后,有些地方就得自己去配置,比如配置J2EE需要的一些jar包,自己配置server服务器等等。
我在使用eclipse配置Tomcat服务器的时候发现,默认情况下Tocmat把我们部署的项目放在了workspaces下面,而不是像Myeclipse默认的那样放在tomcat的安装路径下。
图1:Tomcat配置
从上图1中可以看到,Server Locations配置是灰色的,无法去修改,当然,这里我已经勾选成了Use Tomcat installation,即部署在Tomcat安装目录下。eclipse默认是勾选的第一项,即Use workspace metadata。那么,怎么去修改该配置呢?
图2:删除项目并Clean
如上图2所示,想要Tomcat的Server配置可以修改,那么首先将server下面部署的所有项目都先remove掉,然后再在server上右键鼠标,选择Clean,clean完以后,再次双击server进入配置,即可发现配置可修改。
图3:修改server配置
如上图3所示,配置已经可以修改了。
有时候,eclipse启动tomcat的时候会出现:WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:firstProject’ did not find a matching property 这样的问题,我也遇到过这样的报错信息。出现这个问题,可能是由于没有勾选server options下的Publish module contexts to separate XML files,我是通过勾选了该配置项解决了这个问题。
最后,提醒下,修改了配置以后,别忘了保存修改。
Servlet的线程安全问题?
Servlet的线程安全问题只有在大量的并发访问时才会显现出来,并且很难发现,因此在编写Servlet程序时要特别注意。线程安全问题主要是由实例变量造成的,因此在Servlet中应避免使用实例变量。如果应用程序设计无法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径。
servletConfig与servletContext对象
##读取资源文件(servlet读配置文件与普通类读取资源文件)
- Servlet读资源文件首先获得一个ServletContext对象,在调用
ServletContext.getResourceAsStream(path)
ServletContext.getResource(path)
ServletContext.getRealpath(path)
选择其中一种方式:protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext(); //注意:资源文件路径应该是虚拟路径,不是实际路径(E:Javaidesworkspaceday0WebContentdb.properties) java.io.InputStream in=context.getResourceAsStream("/db.properties"); //读properties文件 Properties p =new Properties(); p.load(in); String url = p.getProperty("url"); String username = p.getProperty("username"); String password = p.getProperty("password"); System.out.println(url); System.out.println(username); System.out.println(password); }
- 普通类读资源文件(重要)
package cn.itcast.dao;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class StudentDao {
public String get() throws IOException{//类装载器读
ClassLoader loader = StudentDao.class.getClassLoader();
InputStream in = loader.getResourceAsStream(“db.properties”);//相对于claesses文件夹
Properties p = new Properties();
p.load(in);
String url = p.getProperty("url");
String username = p.getProperty("username");
String password = p.getProperty("password");
System.out.println(url);
System.out.println(username);
System.out.println(password);
return null;
}
}
1.类装载器读资源文件存在一个问题,资源文件改动,获取的url,uername,password还是原来的信息。怎么办? 需要改成一下方式,注意红色字体变化。
ClassLoader loader = StudentDao.class.getClassLoader(); java.net.URL url = loader.getResource("db.properties"); String dbPath = url.getPath(); FileInputStream in = new FileInputStream(dbPath); Properties p = new Properties(); p.load(in); String db_url = p.getProperty("url"); String username = p.getProperty("username"); String password = p.getProperty("password"); System.out.println(db_url); System.out.println(username); System.out.println(password);
2.类装载器读资源文件一般不大。
##Servlet高级应用----缓存设置
设置缓存有两种场景:
>场景一是对于不经常变化的数据,在servlet里可以为其设置合理的缓存时间,以避免浏览器频繁的向服务器发送请求。
package cn.nyist.servlet.context; public class ServletDemo10 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String value="abc"; response.setDateHeader("Expires", System.currentTimeMillis()+1000*180); response.getWriter().write(value); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
原文地址:https://www.cnblogs.com/petewell/p/11601778.html