精华内容
下载资源
问答
  • servlet请求转发到另一个servlet

    千次阅读 2017-08-02 16:42:00
    servlet请求转发到另一个servlet,并传递数据 。 1.通过request.setAttribute("key",value)给request加信息。 2.通过request.getRequestDispather(目标servlet).forward(request,response) 传递制定servlet. 3.在...

    servlet请求转发到另一个servlet,并传递数据 。

    1.通过request.setAttribute("key",value)给request加信息。

    2.通过request.getRequestDispather(目标servlet).forward(request,response) 传递制定servlet.

    3.在另一个servlet中通过request.getAttribute("key")来获取附加信息的值。

    转载于:https://www.cnblogs.com/halo-yang/p/7274748.html

    展开全文
  • 使用httpclient发送post请求servlet服务器,servlet请求另一个服务器得到数据返回给httpclient 实现思路 1、新建两个Web Appilcation项目模拟两个服务器 分别命名servlet和servletDemo 2、建立一个httpclient模拟发送...

    使用httpclient发送post请求到服务器端,服务器端在请求另一个服务器得到数据返回给httpclient

    实现思路

    1、新建两个Web Appilcation项目模拟两个服务器
    分别为服务器端1和服务器端2
    2、建立一个httpclient模拟发送post请求
    3、服务器1接收到httpclient 发来的请求后向另一个服务器2发起请求
    4、服务器1接收到servlet发来的请求,并响应服务器1。
    5、服务器1再将服务器2响应的数据发送给httclient

    详细代码如下

    httpclient发送post请求给服务器1 代码:

    import org.apache.http.HttpEntity;
    import org.apache.http.NameValuePair;
    import org.apache.http.ParseException;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 描述:
     *
     * @author BZMing
     * @create 2019-08-12  10:44
     */
    public class Client {
    
        public static void main(String[] args) throws IOException {
    
            //创建httpClient请求
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //请求地址
            String url = "http://localhost:8888/demo";
            //创建httpPost
            HttpPost httpPost = new HttpPost(url);
            //创建 参数集合
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            //添加参数
            params.add(new BasicNameValuePair("msg" , "aaaaaaaaaaaaaaa"));
    
            //将参数集合添加到httpPost
            httpPost.setEntity(new UrlEncodedFormEntity(params));
    
            httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
    
            // 响应
            CloseableHttpResponse response = null;
            try {
                // 由客户端执行(发送)Post请求
                response = httpClient.execute(httpPost);
    
                // 从响应模型中获取响应实体
                HttpEntity responseEntity = response.getEntity();
    
                System.out.println("响应状态为:" + response.getStatusLine());
                if (responseEntity != null) {
                    System.out.println("响应内容长度为:" + responseEntity.getContentLength());
                    System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (ParseException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    // 释放资源
                    if (httpClient != null) {
                        httpClient.close();
                    }
                    if (response != null) {
                        response.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    

    服务器1接受httpclient发来的请求,对数据进行加工处理,并请求另一个服务器2:

    import org.apache.http.HttpEntity;
    import org.apache.http.NameValuePair;
    import org.apache.http.ParseException;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 描述:
     *
     * @author BZMing
     * @create 2019-08-12  9:11
     */
    @WebServlet("/demo")
    public class servlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("application/json");
            resp.setCharacterEncoding("utf-8");
            req.setCharacterEncoding("utf-8");
    
            //接收数据
            BufferedReader reader = req.getReader();
            String json = reader.readLine();
            System.out.println(json);
            reader.close();
    
            /**
             * 将接收到的数据进行加密处理  (加密前 json,加密后  endjson)
             */
            String endjson="demo发来的"+json+"数据!";
    
            //创建httpClient请求
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //请求地址
            String url = "http://localhost:6666/test";
            //创建http Post请求
            HttpPost httpPost = new HttpPost(url);
            //创建 参数集合
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            //添加参数
            params.add(new BasicNameValuePair("str" , endjson));       //将abcdefg改为 加密处理后的字符串  endjson
    
            //将参数集合添加到httpPost
            httpPost.setEntity(new UrlEncodedFormEntity(params));
            //设置请求的格式
            httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
            CloseableHttpResponse response = null;
            // 由客户端执行(发送)Post请求
            response = httpClient.execute(httpPost);
            // 从响应模型中获取响应实体
            HttpEntity responseEntity = response.getEntity();
            //httpclient发送请求后,从响应实体中获取对方返回的数据  
            String strmsg = EntityUtils.toString(responseEntity);
            System.out.println(strmsg);
    
            /**
             * 将收到响应的数据进行处理     处理前 strmsg   处理后后sendmsg
             */
            String sendString ="处理后的"+strmsg+"数据";
    
            //向最开始的请求返回数据  endmsg
            PrintWriter out = resp.getWriter();
            out.write(sendString);
    
    
            //释放资源。
            if (reader!=null){
                reader.close();
            }
            if (httpClient != null) {
                httpClient.close();
            }
            if (response != null) {
                response.close();
            }
            if (out!=null){
                out.close();
            }
    
        }
    }
    
    

    服务器2接受到服务器1发来的请求,并返回数据

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * 描述:
     *
     * @author BZMing
     * @create 2019-08-12  10:42
     */
    @WebServlet("/test")
    public class Servlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("application/json");
            resp.setCharacterEncoding("UTF-8");
            req.setCharacterEncoding("UTF-8");
    
            /**
             * 接收数据
             */
            BufferedReader reader = req.getReader();
            String json = reader.readLine();
            System.out.println(“发送过来的数据是”+json);
            reader.close();
    
    
            /**
             * 返回数据
             */
            PrintWriter out = resp.getWriter();
            String sendString;
            sendString="asdcfe";                  //此服务器要返回的数据
            out.write(sendString);
            out.close();
        }
    }
    
    
    展开全文
  • Servlet 请求转发和重定向

    千次阅读 2016-01-20 13:49:49
    servlet请求转发与重定向
    servlet中的请求转发和重定向都是对资源的请求,以前对这两者的区分比较模糊,于是查阅了一些资料,再结合一两个实例,终于在脑海里有了比较明确的区分。
    

    请求转发:
    request.getRequsetDispatcher().forward(requset,response),是一种服务器行为,转发时request对象会被保存,也就是说被转发到的另外一个servlet或其他资源中的request对象,跟请求转发的request是通一个对象。又由于这个过程是服务端行为,所以客户端的地址栏不会发生改变。

    重定向
    response.sendRedirect(url),是一种客户端行为,实际上期间发生的是两次请求,前一次的请求request对象不会作保存,且地址栏地址会发生改变。

    现在来看看一个例子:
    
    假设TestServlet是要请求的资源
    
    @WebServlet("/TestServlet")
    public class TestServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("Test servlet is showing!");
            System.out.println("my name is : "+ request.getAttribute("name"));
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    

    请求转发servlet:TestForwardServlet

    @WebServlet("/TestForwardServlet")
    public class TestForwardServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
    
        public TestForwardServlet() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("forward servlet is showing!");
            request.setAttribute("name", "licha");
            System.out.println("my name is : "+request.getAttribute("name"));
            request.getRequestDispatcher("/TestServlet").forward(request, response);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    

    重定向servlet:TestRedirectServlet

    @WebServlet("/TestRedirectServlet")
    public class TestRedirectServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("redirect servlet is showing!");
            request.setAttribute("name", "John");
            System.out.println("my name is : "+request.getAttribute("name"));
            response.sendRedirect("TestServlet");
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    

    启动tomcat服务器,先试一下请求转发,在地址栏输入http://localhost:8080/TestSpringmvc/TestForwardServlet ,控制台的输出为:
    这里写图片描述

    再试一下重定向的例子,在地址栏输入:http://localhost:8080/TestSpringmvc/TestRedirectServlet ,控制台输入为:
    这里写图片描述

    可见,两者主要体现有两点不同:
    1、转发的地址栏url还是原来的http://localhost:8080/TestSpringmvc/TestForwardServlet ,而重定向的地址栏url变成http://localhost:8080/TestSpringmvc/TestServlet
    2、TestForwardServlet 中request对象中的属性name跟TestServlet中的一样,说明TestForwardServlet 中的request对象被保存并传到TestServlet。对比之下TestRedirectServlet 中request对象中的属性name并没有传到TestServlet中,因为TestServlet的request对象name属性为null。

    展开全文
  • Servlet请求及响应中文乱码问题

    千次阅读 2019-03-09 18:25:43
    解决Servlet请求和响应的中文乱码 请求参数的中文乱码问题 post方式 setCharacterEncoding() 该方法只对post请求方式有效,get请求方式无效 HttpServletRequest接口提供了一个setCharacterEncoding()方法,该...

    解决Servlet请求和响应的中文乱码

    请求参数的中文乱码问题

    post方式
    setCharacterEncoding()
    该方法只对post请求方式有效,get请求方式无效

    HttpServletRequest接口提供了一个setCharacterEncoding()方法,该方法用于设置request对象的解码方式。

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    		//设置request对象的解码方式
    		request.setCharacterEncoding("UTF_8");
    	}
    

    响应参数的中文乱码问题

    第一种

    设置HttpServletResponse使用UTF-8编码

    response.setCharacterEncoding("UTF-8");
    

    通知游览器使用指定编码

    Response.setHeader("Content-Type","text/html;charset=UTF-8");
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    			//设置编码
    			response.setCharacterEncoding("UTF-8");
    			//通知解码
    			response.setHeader("Content-Type", "text/html;charset=UTF-8");
    	}
    

    第二种

    即设置HttpServletResponse使用UTF-8编码,也通知游览器使用指定编码

    response.setContentType("text/html;charset=UTF-8");
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    			//响应
    			response.setContentType("text/html;charset=UTF-8");
    	}
    

    小结(post方式)

    解决请求响应中文乱码问题

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException {
    			//请求
    			request.setCharacterEncoding("UTF-8");
    			//响应
    			response.setContentType("text/html;charset=UTF-8");
    	}
    
    展开全文
  • Servlet请求路径的问题:

    千次阅读 2016-07-10 16:00:23
    Servlet请求路径的问题: 在form的action属性中,直接写servlet的URL路径。默认是在当前目录下查找。一旦网页在子目录中,那么会在提交路径中加上子目录的名称。可以通过../回到上一级目录。     如果目录比较...
  • servlet请求转发

    千次阅读 2019-01-31 16:02:28
    请求转发   一个servlet负责一个功能 比如一个servlet只是负责登陆界面的展示 另一个负责登陆状态的判断,则登陆状态判断为 否则就要回到登陆界面 即需要转发会负责登陆界面展示的servlet   req....
  • 13. Servlet 请求/响应过滤器

    千次阅读 2017-07-26 14:47:51
    Servlet 请求/响应过滤器1、Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息;可以将一个或多个 Servlet 过滤器附加到一个 Servlet (或一组 Servlet),或者 JSP 、 HTML 页面,...
  • servlet 请求处理方式

    千次阅读 2019-04-16 10:23:45
    servlet请求处理有以下几种方式: 1、直接处理:req.setAttribute("key","value"); 2、请求转发: req.getRequestDispatcher(uri/servlet别名).forword(req,resp); 特点:发一次请求,浏览器的地址不变; ...
  • servlet请求转发与重定向及乱码问题

    千次阅读 2017-05-23 13:37:29
    1.servlet请求转发与请求重定向 request.getRequestDispacther("/test.jsp").forword(request,response);  response.sendRedirect("test.jsp"); 1.1sendRedirect Get请求 URL改变 至少两次请求 可以...
  • Servlet请求响应的模式

    千次阅读 2011-11-08 20:13:43
    1、Servlet请求响应的模式。 2、Servlet工作过程:  针对同一个Servlet,Servlet容器会在第一次收到http请求时建立一个Servlet实例,然后启动一个线程。第二次收到http请求时,Servlet容器无须建立相同的Servlet...
  • 关于Servlet请求转发到html界面中文乱码问题

    千次阅读 热门讨论 2019-10-30 20:16:47
    Servlet请求转发(requst.getRequestDispatcher("url").forward(req,resp);)到html界面出现浏览器前台数据乱码。。。emmm。。真让人头大。。。然后把请求转发到jsp界面毫无任何问题。。。哈???我裂开了!!! ...
  • servlet请求转发的三种方式   servlet中的请求转发主要有三种方式: 1、 forward:是指转发,将当前request和response对象保存,交给指定的url处理。并没有表示页面的跳转,所以地址栏的地址不会发生改变。...
  • servlet请求转发的问题

    2018-05-24 11:59:55
    我通过form表单提交了一些 参数到servlet1,servlet1能正常通过request.getParmer获取到这些参数,然后servlet1有一个转发到servlet2,但是servlet2不能通过request.getParmer获取到请求的这些参数,是怎么回事?...
  • 一个Servlet请求的请求过程

    千次阅读 2018-10-21 15:44:06
    首先看servlet的接口定义 public interface Servlet { public void init(ServletConfig config) throws ServletException; public ServletConfig getServletConfig(); public void service...
  • 什么原因可以导致servlet请求了一次,doget()执行了两次
  • 很多时候一个请求会需要多个Servlet协作才能完成,这时候就需要从一个Servlet中跳转到另个一Servlet中处理了。一、格式首先调用request的getRequestDispatcher(“参数”)方法,获取到一个RequestDispatcher对象:...
  • servlet请求转发与重定向的区别: request.setAttribute(“test”,”hello”); request.getRequestDispacther(“/test.jsp”).forword(request,response);&nbsp; response.sendRedirect(“test.jsp”); 一、...
  • 在JAVA WEB应用中,如何获取servlet请求中的参数 ,并传递给跳转的JSP页面?例如访问http://localhost:8088/bbs?id=1当执行这个bbs servlet时,将url参数id的值传递给bbs.jsp页面?(1)首先要配置web.xml,见下面...
  • 说明:标签,只能嵌套一个实体页面,不能嵌套一个Servlet请求;如果嵌套一个Servlet请求,可能后台报Stream closed错误。    如果该标签引用一个Servlet请求,如时,后台报错如下: java.io.IOException: ...
  • Servlet请求方式

    千次阅读 2011-09-14 22:47:14
    请求格式:请求行、请求头、请求正文部分 响应格式:响应状态行、响应头、响应内容 Post请求与Get请求区别:与get请求不同,地址栏没有变化,数据在地址栏不可见,安全。理论上没有长度限制。 请求中参数的...
  • servlet请求转发与重定向的区别:

    万次阅读 2011-10-28 14:30:14
    servlet请求转发与重定向的区别: request.setAttribute("test","hello"); request.getRequestDispacther("/test.jsp").forword(request,response);  response.sendRedirect("test.jsp"); 一、...
  • servlet请求分发到不同的servlet方法中

    千次阅读 2017-12-06 09:30:43
    package org.guangsoft.controller;import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method...import javax.servlet.ServletException; import javax.serv
  • 从数据库拿到数据,显示在页面上,明明已经拿到数据,页面无法显示,只是浏览器弹出源码,看到里面也有数据,也没有报错
  • Servlet请求路径相关方法汇总

    千次阅读 2017-03-13 22:02:28
    pathServlet /servlet/path/* 假设一个Servlet在web.xml中是这么配置的,访问的url是http://localhost:8080/project/servlet/path/xxx?param=xx,有以下几个跟...返回请求URI上下文部分--->/project B.getServle
  • Servlet请求分派器——DispatcherServlet

    千次阅读 2018-04-14 11:08:29
    在索引文章中我提到过,我会写一篇关于Servlet的进阶知识,这篇就是了。学习这篇文章之前,请先把前面整套帖子中的程序跑通,这篇文章是作为进阶补充的。 如果你是直接来到这篇文章,没见到我所谓的“索引文章”,...
  • Servlet请求转发与包含

    千次阅读 2013-10-17 10:18:33
    1.Servlet规范为Web组件之间的协作提供了两种途径 2.web组件包含哪些,目标组件都可以为Servlet,jsp或者HTML文档. 3.源组件和目标组件共享一个ServletRequest对象和ServletResponse对象 ... 一个S

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,279
精华内容 22,911
关键字:

servlet请求