eclipse开发Servlet

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eclipse开发Servlet相关的知识,希望对你有一定的参考价值。

#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读配置文件与普通类读取资源文件)

  1. 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);
    }
    
  2. 普通类读资源文件(重要)

    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);
    }

}

原文:大专栏  eclipse开发Servlet


以上是关于eclipse开发Servlet的主要内容,如果未能解决你的问题,请参考以下文章

eclipse开发Servlet

如何使用 Eclipse 开发 Java Servlet?

eclipse web项目的编码过滤器,统一设置成UTF-8

如何使用eclipse创建简单的servlet

在Eclipse环境下配置Servlet开发环境

Eclipse JSP/Servlet 环境搭建