十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
首先,我们得明白用户登录使用什么登陆的,即用户在线的原理。这只是将用户的对象存放在了session中而已,然后再frame中进行调用,其他特定页面也进行直接引用就行。那么实现“挤下来”的功能就是让新生成的session有效,让原来存放用户的session失效就行。到此,大体思路已经有了。那怎么实梁铅现呢?
创新互联建站是一家集网站建设,龙圩企业网站建设,龙圩品牌网站建设,网站定制,龙圩网站建设报价,网络营销,网络优化,龙圩网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
想要知道怎么实现,就必须要明白session存放用户对象的过程了。在用户登录之后,我们可以得到用户的对象user,而存放到session中需要执行session.setAttribute(key,value); 我们将用橡塌好户的userId或是其他的唯一标识存为key,将用户对象存为值。这样就能随时随地调用唯一用户了。user存放的问题解决了,那相同 登录 时session废除的问题呢?

这个其实也不难,我们可以更具session的特性一样,用map进行存贮,将用户的标识存为key,而将其所对应的session存为value,那么当重复用户登录时,只需要取出对应的session,将其invalidate就行了。
至此衫陵,实现思路已经明了,聒噪了这么久,大家都急不可耐地想看代码了吧?以下是代码:
前置准备,jsp界面
界面很简单,只是一个简单的登录界面
form action ="%=request.getContextPath()%/UserWXPServlet" method = "post"
用户名šinput type = "text" name = "username"/br/
密码šinput type = "text" name = "password"/br/
input type = "submit" value ="提交"/
/form
成功后跳转页面
欢迎:${sessionScope.user.username}登陆!br/
我这没有写失败页面,大家可以自己写,失败页面也没什么好说的了
entity和登录的实现
user的javabean
private String username;
private String password;
public User() {
}
public User(String user, String password) {
super();
this.username = user;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
登录user的service实现方法,这里就不写dao和接口了,一切以简单为
public boolean dologin(User user){
Properties pro = new Properties();
InputStream is = UserWXPServlet.class.getClassLoader().getResourceAsStream("user_wxp.properties");
String password = null;
System.out.println(is+"---------"+pro);
if(user==null){
return false;
}
try {
pro.load(is);
password = pro.getProperty(user.getUsername());
if(user.getPassword()!=nulluser.getPassword().equals(password)){
System.out.println("登陆成功");
return true;
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}
登录成功返回true,失败则返回false。
选中要注释信改巧的代码
eclipse注释代码快捷键滑键:alt+shift+/
取消歼码注释 :alt+shift+\
package X3DBuilder;
import java.io.*;
public class X3DCreator
{
public int xBins;
public int yBins;
public int i;
public int k;
public float min =0;
public float max = 0;
public double xSpacing;
public double zSpacing;
public double scalefactor;
public float[][] data;
public float[][] data2;
public float[] data1;
public X3DCreator() throws IOException
{
//导入文件test1513.data,并建立通向test1513.data的输入流
BufferedReader in = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("test1513.data")));
//从文件中读取第一行,并且将其格式化成数字xBins
xBins = Integer.parseInt(in.readLine());
//从文件中读取第二行,并且将其格式化成数字yBins
yBins = Integer.parseInt(in.readLine());
//算法,计算两数各自减一后的倒数
xSpacing = 1.0/(xBins-1);
zSpacing = 1.0/(yBins-1);
//将两数分别储存到数组data 中
data = new float[xBins][yBins];
//将两数的乘积储存到数组data1 中
data1 = new float[xBins*yBins];
//将两数分别储存到数组data2 中
data2 = new float[yBins][xBins];
for (i=0; ixBins; i++)
for (int j=0; jyBins; j++){
//继续从文件的第三行开始一行一行读取信息.并将读出的数据放在data中
data[i][j] = Float.parseFloat(in.readLine());
//通过多次循环比伍猜春较获得数组data中的最大值并赋值给max
if (max data[i][j])
max = data[i][j];
//通过多次循环将二维数组data中的数据全部放置到数组data1中
data1[k]= data[i][j];
k=k+1;
}
//赋值max的倒兆闷数给scalefactor
scalefactor = 1.0/max;
//关闭读取文件的流对象
in.close();
//打印data1的第16 个元素
System.out.println(data1[16]);
//打印data所有元素的个数
System.out.println(k);
for (i=0; iyBins; i++)
for (int j=0; jxBins; j++){
//循环赋值
data2[i][j] = data1[j*yBins+i];
}
//创建写入文件test.x3d的流
BufferedWriter fout = new BufferedWriter(new FileWriter("test.x3d"));
//创建读取文件x3d1.txt的流
BufferedReader in2 = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("x3d1.txt")));
String inputLine;
while ((inputLine = in2.readLine()) != null) {
//fout.write(inputLine);
//一行一行把从文件x3d1.txt读取的字符串写入文件test.x3d。
fout.append(inputLine);
//写入一个行分隔符,腔耐也就是换行。
fout.newLine();
}
fout.newLine();
//下面应该是写入一些xml内容
fout.append("ElevationGrid height ='");
for (i=0; iyBins; i++)
for (int j=0; jxBins; j++)
{
// fout.append(" "+scalefactor*data2[i][j]+" ");
fout.append(" "+data2[i][j]+" ");
}
fout.append("'");
fout.append(" xDimension='" + xBins + " ' ");
fout.append(" xSpacing='" + xSpacing + " '");
fout.append(" zDimension='" + yBins + "' ");
fout.append(" zSpacing='" + zSpacing + "'/ ");
fout.newLine();
//关闭读取流
in2.close();
// BufferedWriter fout2 = new BufferedWriter(new FileWriter("test.svg",true));
BufferedReader in3 = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("x3d2.txt")));
String inputLine2;
while ((inputLine2 = in3.readLine()) != null) {
//继续将文件x3d2.txt的内容也写入到test.x3d中
fout.append(inputLine2);
fout.newLine();
}
//关闭读取文件流
in3.close();
//关闭写入文件流.
fout.close();
}
}
//结束