我正在尝试使用CGI脚本将Java输出到HTML。
我想知道为什么我似乎无法正确比较我正在检查的变量的值。代码有效,但无法比较变量,也无法正确结束HTML代码。由于某种原因,它永远不会到达代码的末尾。 (从不写出结束体和html标签)
post.java
import java.io.*;
public class post {
public static void main(String [] args) {
System.out.println("Content-Type: text/html\n\n");
System.out.println("<HTML><BODY>");
System.out.println("<h1>Here is your stupid user report:</h1>");
String fullname = "";
String address = "";
String city = "";
String state = "";
String washhands = "";
String takeshower = "";
boolean stupidity = false;
String comments = "";
String data = "";
try {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
data = br.readLine();
} catch(IOException ioe) {
System.out.println ("IOException reading POST data: " + ioe);
}
if (data.length() > 0) {
String[] paramArray = data.split("&");
for(String param : paramArray){
String[] paramVals = param.split("=");
String paramName = paramVals[0];
System.out.println(paramName + "<br/>");
String paramVal = paramVals[1];
System.out.println(paramVal + "<br/>");
if (paramName == "fullname") fullname = paramVal;
if (paramName == "address") address = paramVal;
if (paramName == "city") city = paramVal;
if (paramName == "state") state = paramVal;
if (paramName == "washhands") washhands = paramVal;
if (paramName == "takeshower") takeshower = paramVal;
if (paramName == "stupidity") stupidity = true;
if (paramName == "comments") comments = paramVal;
}
System.out.println("HELLOOOOO");
if (fullname != ""){
System.out.println("Here we have <font color=blue>" + fullname + "</font> ");
}
if (fullname == ""){
System.out.println("Here's a <i>nobody</i> ");
}
if (address != ""){
System.out.print("who lives on <font size=20>" + address + "</font> ");
}
if (city != ""){
System.out.print("from the city of <u>" + city + "</u> ");
}
if (state != ""){
System.out.print("in the state of <b><u>" + state + "</u></b> ");
}
if (washhands != ""){
if (washhands == "no") System.out.print("who <b>doesn't</b> wash his/her hands after using the bathroom...");
if (washhands == "yes") System.out.print("who washes his/her hands after using the bathroom...");
}
if (takeshower != ""){
if (takeshower == "everyday") System.out.println("<center>He/she takes a shower everyday.</center>");
if (takeshower == "never") System.out.println("<center>He/she never takes a shower.</center>");
}
if (stupidity == true){
System.out.println("<tt>He/she is stupid.</tt>");
}
if (comments != ""){
System.out.println("<h3>Here are what he thinks about this assignment:" + comments + "</h3>");
}
}
System.out.println("</BODY></HTML>");
}
}
我正在使用的CGI文件 - post.cgi(位于/cgi-bin/post.cgi)
#!/bin/sh
java post
我用来允许输入的HTML文件: post.html
<html>
<head>
<title>Lab 9 Form</title>
</head>
<body>
<h1>Embarrassing questions form</h1>
<form action="../cgi-bin/post.cgi" method="post" name="embarassmentform">
<label for="fullname">Name</label>
<input type="text" name="fullname" id="fullname" />
<br/><label for="address">Address</label>
<input type="text" name="address" id="address" />
<br/><label for="city">City</label>
<input type="text" name="city" id="city" />
<br/><label for="selectastate">State</label><select name="selectastate">
<option>NY</option>
<option>FL</option>
</select>
<p/>
<label for="washhands">Do you wash your hands after using the bathroom?</label>
<br/><input type="radio" name="wash" value="yes">Yes</input>
<br/><input type="radio" name="wash" value="no">No</input>
<p/>
<label for="takeshower">How often do you take a shower?</label>
<br/><input type="radio" name="shower" value="everyday">Every day</input>
<br/><input type="radio" name="shower" value="never">Never</input>
<p/>
<input type="checkbox" name="stupidity" value="stupid"/><label for="stupidity">Check this box if you're stupid.</label>
<p/>
<label for="comments">Questions and comments can go here</label><br/><textarea name="comments"></textarea>
<br/><input type="submit" name="submitButton" value="Submit the form" />
</form>
</body></html>
如果你能指出任何可能出现问题的东西......调试输出有效,因为它设法输出变量值,但由于某种原因完全忽略了if语句。
答案 0 :(得分:2)
我想知道为什么我似乎无法正确比较我正在检查的变量值。
因为您要比较字符串引用是否相等,而不是字符串的内容。每次你使用类似的东西:
if (city != "")
你想要:
if (!city.equals(""))
或city
可能为null:
if (!"".equals(city))
将==
和!=
应用于引用总是只是比较Java中的引用 - 没有运算符重载以允许对象的内容为比较。