小编DeM*_*rco的帖子

使用doGet将根路径中的默认主页更改为servlet

我有一个小maven(间接通过Netbeans 8.1和tomcat设置)

每当我运行项目时,它会在根目录上打开带有HelloWord的浏览器:

即页面http://localhost:8084/是:

<html>
    <head>
        <title>Start Page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我试图创建一个servlet来替换它:

@WebServlet(name = "HomeServlet", urlPatterns = {"/"}) 但是,它没有按预期工作.

即它仍然表现出同样的问候世界: http://localhost:8084

但它确实搞乱了根目录上的所有文件,即http://localhost:8084/foo.css由这个servlet处理并获得响应.

所以,我的问题是(实际上是两个):

如何将此页面的内容更改为其他内容?

或者,至少(如果前者不可能):我可以在根路径上使用永久重定向来避免用户看到此页面吗?

(即http代码301)将用户移动到 http://localhost:8084/home

servlets homescreen

10
推荐指数
1
解决办法
5613
查看次数

稀疏矩阵的Ruby哈希

我知道Ruby中有几个。但是我必须创建自己的(出于学习目的)。

我正在考虑两种方法:

哈希,而键是以下形式的字符串

myhash["row.col"] 因此当元素不存在时,我可以使用默认值零。

或创建一个稀疏类,然后检查元素以返回其值:

class SparseMatrix < Array
  require 'contracts'
  include Contracts
  attr_accessor :value, :array
  attr_reader :row, :col
  @@array = Array.new
  Contract Num, Num, Num =>  nil
  def initialize(value,row,col)
    @value = value
    @row = row
    @col = col
  end
  def self.all_instances
    @@array
  end
  Contract Num, Num =>  Num
  def getElement(row,col)
    flag = false
    array.each do |x|
      if x.row == row && x.col == col
        return x.value
      end
    end
    0
  end
end
Run Code Online (Sandbox Code Playgroud)

我不希望这是主观的,我想知道大多数使用的设计模式会更符合逻辑吗?(我的问题是因为“ row.col”一开始似乎比较容易,它还涉及从/到字符串/数字的多次转换,并且可能存在性能问题。(我是ruby的新手,所以我不确定)

ruby oop hash performance design-patterns

3
推荐指数
1
解决办法
546
查看次数

使用lambda表达式创建AlertDialog

我的Android工作室设置如下:

    classpath "me.tatarka:gradle-retrolambda:3.2.2"
    classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用lambdas知道我能做什么或不做什么.

当我做以下代码时:

    alertDialogBuilder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
Run Code Online (Sandbox Code Playgroud)

IDE变灰了,new DialogInterface.OnClickListener()告诉我它可以用lambda替换.没有更多或更少.看了几个 例子.我尝试过这样的事情:

    alertDialogBuilder.setPositiveButton("Okay", (DialogInterface dialog) -> {
            dialog.cancel();
    });
Run Code Online (Sandbox Code Playgroud)

还有这些:

alertDialogBuilder.setNegativeButton((DialogInterface) d -> d.cancel());
Run Code Online (Sandbox Code Playgroud)

其中的错误:

错误:(99,64)错误:不兼容的类型:DialogInterface不是功能接口在接口DialogInterface中找到的多个非重写抽象方法

在这种情况下我应该如何使用lambda?

lambda android java-8 android-alertdialog retrolambda

3
推荐指数
1
解决办法
2313
查看次数

为什么C标准C11在gcc中不是默认值?

如果你看一下标准,你可以看到它们确实包括对C11和C99的支持.但是如果你试图在没有指定标准的情况下编译代码,GCC仍然会使用C89/C90.

这背后的原因是什么?

我的意思是在其他语言中,通常每当发布新标准时,编译器将被设置为遵循新规则.

为什么这种行为与gcc编译器不一样?

c standards gcc

2
推荐指数
1
解决办法
2342
查看次数

Java Lambda从列表中获取元素

我有以下代码,它使用好旧的java:

List<Bar> repo = ArrayList<>();
public Bar foo(int id) {
    for(Bar c: repo){
        if(c.getId() == id)
            return c;
    }
    Bar target = new Bar();
    target.setFooo("");
    target.setId(0);
    return target;
}
Run Code Online (Sandbox Code Playgroud)

但是,我试图让它变得更好一些(即只是想学习lambdas)

public Bar foo(int id) {
    Bar target = repo.stream().filter(c -> c.getId() == id)
               .findFirst().orElse(null);
    if(target == null){  
        target = new Bar();
        target.setFooo("");
        target.setId(0);
    }
    return target;
}
Run Code Online (Sandbox Code Playgroud)

但上面的代码返回一个ArrayOutOfBounds异常,我不确定如何(因为它是一个列表)或为什么.

java lambda java-8 java-stream

1
推荐指数
1
解决办法
971
查看次数