Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet在Tomcat上不工作_Java_Gwt_Tomcat_Servlets - Fatal编程技术网

Java Servlet在Tomcat上不工作

Java Servlet在Tomcat上不工作,java,gwt,tomcat,servlets,Java,Gwt,Tomcat,Servlets,我已经编写了一个Servlet来将文件上传到服务器并存储它们。只要我运行DevelopmentMode(这是一个GWT项目),一切都很好。但是因为我在Tomcat上部署了webapp,所以servlet甚至没有被调用 public class ImageService extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; private static final long MAX_F

我已经编写了一个Servlet来将文件上传到服务器并存储它们。只要我运行DevelopmentMode(这是一个GWT项目),一切都很好。但是因为我在Tomcat上部署了webapp,所以servlet甚至没有被调用

public class ImageService extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private static final long MAX_FILE_SIZE = 1024 * 1024 * 1024; //1GB

@Override
protected void doPost(final HttpServletRequest request,
        final HttpServletResponse response) {

    slog("SERVLET STARTED");

    boolean isMultipart = ServletFileUpload.isMultipartContent(request);

    if (isMultipart) {
        slog("REQUEST IS MULTIPART");
        response.setStatus(HttpServletResponse.SC_OK);
        response.setContentType("text/html");

        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setFileSizeMax(MAX_FILE_SIZE);
        try {
            List<FileItem> items = upload.parseRequest(request);
            Iterator<FileItem> iterator = items.iterator();
            while (iterator.hasNext()) {

                FileItem item = iterator.next();

                if (!item.isFormField()) {
                    String fileName = item.getName();
                    slog("TROVATO FILE " + item.getName());
                    String root = getServletContext().getRealPath("/");
                    File path = new File(root + "/fileuploads");
                    slog("SALVO FILE IN " + path.getAbsolutePath());
                    if (!path.exists()) {
                        path.mkdirs();
                    }

                    File uploadedFile = creaFileNonAmbiguo(path, fileName);
                    slog("NOME ASSEGNATO AL FILE " + uploadedFile.getName());
                    item.write(uploadedFile);
                    response.getWriter().write(uploadedFile.getName() + ";");

                }
            }

            response.getWriter().flush();
            slog("RISPOSTA INVIATA");

        } catch (Exception e) {
            e.printStackTrace();

        }
    } else {
        slog("LA RICHIESTA NON E' MULTIPART");
        response.setStatus(HttpServletResponse.SC_NO_CONTENT);
    }   
    slog("SERVLET TERMINATA");
}

