I’m trying to output Java to HTML using a CGI script for class.
I’m wondering why I can’t seem to be able to properly compare the values of the variables that I’m checking for. The code works, but doesn’t manage to compare the variables and doesn’t end the HTML code properly. It somehow never reaches to the end of the code for some reason. (never writes out the ending body and html tags)
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>");
}
}
The CGI file that I’m using – post.cgi (located at /cgi-bin/post.cgi)
#!/bin/sh
java post
The HTML file that I’m using to allow input:
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 you could please point out anything that is likely the problem… the debug output works, as in it manages to output the variable values, but totally ignores the if statements for some reason.
Because you’re comparing string references for equality, rather than the contents of strings. Every time you use something like:
you want:
or if
citymay be null:Applying
==and!=to references always just compares the references in Java – there’s no operator overloading to allow for the contents of the objects to be compared.