当前位置: 首页 > 面试题库 >

doGet和doPost String = null问题

龙越彬
2023-03-14
问题内容

我正在尝试将String发送到服务器(在tomcat上运行),并让它返回String。客户端发送字符串,服务器接收它,但是当客户端取回它时,字符串为null。

doGet()应该将String in =从客户端输入。但是doPost()在= null中发送String。

为什么?我假设doGet()在doPost()之前运行,因为它是由客户端首先调用的。

服务器:

private String in = null;

public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException,ServletException{
    try{
    ServletInputStream is = request.getInputStream();
    ObjectInputStream ois = new ObjectInputStream(is);

    in = (String)ois.readObject();

    is.close();
    ois.close();
    }catch(Exception e){

    }
}

public void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException,ServletException{
    try{
    ServletOutputStream os = response.getOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(os);

    oos.writeObject(in);
    oos.flush();

    os.close();
    oos.close();
    }catch(Exception e){

    }
}

客户:

URLConnection c = new URL("***********").openConnection();
c.setDoInput(true);
c.setDoOutput(true);

OutputStream os = c.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);

oos.writeObject("This is the send");
oos.flush();

InputStream is = c.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
System.out.println("return: "+ois.readObject());

ois.close();
is.close();
oos.close();
os.close();

问题答案:

如果要从客户端读取任意String(或将其发送回),则只想直接读取和写入String:无需使用ObjectInputStreamObjectOutputStream。像这样:

public void doPost(...) {
  BufferedReader in = new BufferedReader(request.getReader());
  String s = in.readline();
  ...
}

如果您希望能够将字符串回显给客户端(但也可以保护数据免受他人攻击),则应使用HttpSession。如果这是某种“回声”服务,您希望任何客户端都可以设置字符串值,然后所有客户端都返回相同的字符串,那么您不应该HttpSession使用实例范围的引用作为替代你有以上。



 类似资料:
  • 问题内容: 我已经开发了一个将信息发送到的HTML页面。在中,我正在使用方法和: 在调用Servlet的html页面代码中是: method = “get”在Servlet中使用时,我会获得id和password的值,但是在使用时method = “post”,id和password会设置为null。为什么在这种情况下我无法获取值? 我想知道的另一件事是如何使用Servlet生成或验证的数据。例如

  • 我使用的是Apache Tomcat7.0 Servlet容器。我一直在研究JavaServer Faces中的请求处理。我可以在web.xml中看到以下配置块:

  • 问题内容: 之间有什么区别 和 为何后者不起作用? 问题答案: 在SQL中,之间的比较值,任何其他值(包括另一种使用比较操作符(如),,,等)将导致,这被认为是一个where子句的目的(严格来说,它的“不true”,而不是“false”,但效果相同)。 原因是a的意思是“未知”,因此与a进行任何比较的结果也都是“未知”。因此,通过编码您不会对行造成任何影响。 SQL提供了一种特殊的语法来测试列是否

  • NULL 值代表遗漏的未知数据。 默认地,表的列可以存放 NULL 值。 本章讲解 IS NULL 和 IS NOT NULL 操作符。 SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。 NULL 值的处理方式与其他值不同。 NULL 用作未知的或不适用的值的占位符。 注释:无法比较 NULL 和

  • JavaScript 有两个表示‘空’的值,其中比较有用的是 undefined。 undefined 的值 undefined 是一个值为 undefined 的类型。 这个语言也定义了一个全局变量,它的值是 undefined,这个变量也被称为 undefined。 但是这个变量不是一个常量,也不是一个关键字。这意味着它的值可以轻易被覆盖。 ES5 提示: 在 ECMAScript 5 的严格

  • 问题内容: 我说的对吗? 将只计算非null吗? 将始终计算所有行吗?而且如果所有列都为空怎么办? 问题答案: 正确。COUNT(*)是表中的所有行,COUNT(Expression)是表达式仅非空的地方。 如果所有列均为NULL(表示您没有主键,那么这在规范化数据库中就不会发生)COUNT(*) 仍 返回所有插入的行。只是不要那样做。 您可以将*符号认为是“在表格中”而不是“在任何列中”。 这在