用户登陆界面login.html的form表单,提交用户名username和密码password给动作Login.java处理,如果用户存在在库中,写入cookies并用response.sendRedirect跳转到login.jsp.但是我在login.jsp页面中使用如下句子,用户名却显示不出来,应该如何解决?login.jsp代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%
request.setCharacterEncoding("gb2312");
String strUserName=String.valueOf(request.getParameter("username"));
%>
<html>
<head><title>Welcome</title></head>
<body>
<center><%=strUserName%> 欢迎你!</center>
</body>
</html> 还有就是从Login.java中获取username并要求在多个jsp跳转页面都能使用该用户名username,应该怎么做?(*注:不想用session来访问参数username,因为servlet中已经使用了cookies,再用session代码可读性会很差~)
<%@ page contentType="text/html;charset=gb2312"%>
<%
request.setCharacterEncoding("gb2312");
String strUserName=String.valueOf(request.getParameter("username"));
%>
<html>
<head><title>Welcome</title></head>
<body>
<center><%=strUserName%> 欢迎你!</center>
</body>
</html> 还有就是从Login.java中获取username并要求在多个jsp跳转页面都能使用该用户名username,应该怎么做?(*注:不想用session来访问参数username,因为servlet中已经使用了cookies,再用session代码可读性会很差~)
和请求转发你都没搞清楚吧
查了下以前写的
是${cookie.kye名.value}COOKIE默认是存在于IE内存中 也有硬盘版 2种取值写法都一样
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
Cookie cookie=null;
Cookie[] cookies=request.getCookies(); try{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/userdatabase","root","");
Statement sqlStmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
ResultSet sqlRst=sqlStmt.executeQuery("select * from userInfo where username='" +username+ "' and password='" +password+"'");if(sqlRst.next()){
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("username")){
response.sendRedirect("hasLogin.jsp"); //跳转到显示"你已经登陆"页面,并继续跳到login.jsp;
}
cookie=cookies[i];
}//for结束
}
if((cookies==null)||(!cookie.getName().equals("username"))){
int maxAge=3600; //1小时(3600秒)cookie存活期
cookie=new Cookie("username","username");
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
response.sendRedirect("index.jsp");
}
else{
response.sendRedirect("login.html"); //form表单中输入的用户名不存在于数据库,返回登陆界面;
}
sqlRst.close();
sqlStmt.close();
conn.close();
}catch(ClassNotFoundException e){
System.out.print("数据库连接失败!"+e.toString());}
catch(Exception sqle){
out.println(sqle.toString());
}
}
<%
String username=null;
Cookie[] c = request.getCookies();
for (int i = 0; i < c.length; i++) {
if (c[i].getName().equals("username")) {
name = c[i].getValue();
}
}
%><%=username%>说下jsp 是显示层 不适合写java脚本
这句的问题是,request请求中的参数username只能在Login.java中使用,然而跳转到hasLogin.jsp就失效了~
是从请求正文获取参数,你请求中没有参数怎么取值,一般数据传递都是写在session ,request 2个范围中用范围要注意请求转发,和重定项的区别,请求转发要注意2种转发的区别,就是传递控制权
这样写就可以在hasLogin.jsp 用request取出来
学servlet干什么直接看ssh吧
是重定向 不会共享request 范围里面的数据
要共享request范围里的数据就要使用请求转发
这个问题很简单我就随便告诉你怎么解决吧
首先在Servlet 里面获取到正确的用户
Cookie cookie = new Cookie("userName",userName);
response.addCookie(cookie);
response.sendRedirect("login.jsp");
在login.jsp 里面用
Cookie cookies[] = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("userName")) {
name = c[i].getValue();
}
} <%=name%> 就可以显示出用户的名字了
我是这样修改的:
(Login.java部分)
... ...String username = request.getParameter("username"); ... ...
if((cookies==null) ¦ ¦(!cookie.getName().equals("username"))){
int maxAge=3600; //1小时(3600秒)cookie存活期
cookie=new Cookie("username",username); //这里是修改的部分
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
response.sendRedirect("index.jsp");
}
else{
... ...(index.jsp部分)
<%
String name=null;
Cookie[]c=request.getCookies();
for (int i=0;i<c.length;i++){
if (c[i].getName().equals("username")){
name=c[i].getValue();
}
}
%> <%=name%>
这句我的设想是:从String username = request.getParameter("username"); 获取用户名username(句子中的username),然后把它写入一个名为username的cookie中(句子中的"username"),但是句子中好象直接把username(括号中后面的username)当做值传递给index.jsp来处理了,所以才会显示
"username 欢迎你!"
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
String Username = request.getParameter("username");
String Password = request.getParameter("password");
Cookie cookie=null;
Cookie[] cookies=request.getCookies(); try{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/userdatabase","root","");
Statement sqlStmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
ResultSet sqlRst=sqlStmt.executeQuery("select * from userInfo where username='" +Username+ "' and password='" +Password+"'"); if(sqlRst.next()){
if(cookies!=null){
for(int i=0;i <cookies.length;i++){
if(cookies[i].getName().equals("Username")){
response.sendRedirect("hasLogin.jsp"); //跳转到显示"你已经登陆"页面,并继续跳到login.jsp;
}
cookie=cookies[i];
}//for结束
}
if((cookies==null) ¦ ¦(!cookie.getName().equals("Username"))){
int maxAge=3600; //1小时(3600秒)cookie存活期
cookie=new Cookie("username",sqlRst.getString("username"));
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
response.sendRedirect("index.jsp");
}
else{
response.sendRedirect("login.html"); //form表单中输入的用户名不存在于数据库,返回登陆界面;
}
sqlRst.close();
sqlStmt.close();
conn.close();
}catch(ClassNotFoundException e){
System.out.print("数据库连接失败!"+e.toString());}
catch(Exception sqle){
out.println(sqle.toString());
}
} 我把
String Username = request.getParameter("username");
String Password = request.getParameter("password");
中的username和password改为Username和Password,为的是避免在句子cookie=new Cookie("username",sqlRst.getString("username"));中
sqlRst.getString("username")的username引用错误. sqlRst.getString("username")也可以改为username,效果也是一样的~