LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1553|回复: 8

servlet传session

[复制链接]
发表于 2004-6-21 09:55:16 | 显示全部楼层 |阅读模式
有个问题,请先看代码
1 RegistServlet.java
[php]
import java.sql.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class RegistServlet extends HttpServlet
{
        private Connection con = null;
       
        private ResultSet rs = null;
        private RequestDispatcher dispatcher = null;
        private HttpSession session = null;

        public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
        {
                doPost(request,response);
        }

        public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
        {
                String userName = request.getParameter("userName");
                String userPassword = request.getParameter("userPassword");
                String userLevel = request.getParameter("userLevel");
                String str = "SELECT username FROM userlogin WHERE username=? AND userpassword=?";
                int flag = 0;
                if(userName.equals("null"))
                {
                        dispatcher = getServletContext().getRequestDispatcher("/jxd/error.html");
                        dispatcher.forward(request,response);
                }
                if(userPassword.equals(null))
                {
                        dispatcher = getServletContext().getRequestDispatcher("/jxd/error.html");
                        dispatcher.forward(request,response);
                }
                if(userLevel.equals(null))
                {
                        dispatcher = getServletContext().getRequestDispatcher("/jxd/error.html");
                        dispatcher.forward(request,response);
                }
                try
                {
                        Class.forName("com.mysql.jdbc.Driver").newInstance();
                        con = DriverManager.getConnection("jdbc:mysql://192.168.2.160/jxd?user=root&password=&useUnicode=true");
                        PreparedStatement pstmt = con.prepareStatement(str);
                        pstmt.setString(1,userName);
                        pstmt.setString(2,userPassword);
                        ResultSet rs = pstmt.executeQuery();
                        if(rs.next())
                        {
                                flag = 1;
                        }
                        rs.close();
                        pstmt.close();
                        con.close();
                        if(flag == 1)
                        {
                                dispatcher = getServletContext().getRequestDispatcher("/jxd/samename.jsp");
                                dispatcher.forward(request,response);
                        }
                        if(flag == 0)
                        {
                                insert(userName,userPassword,userLevel);
                                if(userLevel.equals("0"))
                                {
                                        HttpServletRequest hreq = (HttpServletRequest)request;
                                        session = hreq.getSession();
                                        session.setAttribute("userName",userName);
                                        dispatcher = getServletContext().getRequestDispatcher("/jxd/admi.jsp");
                                        dispatcher.forward(request,response);
                                }
                                if(userLevel.equals("1"))
                                {
                                        HttpServletRequest hreq = (HttpServletRequest)request;
                                        session = hreq.getSession();
                                        session.setAttribute("userName",userName);
                                        dispatcher = getServletContext().getRequestDispatcher("/jxd/area.jsp");
                                        dispatcher.forward(request,response);
                                }
                                if(userLevel.equals("2"))
                                {
                                        HttpServletRequest hreq = (HttpServletRequest)request;
                                        session = hreq.getSession();
                                        session.setAttribute("userName",userName);
                                        dispatcher = getServletContext().getRequestDispatcher("/jxd/normal.jsp");
                                        dispatcher.forward(request,response);
                                }
                               
                        }
                }
                catch(ClassNotFoundException e)
                {
                        e.printStackTrace();
                }
                catch(InstantiationException e)
                {
                        e.printStackTrace();
                }
                catch(IllegalAccessException e)
                {
                        e.printStackTrace();
                }
                catch(SQLException e)
                {
                        e.printStackTrace();
                }
        }

        public void insert(String userName,String userPassword,String userLevel)
        {
                try
                {
                        Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://192.168.2.160/jxd?user=root&password=&useUnicode=true");
                        String str = "INSERT INTO userlogin VALUES(?,?,?,?,?,?)";
                        PreparedStatement pstmt = con.prepareStatement(str);
                        pstmt.setString(1,userName);
                        pstmt.setString(2,userPassword);
                        pstmt.setString(3,userLevel);
                        pstmt.setString(4,null);
                        pstmt.setString(5,null);
                        pstmt.setString(6,null);
                        pstmt.executeUpdate();
                        pstmt.close();
                        con.close();
                        return;
                }
                catch(ClassNotFoundException e)
                {
                        e.printStackTrace();
                }
                catch(InstantiationException e)
                {
                        e.printStackTrace();
                }
                catch(IllegalAccessException e)
                {
                        e.printStackTrace();
                }
                catch(SQLException e)
                {
                        e.printStackTrace();
                }

        }
}
[/php]

