解决方案 »
- DTO字段类型与数据库列名不一致的问题
- 使用html:select 标签报错。。。。求救~~~
- MAP里放LIST集合,怎么用JSTL循环输出
- 急问,用CXF做的web项目含一个webservice,Tomcat下可以运行,在Weblogic 下启动时报如下的错(在线等)
- 求各位大虾帮忙!
- ant
- 在线急等!resin虚拟路径配置问题,为什么图片显示不了?
- 请问web.xml文件中这段语句是什么意思?
- 连数据库出现的错误,请大家帮忙啊!一解决问题就结帖,哈哈
- 请问 servlet 的过期问题
- 关于tomcat的JDBCRealm认证、授权,有一点弄不明白,高手指教!!!!
- iterator循环中最后一道循环?
<head>
<title>登陆页面</title>
</head>
<body>
<form action="login.jsp?action=login" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td>
<input type="hidden" name="origin_uri" value="${requestScope.origin_uri}">
</td>
</tr>
<tr>
<td><input type="reset" value="重填"></td>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form
</body>
</html>
我是用一个过滤器来处理!import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;import javax.naming.NamingException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class LoginFilter implements Filter
{
private static final String LOGIN_URI="login_uri";
private static final String HOME_URI="home_uri";
private String login_page;
private String home_page;
public void init(FilterConfig filterConfig) throws ServletException
{
//从部署描述符中获取登陆页面和首页的URI
login_page=filterConfig.getInitParameter(LOGIN_URI);
home_page=filterConfig.getInitParameter(HOME_URI);
if(null==login_page || null==home_page)
throw new ServletException("没有指定登陆页面或主页!");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
//将请求对象和相应对象的类型转换为HttpServletRequest和HttpServletResponse
HttpServletRequest httpReq=(HttpServletRequest)request;
HttpServletResponse httpResp=(HttpServletResponse)response;
HttpSession session=httpReq.getSession();
//得到用户请求的uri
String request_uri=httpReq.getRequestURI();
//得到web应用程序的上下文路径
String ctxPath=httpReq.getContextPath();
//去除上下文路径,得到剩余部分的路径
String uri=request_uri.substring(ctxPath.length());
//判断用户访问的是否是登陆页面
if(login_page.equals(uri))
{
//如果是登陆页面,则通过查看是否有附加的查询参数,来判断用户是访问登陆页面,还是提交登录信息
String strLogin=httpReq.getParameter("action");
if("login".equals(strLogin))
{
//如果是提交登录信息,则对用户进行验证
String name=httpReq.getParameter("name");
String password=httpReq.getParameter("password");
UserBean user=new UserBean(name,password);
UserCheckBean uc=new UserCheckBean(user);
//返回true 说明在数据库中验证成功
if(uc.validate())
{
//验证通过后,在Session对象中设置isLogin属性为true
session.setAttribute("isLogin","true");
//在session对象中保存用户名
session.setAttribute("user",name);
//从请求对象中取出用户先前访问页面的URI
String origin_uri=httpReq.getParameter("origin_uri");
if(null!=origin_uri && !"".equals(origin_uri))
httpResp.sendRedirect(origin_uri); //重定向到用户先前访问页面
else
httpResp.sendRedirect(ctxPath+home_page); //重定向到首页
return;
}
else
{
//验证失败,则从请求中获取用户先前访问页面的URI
//如果该URI存在,则再次将它作为origin_uri属性的值保存到请求对象中
String origin_uri=httpReq.getParameter("origin_uri");
if(null!=origin_uri && !"".equals(origin_uri))
{
httpReq.setAttribute("origin_uri",origin_uri);
}
httpResp.setContentType("text/html;charset=gb2312");
PrintWriter out=httpResp.getWriter();
out.println("<h2>用户名或密码错误,请重新输入</h2>");
RequestDispatcher rd=httpReq.getRequestDispatcher(login_page);
rd.include(httpReq,httpResp);
return;
}
}
else
{
//不是提交登录信息
chain.doFilter(request,response);
return;
}
}
else
{
//如果访问的不是登陆页面,则判断用户是否已经登陆
String isLogin=(String)session.getAttribute("isLogin");
if("true".equals(isLogin))
{
chain.doFilter(request,response);
return;
}
else
{
//若用户没有登录,则将用户的请求URI作为origin_uri属性的值,保存到请求对象中去
String strQuery=httpReq.getQueryString();
if(null!=strQuery)
{
request_uri=request_uri+"?"+strQuery;
}
httpReq.setAttribute("origin_uri",request_uri);
RequestDispatcher rd=httpReq.getRequestDispatcher(login_page);
rd.forward(httpReq,httpResp);
return;
}
}
}
public void destroy() {}
}
import java.sql.SQLException;import javax.naming.NamingException;import com.db.DBBean;public class UserCheckBean
{
protected UserBean user;
public UserCheckBean(UserBean user)
{
this.user=user;
}
public UserBean getUser()
{
return user;
}
public void setUser()
{
this.user=user;
}
public boolean validate()
{
String name=user.getName();
String password=user.getPassword();
boolean b=false;
try
{
DBBean db=new DBBean();
UserBean ub=db.getUser(name, password);
if(null==ub)
b=false;
else
b=true;
}
catch(Exception e)
{
e.printStackTrace();
}
return b;
}
}
import java.io.*;public class UserBean implements Serializable
{
private String name;
private String password;
public UserBean(String name,String password)
{
this.name=name;
this.password=password;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name=name;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password=password;
}
}
改了还是不行~~~~而且~~~我将UserCheckBean.java中的validate()方法改成了如下~~~~~~就会抛出一个空指针异常! public boolean validate()
{
String name=user.getName();
String password=user.getPassword();
boolean b=false;
try
{
DBBean db=new DBBean();
UserBean ub=db.getUser(name, password);
if(name.equals(ub.getName()) && password.equals(ub.getPassword())) //这里会抛出空指针异常
b=true;
else
b=false;
}
catch(Exception e)
{
e.printStackTrace();
}
return b;
}
UserBean user=null;
if(rs.next())
{
user=new UserBean(rs.getString(1),rs.getString(2));
/*UserBean就是一个简单的javaBean,下面是它的构造函数
public UserBean(String name,String password)
{
this.name=name;
this.password=password;
}
*/
}对结果集数据的读取需要进行循环迭代。if只是判断结果集是否为空,取值应该使用while循环。
修改如下:while(rs.next()){
user=new UserBean(rs.getString(1),rs.getString(2));
/*UserBean就是一个简单的javaBean,下面是它的构造函数
public UserBean(String name,String password)
{
this.name=name;
this.password=password;
}
*/
}从结果集中取值 与从集合Iterator中一样。
例如: Iterator it=(new ArrayList()).iterator();
while(it.hasNext()){
Object obj=(Object )it.next();
**********
}
1.。的意思是说数据提交的时候在过滤器里面取出的时候就有可能变成乱码不是中文,和数据库比较的时候就不对了。
2.。。的意思的resultset的值只能循环一次,先用后面的前面的就变成null了。这点好像关系不大。
给你个中文处理类,你调用下应该就可以了.
public class Dbconver {
public String cvert(String s){
try{
return new String (s.getBytes("ISO-8859-1"),"GB2312");
}catch(Exception e){
return null;
}
}
}
String name=httpReq.getParameter("name");
String password=httpReq.getParameter("password");
估計是这里出现乱码,你答应这两个参数出来看看是否有乱码
而且我把数据库内容改成英文后,输入数据库中保存的name和password时,
IE会报错:HTTP Status 404 - /workProject/${requestScope.origin_uri}请问这是怎么回事?
EL表达式也能产生这样的问题?
是你前台输入的中文 as 数据库中的中文 比较
前台中文在后台得到的时候要做下中文转换,然后再比较.
这网站上关于这个问题的人都很多的.
index 是从 1 开始的 不是从0开始
LZ你把数据库操作完的来的值打印出来看看,看是否查询成功了!! 还有你的select 语句,看看有没有问题!! 我估计是 ‘员工’是中文 传进去后变成乱码了!!
{
//如果是提交登录信息,则对用户进行验证
String name=httpReq.getParameter("name");
String password=httpReq.getParameter("password");
UserBean user=new UserBean(name,password);
UserCheckBean uc=new UserCheckBean(user);
其中
String name=httpReq.getParameter("name");
改为
String name=new String(httpReq.getParameter("name").getBytes("ISO-8859-1"),"GB2312");
试下看看
还有你把数据库的'员工'改为不是中文 登陆下 看看行不行!
HTTP Status 404 - /workProject/${requestScope.origin_uri} 请问这是怎么回事?
EL表达式也能产生这样的问题?输入数据库中内容,会产生以上IE错误~~~~~找不到EL表达式!一般都是什么原因啊?谢谢!
origin_uri 刚定义的变量没有值,怎么把没值的赋值?
if(uc.validate())
{
//验证通过后,在Session对象中设置isLogin属性为true
session.setAttribute("isLogin","true");
//在session对象中保存用户名
session.setAttribute("user",name);
//从请求对象中取出用户先前访问页面的URI
String origin_uri=httpReq.getParameter("origin_uri");
if(null!=origin_uri && !"".equals(origin_uri))
httpResp.sendRedirect(origin_uri); //重定向到用户先前访问页面
else
httpResp.sendRedirect(ctxPath+home_page); //重定向到首页
return;
}
这段代码代码不是进行判断了么?逻辑是:
第一次登录origin_uri为空,提交后判断他为空,则进行跳转到其他页面啊!
报错问题是因为JSP不识别EL表达式的关系~~~~~
在这里再次谢谢各位~~~~~马上结贴~~~~