基础不好,麻烦大家了
这是一个登陆界面,就一问,问题在提交的页面有几问是要问的
-----------------------------------------------------------
这之间的就是问题,怕大家不好找,呵呵
-----------------------------------------------------------
<html>
<head>
<title>Untitled</title>
</head><body><table align="center" border="0" width="760" cellspacing="0" cellpadding="0" height="355">                  
<tr>                  
<td width="150" height="355" valign="top">                  
           
</td>                  
<td width="10" height="100%"></td>
<td width="1" height="100%" bgcolor="#3399ff"></td>
<td width="10" height="100%"></td>
<td width="589" height="331" valign="top" background="images/bg1.gif">                       
        <table border="0" width="100%" cellspacing="0" cellpadding="0" height="307">                  
          <tr>                  
            <td width="100%" colspan="2" height="20" bgcolor="#3399ff">&nbsp;<font color="#ffffff">成员登录</font>       
</td>
  </tr>--------------------------------------------------------------------
      <form action="webmailservlet.login" method="post">   //书上是这样写的,我想的问就是这个action要跟相对或是绝对路径吗?要把包名一起写上吗?只用login不可以吗?还有这个login是指.java还是.class呢
-------------------------------------------------------------------
<tr><td align="right" height="32" width="40%">名字:</td>
            <td>
              <input type="hidden" name="returl" value="">
  <input type="text" name="logname" value="">
            </td>
          </tr>
          <tr> 
            <td align="right"  height="32">密码:</td>
            <td>
              <input type="password" name="logpass">
            </td>
          </tr>
          <tr> 
            <td align="center" colspan="2" height="32"> | 
  <a href="findpass.jsp">密码忘了,找一下</a> | 
  <a href="reg.jsp">注册新用户</a> |
              <input type="submit" name="login" value="登录!">
            </td>
          </tr>
  </form>
<tr> 
  <td colspan="2" align="right">&nbsp;</td> </tr>
   
        </table>                  
        </td>
    </tr>
  </table></body>
</html>提交页面package webmailservlet;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;public class login extends HttpServlet {
  private static final String CONTENT_TYPE = "text/html; charset=GBK";
  public void init() throws ServletException {
    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    try {
      Class.forName(sDBDriver);
    }
    catch(java.lang.ClassNotFoundException e) {
      System.err.println( e.getMessage());
    }
  }
  public ResultSet executeQuery(String sql) {
    String sConnStr = "jdbc:odbc:webmail";
    Connection connect = null;
    ResultSet rs = null;
    rs = null;
    try {
      connect = DriverManager.getConnection(sConnStr);
      Statement stmt = connect.createStatement();
      rs = stmt.executeQuery(sql);
    }
    catch(SQLException ex) {
      System.err.println(ex.getMessage());
    }
    return rs;
  }
  public String getStr(String str)
  {
try
{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t);
return temp;
}
catch(Exception e)
{ }
-------------------------------------------------------------------------------------
return "null";  //有它与没有它有什么区别吗?还有如果是return "";可以吗?
--------------------------------------------------------------------------------------
  }
--------------------------------------------------------------------------------------
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   //什么时候调用doGet和下面的doPost呢,怎么知道要用哪个呢?在这里好像它们没有什么区别呀,都有PrintWriter out = response.getWriter();这条语句呀
-----------------------------------------------------------------------------------------
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<font color=\"green\">");
    out.println("<p>The servlet get method is the reply.</p>");
    out.println("</font>");  }
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>login</title></head>");
    out.println("<body>");
    out.println("</body></html>");
       String logname,logpass;
      boolean loginAttempt = false;
      boolean loginOK = false;
      String errorMessage = "请您登陆";
      HttpSession session=request.getSession(true);
-------------------------------------------------------------------
       if(request.getParameterValues("login") != null   //这个login什么意思呀,可以没它吧?
-------------------------------------------------------------------------
&&request.getParameterValues("logname") != null
&&request.getParameterValues("logpass") != null)
{
loginAttempt = true;
}
if (loginAttempt)
{
logname=request.getParameter("logname");
logpass=request.getParameter("logpass");
logname=getStr(logname);
logpass=getStr(logpass);
String sql="select * from member where logname='"+logname+"' and password='"+logpass+"'";
out.println(sql);
ResultSet RS=executeQuery(sql);
int rowscount=0;
try
{
while(RS.next())
{
rowscount++;
}
}
catch(Exception e)
{ }
out.println(rowscount);
if(rowscount!=0)
{
errorMessage="成功登陆";
session.setAttribute("username",logname);
loginOK=true; if(loginOK){
response.sendRedirect("../webmail_sev/main.jsp");
}
}else{
errorMessage="loginerr";
session.setAttribute("username","");
---------------------------------------------------------------------------------
          response.sendRedirect("../webmail_sev/login.jsp?err="+errorMessage);  //这是啥意思呀?是不是就是给出个错误提示呢?没有别的意思吧?
-------------------------------------------------------------------------------------
}
}
  }
  /**Clean up resources*/
  public void destroy() {
  }
}

