编辑:问题是双重的,第一个字典应该是静态的,我也在使用.contains()我应该使用.containsKey()
我试图做一个简单的java客户端和服务器设置,这是我所拥有的,我似乎无法找到我做的方式有任何问题,但无论何时我运行代码我得到输出:
Result = Added
Result = This word is not in the dictionary, please use the add function.
这告诉我,当我添加一个单词时,服务器不存储所做的更改地图,是否有一些非常简单的我在这里缺少?
如果被问到,我可以添加所需的更多信息。
这是我的客户代码:
public class Client {
@WebServiceRef(wsdlLocation =
"http://localhost:8080/P1Server/ServerService?wsdl")
public static void main(String[] args) {
try {
package1.ServerService service = new package1.ServerService();
package1.Server port = service.getServerPort();
String result = port.addWord("Test", "This is a test.");
System.out.println("Result = " + result);
result = port.getDefiniton("Test");
System.out.println("Result = " + result);
}catch(Exception ex)
{
System.out.println("Gone Wrong");
}
这是我的相关服务器代码:
@WebService
public class Server {
private **static**ConcurrentHashMap<String,String> dictionary;
public Server() {
this.dictionary = new ConcurrentHashMap<>();
}
@WebMethod
public String addWord(String word, String definition){
if(dictionary.contains(word.toLowerCase())){
return "This word is already in the dictionary, "
+ "please use the update function.";
}else{
dictionary.put(word.toLowerCase(), definition);
return "Added";
}
}
@WebMethod
public String getDefiniton(String word){
if(dictionary.contains(word.toLowerCase())){
return dictionary.get(word);
}else{
return "This word is not in the dictionary, "
+ "please use the add function.";
}
}
答案 0 :(得分:0)
Web服务本质上是无状态的。每个Web请求都将获得自己的上下文和实例。因此,服务于port.addWord()请求的服务器实例可能与服务于port.getDefinition()的实例不同。在这种情况下,将结果放入其中的字典映射与用于检索结果的字典映射不同。
为了使其工作,数据需要以某种方式在服务器端保留。这可以通过数据库完成。或者,如果您只是为了测试目的而执行此操作,请将字典的定义更改为静态,以便所有Server实例共享相同的映射。
答案 1 :(得分:0)
将 词典 定义为静态变量。因此,在服务器端创建的每个Web服务实例实例都将使用相同的字典来放置/获取数据。
private static ConcurrentHashMap<String,String> dictionary;
答案 2 :(得分:0)
您的问题与Web服务无关。 问题在于你的逻辑
按如下方式修改方法:
public String addWord(String word, String definition) {
if (dictionary.containsKey(word.toLowerCase())) {
return "This word is already in the dictionary, "
+ "please use the update function.";
} else {
dictionary.put(word.toLowerCase(), definition);
return "Added";
}
}
public String getDefiniton(String word) {
if (dictionary.containsKey(word.toLowerCase())) {
return dictionary.get(word.toLowerCase());
} else {
return "This word is not in the dictionary, "
+ "please use the add function.";
}
}
它会起作用。 希望这会有所帮助。