java web登录状态保持_java web用于保持状态的4种方法

方法一:网址重写

通过在url地址后面添加若干的token作为查询字符串来实现。token的值一般为 键=值

url?key1=value1&key2=value2&...&keyn=valuen

url与token之间需要用?分开,两个token之间则是需要用一个&符号隔开。

此方法适用于token不需要在多个页面中使用时使用。

缺点是

a.在某些浏览器当中url长度有限制

b.url中的信息是可见的,安全性差

c.某些字符需要进行编码

package com.SessionManage.Test;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "Top10Servlet", urlPatterns = {"/top10"})

public class Top10Servlet extends HttpServlet {

private static final long serialVersionUID = 987654321L;

private List londonAttractions;

private List parisAttractions;

@Override

public void init() throws ServletException {

londonAttractions = new ArrayList(10);

londonAttractions.add("Buckingham Palace");

londonAttractions.add("London Eye");

londonAttractions.add("British Museum");

londonAttractions.add("National Gallery");

londonAttractions.add("Big Ben");

londonAttractions.add("Tower of London");

londonAttractions.add("Natural History Museum");

londonAttractions.add("Canary Wharf");

londonAttractions.add("2012 Olympic Park");

londonAttractions.add("St Paul's Cathedral");

parisAttractions = new ArrayList(10);

parisAttractions.add("Eiffel Tower");

parisAttractions.add("Notre Dame");

parisAttractions.add("The Louvre");

parisAttractions.add("Champs Elysees");

parisAttractions.add("Arc de Triomphe");

parisAttractions.add("Sainte Chapelle Church");

parisAttractions.add("Les Invalides");

parisAttractions.add("Musee d'Orsay");

parisAttractions.add("Montmarte");

parisAttractions.add("Sacre Couer Basilica");

}

@Override

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException,IOException{

String city = request.getParameter("city");

if(city!=null&&(city.equals("london")||city.equals("paris"))){

showAttractions(request,response,city);

}else{

showMainPage(request,response);

}

}

private void showMainPage(HttpServletRequest request,

HttpServletResponse response) throws IOException {

// TODO Auto-generated method stub

response.setContentType("text/html");

PrintWriter writer = response.getWriter();

writer.print("

"

+ "

Top 10 Tourist Attractions"

+ "

"

+"please select a city:"

+"London"

+"Paris"

+"");

}

private void showAttractions(HttpServletRequest request,

HttpServletResponse response, String city) throws ServletException,IOException {

// TODO Auto-generated method stub

int page = 1;

String pageParameter = request.getParameter("page");

if(pageParameter!=null){

try{

page = Integer.parseInt(pageParameter);

}catch(NumberFormatException e){

e.printStackTrace();

}

if(page>2){

page = 1;

}

}

List attractions = null;

if(city.equals("london")){

attractions = londonAttractions;

}else if(city.equals("paris")){

attractions = parisAttractions;

}

response.setContentType("text/html");

PrintWriter writer = response.getWriter();

writer.println("

"

+"

Top 10 Tourist Attractions"

+"

");

writer.println("Select City");

writer.println("


Page"+page+"
");

int start = page*5-5;

for(int i = start; i < start+5; i++){

writer.println(attractions.get(i)+"
");

}

writer.print("


"

+ "Page 1");

writer.print(" Page 2");

writer.println("");

}

}

方法二:隐藏域

主要适用于页面当中含有表单的情况,当用户提交表单时,隐藏域中的值也传送到服务器。只有当页面包含表单,或者可以在页面添加表单时,才适合使用隐藏域。

此技术胜过网址重写的地方在于可以将更多的字符传递到服务器,且不需要进行字符编码。但仅当所需传递的信息不需要跨越多个页面时,才适合使用这种技术。

package com.SessionManage.Test2;

public class Customer {

private int id;

private String name;

private String city;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

}

package com.SessionManage.Test2;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Web 多用户登录限制的实现方法可以通过以下步骤实现: 1. 在用户登录时,记录下用户的登录状态,并将其保存在Session中。 2. 在用户每次访问需要登录的资源时,检查Session中是否有登录状态信息,如果没有则跳转到登录页面。 3. 如果有登录状态信息,则检查该用户是否已经在其他地方登录。可以通过在登录状态信息中添加一个唯一标识符来实现。如果该标识符已经存在,则表示该用户已经在其他地方登录,需要将其踢出登录状态,并跳转到登录页面。 4. 当用户退出登录时,需要将其登录状态信息从Session中删除。 代码示例: ```java // 获取Session中的登录状态信息 String loginInfo = (String) session.getAttribute("loginInfo"); if (loginInfo == null) { // 用户未登录,跳转到登录页面 response.sendRedirect("login.jsp"); } else { // 检查用户是否已经在其他地方登录 String userId = getUserIdFromLoginInfo(loginInfo); if (isUserAlreadyLogin(userId)) { // 用户已经在其他地方登录,踢出其登录状态,并跳转到登录页面 kickOutUser(userId); response.sendRedirect("login.jsp"); } else { // 用户已经登录,可以继续访问资源 // ... } } // 登录时保存登录状态信息到Session中 String loginInfo = generateLoginInfo(userId); session.setAttribute("loginInfo", loginInfo); // 退出登录时从Session中删除登录状态信息 session.removeAttribute("loginInfo"); ``` 其中,`generateLoginInfo`方法可以生成一个唯一的登录状态信息,包含用户ID和一个随机字符串。`getUserIdFromLoginInfo`方法可以从登录状态信息中获取用户ID。`isUserAlreadyLogin`方法可以检查该用户是否已经在其他地方登录。`kickOutUser`方法可以将该用户在其他地方的登录状态踢出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值