Java JSP中通过servlet检索网页

Java JSP中通过servlet检索网页,java,jsp,servlets,Java,Jsp,Servlets,如何通过从JSP页面中作为表单参数传递的Servlet检索网页 JSP页面有一个带有文本框的表单,用于以字符串和提交按钮的形式输入url。该操作由servlet执行,servlet从传递的url获取网页并显示检索到的网页 这里是我的servlet代码` import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.Malform

如何通过从JSP页面中作为表单参数传递的Servlet检索网页

JSP页面有一个带有文本框的表单,用于以字符串和提交按钮的形式输入url。该操作由servlet执行,servlet从传递的url获取网页并显示检索到的网页

这里是我的servlet代码`

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;

    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 Search
    */
    @WebServlet("/Search")
    public class Search extends HttpServlet {
private static final long serialVersionUID = 1L;

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

/**
 * @param  
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
 protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
    String html = null;

    String server = request.getParameter("browsebox");
    if(server != null && server !="")
        {

            response.sendRedirect("browse.jsp");

        }

        try {
            html = getWebPageFromUrl(server);

        }catch(Exception e) {
            System.err.println(e.toString());
            return;

        }
        response.setHeader("serchbox", server);
        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        if(html == null) {
            out.println("<html>");
            out.println("<head><title>Refresher</title></head>");
            out.println("<body bgcolor=\"#ffffff\">");
            out.println("<p>The servlet has received a POST. This is the reply.    </p>");
            out.println("</body></html>");
        } else {



            out.print(html);
        }
    }








/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request,response);
}


private String getWebPageFromUrl(String urlString) throws Exception {

    // Create a URL object from urlString
    URL stockURL;

    try {
        stockURL = new URL(urlString);
        } catch (MalformedURLException e) {

            String msg = "Invalid url: " + urlString;
            throw new Exception(msg);
            }

    // Open a connection to the URL
    URLConnection stockConnection;

    try {
        stockConnection = stockURL.openConnection();
        } catch (IOException e) {

            String msg = "Can't open connection to " + urlString;
            throw new Exception(msg);
            }

    // Get the InputStream from the URL connection
    InputStream webPageInputStream;

    try {
        webPageInputStream = stockConnection.getInputStream();
        } catch (IOException e) {

            // Could be any server error, but the most likely is 404
            String msg = "404 File Not Found: " + urlString;
            //throw new WebPageGrabberException(msg);
            throw new Exception(e.toString());
            }

    // Read the web page via the InputStream

    StringBuffer webPageData = new StringBuffer(32000);
    int totalBytesRead = 0;
    boolean moreToRead = true;
    byte[] readBuf = new byte[4096]; // Read the web page in 4K chunks

    while (moreToRead) {

        int numBytesRead = 0;

        try {
            numBytesRead = webPageInputStream.read(readBuf);
            } catch (IOException e) {

                moreToRead = false;
                numBytesRead = -1;
                }

        if (numBytesRead > 0) {

            totalBytesRead += numBytesRead;
            webPageData.append(new String(readBuf, 0, numBytesRead));
            } else {
                moreToRead = false;
                }

        }

    try {
        webPageInputStream.close();

        } catch (IOException e) {

        // Ignore any exception that might occur
            }

    webPageData.setLength(totalBytesRead);
     webPageData.toString();
}
}
import java.io.IOException;
导入java.io.InputStream;
导入java.io.PrintWriter;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.net.URLConnection;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
/**
*Servlet实现类搜索
*/
@WebServlet(“/Search”)
公共类搜索扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
/**
*@参见HttpServlet#HttpServlet()
*/
公开检索(){
超级();
//TODO自动生成的构造函数存根
}
/**
*@param
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
字符串html=null;
String server=request.getParameter(“browsebox”);
if(server!=null&&server!=“”)
{
sendRedirect(“browse.jsp”);
}
试一试{
html=getWebPageFromUrl(服务器);
}捕获(例外e){
System.err.println(例如toString());
返回;
}
setHeader(“serchbox”,服务器);
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
if(html==null){
out.println(“”);
out.println(“复习者”);
out.println(“”);
println(“servlet已收到帖子。这是回复。

”; out.println(“”); }否则{ 打印(html); } } /** *@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应) */ 受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{ //TODO自动生成的方法存根 doGet(请求、响应); } 私有字符串getWebPageFromUrl(字符串urlString)引发异常{ //从urlString创建URL对象 URL-stockURL; 试一试{ stockURL=新URL(URL字符串); }捕获(格式错误){ String msg=“无效url:+urlString; 抛出新异常(msg); } //打开到URL的连接 URLConnection-stockConnection; 试一试{ stockConnection=stockURL.openConnection(); }捕获(IOE异常){ String msg=“无法打开到”+urlString的连接; 抛出新异常(msg); } //从URL连接获取InputStream 输入流网页输入流; 试一试{ webPageInputStream=stockConnection.getInputStream(); }捕获(IOE异常){ //可能是任何服务器错误,但最有可能是404 String msg=“404找不到文件:”+urlString; //抛出新的WebPageGrabberException(msg); 抛出新异常(例如toString()); } //通过InputStream读取网页 StringBuffer webPageData=新的StringBuffer(32000); int totalBytesRead=0; 布尔moreToRead=true; byte[]readBuf=新字节[4096];//以4K块读取网页 while(moreToRead){ int numBytesRead=0; 试一试{ numBytesRead=webPageInputStream.read(readBuf); }捕获(IOE异常){ moreToRead=false; numBytesRead=-1; } 如果(numBytesRead>0){ totalBytesRead+=numBytesRead; append(新字符串(readBuf,0,numBytesRead)); }否则{ moreToRead=false; } } 试一试{ webPageInputStream.close(); }捕获(IOE异常){ //忽略可能发生的任何异常 } webPageData.setLength(totalBytesRead); webPageData.toString(); } }

提交表单时,servlet中的内容变为空白。

如果需要显示整个站点,只需重定向到它即可

response.sendRedirect(request.getParameter(“url”);

如果需要显示嵌入JSP页面中的站点,请使用iframe


(这里的
fn:escapeXml()
就是为了防止可能的XSS攻击)


无论是哪种情况,您可能只希望在URL以http://或https://等开头时预先进行验证。

所有内容都以代码开头。在编写代码的过程中,您在哪里遇到了问题?危险!您将看到有人输入../../../../../etc/passwd(或类似)并显示它吗?给我们一些代码,这样我们就可以看到您真正想要实现的目标。