2 area.jsp
[php]
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<title>所管区域注册</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<p>
  <%
String userName = (String)request.getAttribute("userName");
request.setAttribute("userName",userName);
%>
  欢迎您, <%=userName%>区域管理员 请继续注册您管理的区域</p>
<form name="form1" method="post" action="/jxd/RegistAreaServlet">
  <table width="75%" border="0">
    <tr>
      <td width="48%">
       </td>
      
    </tr>
    <tr>
      <td colspan="2"><div align="center">
          <input type="submit" name="Submit" value="注册">
        </div></td>
    </tr>
  </table>
</form>
<p>&nbsp; </p>
</body>
</html>

[/php]

就是session怎么没传过去???谢谢了
 楼主| 发表于 2004-6-21 11:08:11 | 显示全部楼层

re

解决了,谢谢!
 楼主| 发表于 2004-6-21 11:39:48 | 显示全部楼层

re

不过还有个怪问题,在tomcat 上运行正常,但是在resin上却出现405 post not supported的问题,为什么?:ask
发表于 2004-6-21 12:40:18 | 显示全部楼层
你的程序毛病太多了。。。唉
 楼主| 发表于 2004-6-21 14:05:10 | 显示全部楼层

re

是多,你找到怎么解决405的问题了吗?
发表于 2004-6-21 14:26:45 | 显示全部楼层
什麼是resin?....
发表于 2004-6-22 12:57:20 | 显示全部楼层
if(userName.equals("null"))
?????
if( userName == null || "".equals( userName ) )
还有
            pstmt.close();
            con.close();
最好放到最外面的finally里,否则可能 con 不会被释放
其他的实在看不下去了。
发表于 2004-6-24 13:55:56 | 显示全部楼层
建议找点经典代码看,看看别人是怎么写的 。

比如jive...
发表于 2004-6-24 20:21:44 | 显示全部楼层
挑挑毛病:
1,你喜欢特别ctrl+c,ctrl+v吗?
session = hreq.getSession();
session.setAttribute("userName",userName);
                    dispatcher = getServletContext().getRequestDispatcher("/jxd/normal.jsp");
                    dispatcher.forward(request,response);

session这个完全可以放到if...条件前面。。。
转向你可以用一个方法。。。
[PHP]
private void gotoPage(
                HttpServletRequest request,
                HttpServletResponse response,
                String url)
                throws ServletException, IOException {
                RequestDispatcher dispatcher = request.getRequestDispatcher(url);
                dispatcher.forward(request, response);

        }

[/PHP]
如果你够懒,和我一样,你可以用eclipse重构。。。它会自动帮你生成这个方法。。。

2,insert method会抛出这么多的异常吗,,,
catch(ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch(InstantiationException e)
        {
            e.printStackTrace();
        }
        catch(IllegalAccessException e)
        {
            e.printStackTrace();
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }


3。这里看不出你用session作什么。。。

4.为什么还要强制转化
HttpServletRequest hreq = (HttpServletRequest)request;

5,""和null,str==null 和"".equals(str)是有区别的。。。
equals是比较内容,==是比较地址。。。
如:
[PHP]
class Test{
public static void main(String args[]){
String a="123";
String b=new String("123");
System.out.println("a==b:"+(a==b));
System.out.println("a.equals(b):"+a.equals(b));

}

}

[/PHP]
结果是
hantsy@linux:~> java Test
a==b:false
a.equals(b):true

再看看这个。。。
[PHP]
class Test{
public static void main(String args[]){
String a="123";
String b=new String("123");
String c=null;
System.out.println("a==b:"+(a==b));
System.out.println("a.equals(b):"+a.equals(b));
System.out.println("c==null:"+(c==null));
System.out.println("a.equals(null):"+a.equals(null));
System.out.println("c.equals(null):"+c.equals(null));
}

}
[/PHP]
编译正常,输出:
hantsy@linux:~> java Test
a==b:false
a.equals(b):true
c==null:true
a.equals(null):false
Exception in thread "main" java.lang.NullPointerException
        at Test.main(Test.java:10)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表