【问题标题】:How to use doGet in jsp with Servlet如何在jsp中使用doGet和Servlet
【发布时间】:2011-06-14 19:53:43
【问题描述】:

我正在尝试向 servlet 发送一些东西,但我得到了这个

    Etat HTTP 404 - /pdfreader/Services%20Web%20avec%20J2EE%20et%20.NET.pdf

--------------------------------------------------------------------------------

type Rapport d''état

message /pdfreader/Services%20Web%20avec%20J2EE%20et%20.NET.pdf

description La ressource demandée (/pdfreader/Services%20Web%20avec%20J2EE%20et%20.NET.pdf) n'est pas disponible.

我像这样从我的 JSP 调用它

<a href="/pdfreader/<%=filename/*le nom d'un fichier pdf par exemple (jsp.pdf)*/ %>"><%=bookName %> </a>

我的 servlet 代码是

package com.search.ts;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class pdfreader
 */
@WebServlet("/pdfreader")
public class pdfreader extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public pdfreader() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
          String filename = URLDecoder.decode(request.getPathInfo(), "UTF-8");
            //filename= request.getParameter("err");
            //String filename =(String) request.getAttribute("linkbook");
            File file = new File("F:/fichiers/", filename);

            response.setContentType(getServletContext().getMimeType(file.getName()));
            response.setContentLength((int) file.length());
            response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");

            BufferedInputStream input = null;
            BufferedOutputStream output = null;

            try {
                input = new BufferedInputStream(new FileInputStream(file));
                output = new BufferedOutputStream(response.getOutputStream());

                byte[] buffer = new byte[8192];
                int length;
                while ((length = input.read(buffer)) > 0) {
                    output.write(buffer, 0, length);
                }
            } finally {
                if (output != null) try { output.close(); } catch (IOException ignore) {}
                if (input != null) try { input.close(); } catch (IOException ignore) {}
            }
    }

}

当我创建 servlet 和 jsp 时,我在 web-inf 中没有得到任何 web.xml(我使用 eclipse)

所以我尝试创建一个

<?xml version="1.0" encoding="UTF-8"?>

<web-app>
<welcome-file-list>
<welcome-file>/vieu/indexS.jsp</welcome-file>
</welcome-file-list>
<servlet>
<javaee:description></javaee:description>
<javaee:display-name>pdfreader</javaee:display-name>
<servlet-name>pdfreader</servlet-name>
<servlet-class>pdfreader</servlet-class>
<jsp-file>/vieu/indexS.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>com.search.ts.pdfreader</servlet-name>
<url-pattern>/pdfreader/*</url-pattern>
</servlet-mapping>
</web-app>

有人知道为什么这不起作用吗?

【问题讨论】:

    标签: jsp servlets web.xml


    【解决方案1】:

    所有的法语都非常令人困惑。但至少 HTTP 404 错误显然是不言自明的:它只是意味着请求 URL 完全错误或资源(servlet)无法启动。

    有几个潜在的问题原因:


    一、链接:

    <a href="/pdfreader/<%=filename%>"><%=bookName %></a>
    

    URL 中的前导斜杠 / 使其相对于域根。所以当你的JSP 在http://localhost:8080/contextname/vieu/indexS.jsp 上运行时,这个URL 实际上指向http://localhost:8080/pdfreader/name.pdf。但你希望它是http://localhost:8080/contextname/pdfreader/name.pdf!所以相应地修复它

    <a href="${pageContext.request.contextPath}/pdfreader/<%=filename%>"><%=bookName %></a>
    

    二、servlet声明:

    @WebServlet("/pdfreader")
    

    这是完全错误的。您需要将其注释如下:

    @WebServlet(urlPatterns={"/pdfreader/*"})
    

    第三,web.xml 缺少 Servlet API 版本声明,导致容器退回到最低兼容性模式,因此新的 Servlet 3.0 @WebServlet 注释将不再起作用。相应地修复它:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app 
        xmlns="http://java.sun.com/xml/ns/javaee"
        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_3_0.xsd"
        id="WebApp_ID" version="3.0">
    
        <!-- Config here -->
    </web-app>
    

    删除您的web.xml 中的&lt;servlet&gt;&lt;servlet-mapping&gt; 声明。对于(正确的!)@WebServlet,这些不是必需的。

    【讨论】:

    • thaaaaaaaaaaaaaaank you so mutch its work ,先生,你又好样的了
    【解决方案2】:

    您的 web.xml 文件可能不正确。它应该看起来像这样:

    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee @987654321@_2_5.xsd" version="2.5">

    &lt;servlet&gt;
    &lt;servlet-name&gt;pdfreader&lt;/servlet-name&gt;
    &lt;servlet-class&gt;com.search.ts.pdfreader&lt;/servlet-class&gt;
    &lt;/servlet&gt;

    &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;pdfreader&lt;/servlet-name&gt;
    &lt;url-pattern&gt;/pdfreader/*&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;

    &lt;/web-app&gt;

    【讨论】:

    • 感谢您的帮助,但您的 web.xml 我得到了看起来的东西??
    猜你喜欢
    • 2020-05-28
    • 2013-01-11
    • 2015-06-02
    • 1970-01-01
    • 2015-04-01
    • 2011-02-15
    • 2013-08-18
    • 2011-01-21
    • 2011-08-10
    相关资源
    最近更新 更多