struts2 应用程序中的会话无法正常工作
Session in struts2 application not working
我尝试了很多示例并在 Stack Overflow 上提到了很多问题,但仍然没有成功为用户设置注销操作。
我在设置注销操作时遇到 null
指针异常。
我也希望当按下后退按钮时它不应该重定向到用户的登录页面。
这是我的
LoginAction.java:
package org.entity;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport implements SessionAware
{
List<UpdateStock> ustocklist;
Login login;
private SessionMap<String,Object> sessionMap;
public SessionMap<String, Object> getSessionMap() {
return sessionMap;
}
public void setSessionMap(SessionMap<String, Object> sessionMap) {
this.sessionMap = sessionMap;
}
public LoginAction() {
// TODO Auto-generated constructor stub
}
public Login getLogin() {
return login;
}
public void setLogin(Login login) {
this.login = login;
}
public List<UpdateStock> getUstocklist() {
return ustocklist;
}
public void setUstocklist(List<UpdateStock> ustocklist) {
this.ustocklist = ustocklist;
}
public String execute() throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/foryou", "root", "siddheshkk");
System.out.println("Driver Loaded");
Statement st = con.createStatement();
PreparedStatement ps = con
.prepareStatement("select * from bbinfo where code=? and password=?");
ps.setString(1,login.getCode());
ps.setString(2,login.getPassword());
PreparedStatement ps1 = con
.prepareStatement("select * from stockinfo where code=?");
ps1.setString(1, login.getCode());
ResultSet rs1 = ps1.executeQuery();
System.out.println("Data loaded 2");
ustocklist = new ArrayList<UpdateStock>();
while (rs1.next()) {
ustocklist.add(new UpdateStock(rs1.getString(7), rs1
.getString(8), rs1.getString(9), rs1.getString(10), rs1
.getString(11), rs1.getString(12), rs1.getString(13), rs1
.getString(14)));
}
ResultSet rs = ps.executeQuery();
if (rs.next()) {
sessionMap.put("login","true");
sessionMap.put("name",login.getCode());
return "success";
} else {
return "error";
}
} catch (Exception e) {
System.out.println(e);
}
HttpSession session=ServletActionContext.getRequest().getSession(false);
if(session==null || session.getAttribute("login")==null){
return "login";
}
else{
return "success";
}
//return "success";
}
public void validate() {
if(login.getCode().trim().length()<1 || login.getPassword().trim().length()<1)
{
addFieldError("login.code", "Please enter valid code");
addFieldError("login.password", "Please enter valid Password");
}
}
@Override
public void setSession(Map<String, Object> map) {
// TODO Auto-generated method stub
sessionMap=(SessionMap)map;
}
public String logout(){
if(sessionMap!=null){
sessionMap.invalidate();
sessionMap.remove("login");
sessionMap.clear();
return "success";
}
return "success";
}
}
下面是我在 struts.xml
页面中的操作标签:
<action name="logout" class="org.entity.LoginAction" method="logout">
<result name="input">UpdateStock.jsp</result>
<result name="success">BloodBankSection.jsp</result>
</action>
这是我的 JSP 成功登录后的页面
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome! Update Stock</title>
<style type="text/css">
body {
background-color: lightyellow;
font-family: sans-serif;
font: italic;
}
h3 {
color: yellow;
background-color: olive;
}
h2{
color:red;
text-align:center;
}
#header
{
background-color:black;
height:80px;
width:100%;
}
#navArea{
height:100px;
float:left;
}
#nav
{
list-style:none;
margin-top:30px;
}
#nav a
{
color:white;
text-decoration:none;
}
#nav li
{
float:left;
background-color:#252525;
padding:3px;
border-radius:5px;
margin:8px;
}
#nav li:hover{
background-color:red;
}
</style>
</head>
<body>
<div id ="header">
<div id="navArea">
<ul id="nav">
<li><a href="welcome.jsp">Home</a></li>
<li><a href="Admin.jsp">Admin Panel</a></li>
<li><a href="Feedback.jsp">Feedback</a></li>
<li><a href="aboutus.jsp">About Us</a></li>
<li><a href="donorbloodsection.jsp">Donor Section</a></li>
<li><a href="BloodUpdateProfile.jsp">Edit Profile</a></li>
<li><a href="logout">Logout</a></li></ul></div></div>
<div align="center">
Welcome, <s:property value="#session.name"/>
<h2>Please Enter the Stock Details </h2>
<h3>Previous Stock</h3>
<table border="2">
<th>
<tr>
<td>A+</td>
<td>A-</td>
<td>B+</td>
<td>B-</td>
<td>AB+</td>
<td>AB-</td>
<td>O+</td>
<td>O-</td>
</tr>
</th>
<s:iterator value="ustocklist">
<s:iterator>
<tr>
<td><s:property value="opositive" /></td>
<td><s:property value="onegative" /></td>
<td><s:property value="apositive" /></td>
<td><s:property value="anegative" /></td>
<td><s:property value="bpositive" /></td>
<td><s:property value="bnegative" /></td>
<td><s:property value="abpositive" /></td>
<td><s:property value="abnegative" /></td>
</tr>
</s:iterator>
</s:iterator>
</table>
<h3>Update Stock here</h3>
<s:form action="UpdateStockAction">
<s:textfield label="Enter your registered code " name="us.code" />
<s:textfield label="O+ " name="us.opositive" />
<s:textfield label="O- " name="us.onegative" />
<s:textfield label="A+ " name="us.apositive" />
<s:textfield label="A- " name="us.anegative" />
<s:textfield label="B+ " name="us.bpositive" />
<s:textfield label="B- " name="us.bnegative" />
<s:textfield label="AB+ " name="us.abpositive" />
<s:textfield label="AB- " name="us.abnegative" />
<s:submit value="Update" />
</s:form>
</div>
</body>
</html>
这里我也贴出错误图片
试试下面的代码
@SkipValidation
public String logout(){
...
}
And i also i want that when back button is pressed it should not redirect to logged in page of user.
<action name="logout" class="org.entity.LoginAction" method="logout">
<result type="redirect">/</result>
</action>
我尝试了很多示例并在 Stack Overflow 上提到了很多问题,但仍然没有成功为用户设置注销操作。
我在设置注销操作时遇到 null
指针异常。
我也希望当按下后退按钮时它不应该重定向到用户的登录页面。
这是我的
LoginAction.java:
package org.entity;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport implements SessionAware
{
List<UpdateStock> ustocklist;
Login login;
private SessionMap<String,Object> sessionMap;
public SessionMap<String, Object> getSessionMap() {
return sessionMap;
}
public void setSessionMap(SessionMap<String, Object> sessionMap) {
this.sessionMap = sessionMap;
}
public LoginAction() {
// TODO Auto-generated constructor stub
}
public Login getLogin() {
return login;
}
public void setLogin(Login login) {
this.login = login;
}
public List<UpdateStock> getUstocklist() {
return ustocklist;
}
public void setUstocklist(List<UpdateStock> ustocklist) {
this.ustocklist = ustocklist;
}
public String execute() throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/foryou", "root", "siddheshkk");
System.out.println("Driver Loaded");
Statement st = con.createStatement();
PreparedStatement ps = con
.prepareStatement("select * from bbinfo where code=? and password=?");
ps.setString(1,login.getCode());
ps.setString(2,login.getPassword());
PreparedStatement ps1 = con
.prepareStatement("select * from stockinfo where code=?");
ps1.setString(1, login.getCode());
ResultSet rs1 = ps1.executeQuery();
System.out.println("Data loaded 2");
ustocklist = new ArrayList<UpdateStock>();
while (rs1.next()) {
ustocklist.add(new UpdateStock(rs1.getString(7), rs1
.getString(8), rs1.getString(9), rs1.getString(10), rs1
.getString(11), rs1.getString(12), rs1.getString(13), rs1
.getString(14)));
}
ResultSet rs = ps.executeQuery();
if (rs.next()) {
sessionMap.put("login","true");
sessionMap.put("name",login.getCode());
return "success";
} else {
return "error";
}
} catch (Exception e) {
System.out.println(e);
}
HttpSession session=ServletActionContext.getRequest().getSession(false);
if(session==null || session.getAttribute("login")==null){
return "login";
}
else{
return "success";
}
//return "success";
}
public void validate() {
if(login.getCode().trim().length()<1 || login.getPassword().trim().length()<1)
{
addFieldError("login.code", "Please enter valid code");
addFieldError("login.password", "Please enter valid Password");
}
}
@Override
public void setSession(Map<String, Object> map) {
// TODO Auto-generated method stub
sessionMap=(SessionMap)map;
}
public String logout(){
if(sessionMap!=null){
sessionMap.invalidate();
sessionMap.remove("login");
sessionMap.clear();
return "success";
}
return "success";
}
}
下面是我在 struts.xml
页面中的操作标签:
<action name="logout" class="org.entity.LoginAction" method="logout">
<result name="input">UpdateStock.jsp</result>
<result name="success">BloodBankSection.jsp</result>
</action>
这是我的 JSP 成功登录后的页面
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome! Update Stock</title>
<style type="text/css">
body {
background-color: lightyellow;
font-family: sans-serif;
font: italic;
}
h3 {
color: yellow;
background-color: olive;
}
h2{
color:red;
text-align:center;
}
#header
{
background-color:black;
height:80px;
width:100%;
}
#navArea{
height:100px;
float:left;
}
#nav
{
list-style:none;
margin-top:30px;
}
#nav a
{
color:white;
text-decoration:none;
}
#nav li
{
float:left;
background-color:#252525;
padding:3px;
border-radius:5px;
margin:8px;
}
#nav li:hover{
background-color:red;
}
</style>
</head>
<body>
<div id ="header">
<div id="navArea">
<ul id="nav">
<li><a href="welcome.jsp">Home</a></li>
<li><a href="Admin.jsp">Admin Panel</a></li>
<li><a href="Feedback.jsp">Feedback</a></li>
<li><a href="aboutus.jsp">About Us</a></li>
<li><a href="donorbloodsection.jsp">Donor Section</a></li>
<li><a href="BloodUpdateProfile.jsp">Edit Profile</a></li>
<li><a href="logout">Logout</a></li></ul></div></div>
<div align="center">
Welcome, <s:property value="#session.name"/>
<h2>Please Enter the Stock Details </h2>
<h3>Previous Stock</h3>
<table border="2">
<th>
<tr>
<td>A+</td>
<td>A-</td>
<td>B+</td>
<td>B-</td>
<td>AB+</td>
<td>AB-</td>
<td>O+</td>
<td>O-</td>
</tr>
</th>
<s:iterator value="ustocklist">
<s:iterator>
<tr>
<td><s:property value="opositive" /></td>
<td><s:property value="onegative" /></td>
<td><s:property value="apositive" /></td>
<td><s:property value="anegative" /></td>
<td><s:property value="bpositive" /></td>
<td><s:property value="bnegative" /></td>
<td><s:property value="abpositive" /></td>
<td><s:property value="abnegative" /></td>
</tr>
</s:iterator>
</s:iterator>
</table>
<h3>Update Stock here</h3>
<s:form action="UpdateStockAction">
<s:textfield label="Enter your registered code " name="us.code" />
<s:textfield label="O+ " name="us.opositive" />
<s:textfield label="O- " name="us.onegative" />
<s:textfield label="A+ " name="us.apositive" />
<s:textfield label="A- " name="us.anegative" />
<s:textfield label="B+ " name="us.bpositive" />
<s:textfield label="B- " name="us.bnegative" />
<s:textfield label="AB+ " name="us.abpositive" />
<s:textfield label="AB- " name="us.abnegative" />
<s:submit value="Update" />
</s:form>
</div>
</body>
</html>
这里我也贴出错误图片
试试下面的代码
@SkipValidation
public String logout(){
...
}
And i also i want that when back button is pressed it should not redirect to logged in page of user.
<action name="logout" class="org.entity.LoginAction" method="logout">
<result type="redirect">/</result>
</action>