解决方案 »

  1.   

    这个action要跟相对或是绝对路径吗?要把包名一起写上吗?只用login不可以吗?还有这个login是指.java还是.class呢 (要看你的web.xml怎么配置的) return "null";  //有它与没有它有什么区别吗?还有如果是return "";可以吗? (null 和 "" 是不同的,此例中返回的是一个内容为“null”的字符串,与null和"" 无关) //什么时候调用doGet和下面的doPost呢,怎么知道要用哪个呢?在这里好像它们没有什么区别呀,都有PrintWriter out = response.getWriter();这条语句呀  (doPost 和doGet分别对应<action 里面的method的post和get方法。)if(request.getParameterValues("login") != null   //这个login什么意思呀,可以没它吧?
    (login对应 <input type="submit" name="login" value="登录!"> 的name)
    response.sendRedirect("../webmail_sev/login.jsp?err="+errorMessage);  //这是啥意思呀?是不是就是给出个错误提示呢?没有别的意思吧?
    (页面跳转,用get方法传递err参数,目的应该是在跳转页面给出错误信息)
      

  2.   

    1.<form action="webmailservlet.login" method="post">   //书上是这样写的,我想的问就是这个action要跟相对或是绝对路径吗?要把包名一起写上吗?只用login不可以吗?还有这个login是指.java还是.class呢
    ***->一般是相对路径,在java中class文件路径必须与包名一致,才能访问,你这个当然是class文件,.java文件怎么能执行呢?
    2.doPost()和doGet()方法是两种不同的参数提交方式,分别对应post和get方式,get方式就是把参数跟在url中,而post方式把数据放在专名的区域,服务器来读取(这个不太准确)
    3.response.sendRedirect("../webmail_sev/login.jsp?err="+errorMessage);  //这是啥意思呀?是不是就是给出个错误提示呢?没有别的意思吧?
    ****->这个表示登陆不成功,转到错误处理页面;
      

  3.   

    什么时候调用doGet和下面的doPost呢,怎么知道要用哪个呢?在这里好像它们没有什么区别呀,都有PrintWriter out = response.getWriter();这条语句呀
    (不好意思,刚才打错了,是对应<form 里面的method的post和get方法。))
      

  4.   

    谢谢楼上二位
    3.response.sendRedirect("../webmail_sev/login.jsp?err="+errorMessage);  //这是啥意思呀?是不是就是给出个错误提示呢?没有别的意思吧?
    ****->这个表示登陆不成功,转到错误处理页面;
    这个页面不还是("../webmail_sev/login.jsp?err="+errorMessage);这个吗?不过是在后面加个错误信息,好像没有跳转呀
      

  5.   

    2.doPost()和doGet()方法是两种不同的参数提交方式,分别对应post和get方式,
    但登陆界面里的FORM里只有一个POST呀,并没有GET呀
    为什么在提交页面里有GET呢
      

  6.   

    这个页面不还是("../webmail_sev/login.jsp?err="+errorMessage);这个吗?不过是在后面加个错误信息,好像没有跳转呀
    ------有跳转,response.sendRedirect(url)将使浏览器向url所指地址另外发起一次请求.中间有一次往返的过程.
    但登陆界面里的FORM里只有一个POST呀,并没有GET呀
    为什么在提交页面里有GET呢
    ------servlet可以接受两种请求方式,而登陆页面可以选择其中任一方式提交参数.至于怎么处理,就看servlet自己了,比如你这个例子就只处理post方式提交的参数,对于get方式只返回一段绿色文字The servlet get method is the reply.
      

  7.   

    但登陆界面里的FORM里只有一个POST呀,并没有GET呀
    为什么在提交页面里有GET呢
    ------servlet可以接受两种请求方式,而登陆页面可以选择其中任一方式提交参数.至于怎么处理,就看servlet自己了,比如你这个例子就只处理post方式提交的参数,对于get方式只返回一段绿色文字The servlet get method is the reply.
    那可不可以不要这个doGet方法呢?只有doPost
      

  8.   

    response.sendRedirect("../webmail_sev/login.jsp?err="+errorMessage);  //这是啥意思呀?是不是就是给出个错误提示呢?没有别的意思吧?
    这个我想我知道它会跳转到("../webmail_sev/login.jsp?这个页面那它后跟个err="+errorMessage这是一个页面吗?