【发布时间】:2014-03-09 14:02:04
【问题描述】:
我正在开发一个需要用户登录的 Java 程序,但是当结束 HTTP 请求并尝试读取输出时,它会返回 HTTP 响应代码 500。
Login.java中的代码如下:
package net.discfiresoftworks.chat;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
public class Login extends JFrame
{
private static final long serialVersionUID = 1L;
public JTextField user = new JTextField();
public JPasswordField pass = new JPasswordField(20);
public JButton submit = new JButton("Log In");
public JButton create = new JButton("Sign-Up");
public JPanel main = new JPanel();
public JPanel buttons = new JPanel();
public Login()
{
setTitle("DiscFire Account Login");
setSize(350, 180);
setDefaultCloseOperation(3);
setLayout(new FlowLayout(1));
setLocationRelativeTo(null);
setResizable(false);
getContentPane().setBackground(new Color(50, 50, 50));
user.setColumns(20);
pass.setColumns(20);
pass.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(10, 0, 10, 0), pass.getBorder()));
submit.setBorder(BorderFactory.createLineBorder(Color.GRAY, 1));
create.setBorder(BorderFactory.createLineBorder(Color.GRAY, 1));
submit.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
String password = new String(pass.getPassword());
sendRequest(user.getText(), password);
}
});
create.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
}
});
buttons.setLayout(new FlowLayout());
buttons.add(submit);
buttons.add(create);
main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));
main.setBorder(BorderFactory.createLineBorder(Color.WHITE, 10));
main.add(user);
main.add(pass);
main.add(buttons);
add(main);
}
public void open()
{
setVisible(true);
}
public void sendRequest(String user, String pass)
{
String output = "";
try
{
String urlParameters = "user=" + URLEncoder.encode(user,"UTF-8") + "&pass=" + URLEncoder.encode(pass,"UTF-8");
URL url = new URL("http://www.discfiresoftworks.net/plogin.php");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
connection.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
System.out.println(urlParameters);
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
output = in.readLine();
in.close();
connection.disconnect();
}catch(Exception e){
e.printStackTrace();
}
String sid = (output.split(":"))[0];
String admin = (output.split(":"))[1];
System.out.println(sid = " " + admin);
}
}
plgin.php中的代码如下:
<?php
include 'includes/conn.php';
include 'includes/hash.php'
session_start();
if(isset($_POST['user']) && isset($_POST['pass'])){
$user = $_POST['user'];
$password = $_POST['pass'];
if(isset($_POST['redir'])){
$redir = $_POST['redir'];
}else{
$redir = '';
}
$query = $conn->prepare("SELECT Password, Verified, Admin FROM Users WHERE Name=?");
$query->bind_param('s', $user);
if($query->execute()){
$query->bind_result($hash, $ver, $admin);
while($query->fetch()){
if($ver == "T"){
if($query->num_rows > 0){
if(validate_password($password, $hash)){
$_SESSION['user'] = $user;
$msg = session_id() . ':' . $user;
}else{
$msg = 'Incorrect username or password';
}
}else{
$msg = 'Incorrect username or password';
}
}else{
$msg = 'Your account has not been verified, please check your email and do so now if you wish to continue.';
}
}
}else{
$msg = $query->errno . " " . $query->error;
}
}else{
$msg = 'Missing username or password';
}
echo $msg;
?>
先谢谢了,希望你能帮助我:)
编辑:我知道这不是 conn.php 或 hash.php 的错误,因为我之前都使用过它们并且它们都可以正常工作。
编辑:堆栈跟踪:
java.io.IOException: Server returned HTTP response code: 500 for URL: http://www.discfiresoftworks.net/plogin.php
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at net.discfiresoftworks.chat.Login.sendRequest(Login.java:116)
at net.discfiresoftworks.chat.Login$1.actionPerformed(Login.java:58)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
at net.discfiresoftworks.chat.Login.sendRequest(Login.java:128)
at net.discfiresoftworks.chat.Login$1.actionPerformed(Login.java:58)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
【问题讨论】:
-
是否有堆栈跟踪来自:catch(Exception e){ e.printStackTrace(); } ?
-
那里,我给你加了