@Override
protected void doGet(final HttpServletRequest request,
        final HttpServletResponse response) {


    response.setContentType("image/jpeg");
    String root = getServletContext().getRealPath("/").concat(
            "fileuploads/");
    String path = root.concat(request.getParameter("src"));

    File file = new File(path);
    response.setContentLength((int) file.length());
    FileInputStream in;
    try {
        in = new FileInputStream(file);
        OutputStream out = response.getOutputStream();
        byte[] buf = new byte[1024];
        int len = 0;
        while ((len = in.read(buf)) >= 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    } catch (IOException e) {

        e.printStackTrace();
    }

}

private File creaFileNonAmbiguo(File path, String fileName) {

    File res = new File(path + "/" + fileName);
    if (!res.exists())
        return res;
    else {
        return creaFileNonAmbiguo(path, "c".concat(fileName));
    }
}

private void slog(String s) {
    System.out.println("FILE SERVLET: " + s);
}

}
公共类ImageService扩展了HttpServlet{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
私有静态最终长最大文件大小=1024*1024*1024;//1GB
@凌驾
受保护的void doPost(最终HttpServletRequest请求,
最终HttpServletResponse(响应){
slog(“SERVLET启动”);
布尔值isMultipart=ServletFileUpload.isMultipartContent(请求);
if(isMultipart){
slog(“请求是多部分的”);
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType(“text/html”);
FileItemFactory=new DiskFileItemFactory();
ServletFileUpload upload=新的ServletFileUpload(工厂);
upload.setFileSizeMax(最大文件大小);
试一试{
列表项=upload.parseRequest(请求);
迭代器迭代器=items.Iterator();
while(iterator.hasNext()){
FileItem=iterator.next();
如果(!item.isFormField()){
字符串文件名=item.getName();
slog(“TROVATO文件”+item.getName());
字符串root=getServletContext().getRealPath(“/”);
文件路径=新文件(root+“/fileuploads”);
slog(“SALVO文件位于”+path.getAbsolutePath());
如果(!path.exists()){
path.mkdirs();
}
File uploadedFile=creaFileNonAmbiguo(路径、文件名);
slog(“NOME ASSEGNATO AL FILE”+uploadedFile.getName());
item.write(上传文件);
response.getWriter().write(uploadedFile.getName()+“;”);
}
}
response.getWriter().flush();
长途跋涉(“因维塔之旅”);
}捕获(例外e){
e、 printStackTrace();
}
}否则{
slog(“LA RICHIESTA NON E‘MULTIPART”);
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
}   
长途跋涉(“SERVLET Termina”);
}
@凌驾
受保护的无效数据集(最终HttpServletRequest请求,
最终HttpServletResponse(响应){
response.setContentType(“图像/jpeg”);
字符串root=getServletContext().getRealPath(“/”).concat(
“文件上传/”;
字符串路径=root.concat(request.getParameter(“src”);
文件=新文件(路径);
response.setContentLength((int)file.length());
文件输入流输入;
试一试{
in=新文件输入流(文件);
OutputStream out=response.getOutputStream();
字节[]buf=新字节[1024];
int len=0;
而((len=in.read(buf))>=0){
out.write(buf,0,len);
}
in.close();
out.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
私有文件creaFileNonAmbiguo(文件路径、字符串文件名){
File res=新文件(路径+“/”+文件名);
如果(!res.exists())
返回res;
否则{
返回creaFileNonAmbiguo(路径“c”.concat(文件名));
}
}
私人空位(字符串s){
System.out.println(“文件SERVLET:+s);
}
}
我的代码怎么了?为什么它在devmode中工作而不是在Tomcat上

这是我的Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">

<!-- Servlets -->


<servlet>
    <servlet-name>dataLayerServlet</servlet-name>
    <servlet-class>com.tesi.server.DataLayerServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>dataLayerServlet</servlet-name>
    <url-pattern>/segnalazioni_degrado/dataLayer</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>loginServlet</servlet-name>
    <servlet-class>com.tesi.server.LoginServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>loginServlet</servlet-name>
    <url-pattern>/segnalazioni_degrado/login</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>mailServlet</servlet-name>
    <servlet-class>com.tesi.server.MailServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>mailServlet</servlet-name>
    <url-pattern>/segnalazioni_degrado/mail</url-pattern>
</servlet-mapping>


<servlet>
    <servlet-name>imageServlet</servlet-name>
    <servlet-class>com.tesi.server.ImageService</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>imageServlet</servlet-name>
    <url-pattern>/segnalazioni_degrado/imageUpload</url-pattern>
</servlet-mapping>


<!-- Default page to serve -->
<welcome-file-list>
    <welcome-file>Segnalazioni_Degrado.html</welcome-file>
</welcome-file-list>

dataLayerServlet
com.tesi.server.DataLayerServiceImpl
dataLayerServlet
/segnalazioni_degrado/数据层
罗金瑟夫莱特酒店
com.tesi.server.LoginServiceImpl
罗金瑟夫莱特酒店
/segnalazioni_degrado/登录
mailServlet
com.tesi.server.MailServiceImpl
mailServlet
/segnalazioni_degrado/邮件
imageServlet
com.tesi.server.ImageService
imageServlet
/segnalazioni_degrado/imageUpload
Segnalazioni_Degrado.html

首先,根据您的web.xml,
imageServlet
映射到:

/segnalazioni_degrado/imageUpload
其次,您应该从url中删除问号,并尝试将其更改为:

localhost:8080/Segnalazioni_Degrado/imageUpload

看看会发生什么。好的,我解决了。问题是,servlet被映射到
/segnalazioni\u degrado/imageUpload
,而我的GWT主模块是segnalazioni\u degrado(大写字母)。
更改url模式成功了。

如果您尝试手动调用它(即在浏览器中键入servlet url),会发生什么情况?@fatman您的意思是这样的?什么也没有发生。是的,你得到了什么错误?没有错误、消息或异常。只是什么都没有发生。我得到了404错误消息