Spring 无法访问Servlet中的Java Bean,getAttribute()返回null
我不熟悉在servlet中使用Javabean,从HttpServletRequest对象访问bean时遇到问题。当我使用getAttribute()时,它返回null。这是我的密码: Station.jsp-jsp:Spring 无法访问Servlet中的Java Bean,getAttribute()返回null,spring,jsp,tomcat,servlets,javabeans,Spring,Jsp,Tomcat,Servlets,Javabeans,我不熟悉在servlet中使用Javabean,从HttpServletRequest对象访问bean时遇到问题。当我使用getAttribute()时,它返回null。这是我的密码: Station.jsp-jsp: <!-- @author - Dylan Stout 7/19/2016 Description: Station Screen -- Takes scanner input to three fields: fromStation, toSt
<!--
@author - Dylan Stout
7/19/2016
Description: Station Screen -- Takes scanner input to three fields: fromStation, toStation, toLoad
Javascript is used to handle cursor position,incrementing fields, and button-press for load releasing.
PickProcess java bean holds the session information necessary to verify and send/recieve messages to wrxj
back-end.
Each input field is it's own form so no handling for carriage returns is needed (symbol guns usually
send carriage return after scan)
-->
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="pickProcess" class="com.wynright.scanui.model.PickProcess" scope="session"/>
<jsp:useBean id="fromStation" class="com.wynright.scanui.model.FromStation" scope="request"/>
<jsp:useBean id="toStation" class="com.wynright.scanui.model.ToStation" scope="request"/>
<jsp:useBean id="toLoad" class="com.wynright.scanui.model.ToLoad" scope="request"/>
<html>
<head>
<meta name="viewport" content="width=240, height=320, user-scalable=no,
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<link type="text/css" rel="stylesheet" href="css/scanui.css">
<script type="text/javascript" src="scripts/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="scripts/formController.js"></script>
<script type="text/javascript" src="scripts/station.js"></script>
<noscript>JavaScript is off. Please enable to use ScanUI.</noscript>
<title>Station Pick - Scan UI</title>
</head>
<%
if(fromStation.hasErrors()){
%>
<body OnLoad="onBodyLoad();focusFromStation();">
<%
}else if(toStation.hasErrors()) {
%>
<body OnLoad="onBodyLoad();focusToStation();">
<%
}else if(toLoad.hasErrors()){
%>
<body OnLoad="onBodyLoad();focusToLoad();">
<%
}else{
%>
<body OnLoad="onBodyLoad();focusNext();">
<%
}
%>
<table cellpadding=4 cellspacing=2>
<th bgcolor="#CCCCFF" colspan=2><font size=2>Station Pick</font></th>
<tr bgcolor="#c8d8f8">
<td valign=top><form name="fromStation" action="ValidateFromStation" method=post>
From Station: <input type="text" name="value"
value='<%=pickProcess.getFromStation()%>' size=5 maxlength=5 tabindex="1">
<br>
<font size=2 color=red><%=fromStation.getErrorMsg("fromStation")%></font>
</form></td>
<td valign=top><form name="toStation" action="validateToStation.jsp" method=post>
To Station: <input type="text" name="value"
value='<%=pickProcess.getToStation()%>' size=5 maxlength=5 tabindex="2">
<br>
<font size=2 color=red><%=toStation.getErrorMsg("toStation")%></font>
</form></td>
</tr>
<tr bgcolor="#c8d8f8">
<td valign=top colspan="2"><form name="toLoad" action="validateToLoad.jsp" method=post>
To Load: <input type="text" name="value"
value='<%=pickProcess.getToLoad()%>' size=34 maxlength=30 tabindex="3">
<br>
<font size=2 color=red><%=toLoad.getErrorMsg("toLoad")%></font>
</form></td>
</tr>
</table>
</body>
</html>
/**
*
*/
package com.wynright.scanui.action;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.scanui.model.FromStation;
/**
* @author dystout
* Date: Jul 21, 2016
*
* Description: TODO
*/
public class ValidateFromStation extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 6201980136409592032L;
protected static Logger logger = Logger.getLogger(ValidateFromStation.class);
protected FromStation fromStation = null;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{
fromStation = (FromStation)request.getSession(false).getAttribute("fromStation");
fromStation.setValue(request.getParameter("value"));
if(fromStation.validate()){
logger.debug("From Station Validated: " + fromStation.getValue());
RequestDispatcher rd = request.getRequestDispatcher("Station.jsp");
rd.include(request, response);
}else{
logger.debug("From Station INVALID, not validated: " + fromStation.getValue());
RequestDispatcher rd = request.getRequestDispatcher("Station.jsp");
rd.include(request,response);
}
}
}
package com.wynright.scanui.model;
import java.util.Hashtable;
import com.daifukuamerica.wrxj.application.Application;
import com.daifukuamerica.wrxj.application.PropertiesStack;
import com.daifukuamerica.wrxj.custom.piolax.dataserver.PiolaxPickServer;
import com.daifukuamerica.wrxj.jdbc.DBCommException;
import com.daifukuamerica.wrxj.jdbc.DBException;
import com.daifukuamerica.wrxj.jdbc.DBResultSet;
import com.wynright.scanui.connectionFactory.DBConnection;
public class FromStation extends ScanField{
@Override
public boolean validate(){
if(value.equals("")){
errors.put("fromStationNumber", "Please scan/enter valid station");
}
String sql = "SELECT SDESTINATIONSTATION FROM ORDERHEADER WHERE SDESTINATIONSTATION = '" + getValue() + "'";
DBResultSet results = null;
if(DBConnection.getWrxjConnection().isConnectionActive()){
try {
results= DBConnection.getWrxjConnection().execute(sql, null);
} catch (DBCommException | DBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(results != null && results.getRowCount()!=0){
isValidated = true;
}
//TODO -- Add WRXJ server validate (JSON)
return isValidated;
}
}
FromStationjavabean:
<!--
@author - Dylan Stout
7/19/2016
Description: Station Screen -- Takes scanner input to three fields: fromStation, toStation, toLoad
Javascript is used to handle cursor position,incrementing fields, and button-press for load releasing.
PickProcess java bean holds the session information necessary to verify and send/recieve messages to wrxj
back-end.
Each input field is it's own form so no handling for carriage returns is needed (symbol guns usually
send carriage return after scan)
-->
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="pickProcess" class="com.wynright.scanui.model.PickProcess" scope="session"/>
<jsp:useBean id="fromStation" class="com.wynright.scanui.model.FromStation" scope="request"/>
<jsp:useBean id="toStation" class="com.wynright.scanui.model.ToStation" scope="request"/>
<jsp:useBean id="toLoad" class="com.wynright.scanui.model.ToLoad" scope="request"/>
<html>
<head>
<meta name="viewport" content="width=240, height=320, user-scalable=no,
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<link type="text/css" rel="stylesheet" href="css/scanui.css">
<script type="text/javascript" src="scripts/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="scripts/formController.js"></script>
<script type="text/javascript" src="scripts/station.js"></script>
<noscript>JavaScript is off. Please enable to use ScanUI.</noscript>
<title>Station Pick - Scan UI</title>
</head>
<%
if(fromStation.hasErrors()){
%>
<body OnLoad="onBodyLoad();focusFromStation();">
<%
}else if(toStation.hasErrors()) {
%>
<body OnLoad="onBodyLoad();focusToStation();">
<%
}else if(toLoad.hasErrors()){
%>
<body OnLoad="onBodyLoad();focusToLoad();">
<%
}else{
%>
<body OnLoad="onBodyLoad();focusNext();">
<%
}
%>
<table cellpadding=4 cellspacing=2>
<th bgcolor="#CCCCFF" colspan=2><font size=2>Station Pick</font></th>
<tr bgcolor="#c8d8f8">
<td valign=top><form name="fromStation" action="ValidateFromStation" method=post>
From Station: <input type="text" name="value"
value='<%=pickProcess.getFromStation()%>' size=5 maxlength=5 tabindex="1">
<br>
<font size=2 color=red><%=fromStation.getErrorMsg("fromStation")%></font>
</form></td>
<td valign=top><form name="toStation" action="validateToStation.jsp" method=post>
To Station: <input type="text" name="value"
value='<%=pickProcess.getToStation()%>' size=5 maxlength=5 tabindex="2">
<br>
<font size=2 color=red><%=toStation.getErrorMsg("toStation")%></font>
</form></td>
</tr>
<tr bgcolor="#c8d8f8">
<td valign=top colspan="2"><form name="toLoad" action="validateToLoad.jsp" method=post>
To Load: <input type="text" name="value"
value='<%=pickProcess.getToLoad()%>' size=34 maxlength=30 tabindex="3">
<br>
<font size=2 color=red><%=toLoad.getErrorMsg("toLoad")%></font>
</form></td>
</tr>
</table>
</body>
</html>
/**
*
*/
package com.wynright.scanui.action;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.scanui.model.FromStation;
/**
* @author dystout
* Date: Jul 21, 2016
*
* Description: TODO
*/
public class ValidateFromStation extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 6201980136409592032L;
protected static Logger logger = Logger.getLogger(ValidateFromStation.class);
protected FromStation fromStation = null;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{
fromStation = (FromStation)request.getSession(false).getAttribute("fromStation");
fromStation.setValue(request.getParameter("value"));
if(fromStation.validate()){
logger.debug("From Station Validated: " + fromStation.getValue());
RequestDispatcher rd = request.getRequestDispatcher("Station.jsp");
rd.include(request, response);
}else{
logger.debug("From Station INVALID, not validated: " + fromStation.getValue());
RequestDispatcher rd = request.getRequestDispatcher("Station.jsp");
rd.include(request,response);
}
}
}
package com.wynright.scanui.model;
import java.util.Hashtable;
import com.daifukuamerica.wrxj.application.Application;
import com.daifukuamerica.wrxj.application.PropertiesStack;
import com.daifukuamerica.wrxj.custom.piolax.dataserver.PiolaxPickServer;
import com.daifukuamerica.wrxj.jdbc.DBCommException;
import com.daifukuamerica.wrxj.jdbc.DBException;
import com.daifukuamerica.wrxj.jdbc.DBResultSet;
import com.wynright.scanui.connectionFactory.DBConnection;
public class FromStation extends ScanField{
@Override
public boolean validate(){
if(value.equals("")){
errors.put("fromStationNumber", "Please scan/enter valid station");
}
String sql = "SELECT SDESTINATIONSTATION FROM ORDERHEADER WHERE SDESTINATIONSTATION = '" + getValue() + "'";
DBResultSet results = null;
if(DBConnection.getWrxjConnection().isConnectionActive()){
try {
results= DBConnection.getWrxjConnection().execute(sql, null);
} catch (DBCommException | DBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(results != null && results.getRowCount()!=0){
isValidated = true;
}
//TODO -- Add WRXJ server validate (JSON)
return isValidated;
}
}
Tomcat 7Web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>RFUI</display-name>
<listener>
<listener-class>com.wynright.scanui.connectionFactory.DBConnectionService</listener-class>
</listener>
<servlet>
<servlet-name>ValidateFromStation</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateFromStation
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateFromStation</servlet-name>
<url-pattern>/ValidateFromStation/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateLogin</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateLogin
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateLogin</servlet-name>
<url-pattern>/ValidateLogin/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidatePickingFromStation</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidatePickingFromStation
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidatePickingFromStation</servlet-name>
<url-pattern>/ValidatePickingFromStation/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidatePickingToStation</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidatePickingToStation
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidatePickingToStation</servlet-name>
<url-pattern>/ValidatePickingToStation/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateSerialNumber</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateSerialNumber
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateSerialNumber</servlet-name>
<url-pattern>/ValidateSerialNumber/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateToLoad</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateToLoad
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateToLoad</servlet-name>
<url-pattern>/ValidateToLoad/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateToStation</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateToStation
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateToStation</servlet-name>
<url-pattern>/ValidateToStation/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
RFI
com.wynright.scanui.connectionFactory.DBConnectionService
验证站
com.wynright.scanui.action.ValidateFromStation
验证站
/验证站/*
阿维泰洛金
com.wynright.scanui.action.ValidateLogin
阿维泰洛金
/阿维泰洛金/*
从火车站到火车站
com.wynright.scanui.action.validatePickFromStation
从火车站到火车站
/从火车站到火车站/*
王者地位
com.wynright.scanui.action.ValidatePickingToStation
王者地位
/王者地位/*
验证序列号
com.wynright.scanui.action.ValidateSerialNumber
验证序列号
/验证序列号/*
验证加载
com.wynright.scanui.action.ValidateToLoad
验证加载
/验证加载/*
验证站
com.wynright.scanui.action.validateStation
验证站
/验证站/*
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
我认为设置属性有问题。我没有找到你设置属性的地方。您必须使用请求对象在JSP或servlet中设置属性
您提到过使用Scanner设置变量。但是它必须设置请求对象。是你干的吗?然后您将使用request.getAttribute()方法获得它
希望能有帮助 我想我已经解决了这个问题。我想我把整个豆子都用错了。我仍然有可能错误地使用了HttpSession、HttpServletRequest和HttpServletResponse的全部目的,因此如果我是某人,请提供建议 我的问题是,我试图使用jsp标记加载我的bean,如下所示:
<jsp:useBean id="fromStation" class="com.wynright.scanui.model.FromStation" scope="request"/>
然后在我的JSPstation.JSP中,我可以访问bean directyle,而无需使用表达式语言使用${bean.beanvalue}标记(有关此方面的更多信息:),以下是我在我的station.JSP中访问这些值时使用的代码:
<!--
@author - Dylan Stout
7/19/2016
Description: Station Screen -- Takes scanner input to three fields: fromStation, toStation, toLoad
Javascript is used to handle cursor position,incrementing fields, and button-press for load releasing.
PickProcess java bean holds the session information necessary to verify and send/recieve messages to wrxj
back-end.
Each input field is it's own form so no handling for carriage returns is needed (symbol guns usually
send carriage return after scan)
-->
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="viewport" content="width=240, height=320, user-scalable=no,
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<link type="text/css" rel="stylesheet" href="css/scanui.css">
<script type="text/javascript" src="scripts/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="scripts/formController.js"></script>
<script type="text/javascript" src="scripts/station.js"></script>
<noscript>JavaScript is off. Please enable to use ScanUI.</noscript>
<title>Station Pick - Scan UI</title>
</head>
<body onload="onBodyLoad()">
<table cellpadding=4 cellspacing=2 id="stationTable">
<th bgcolor="#CCCCFF" colspan=2><font size=2>Station Pick : ${pickProcess.userName}</font></th>
<tr bgcolor="#c8d8f8">
<td valign=top>
<form name="fromStation" action="${pageContext.request.contextPath}/ValidateFromStation" method=post id="fromStationForm">
From Station: <input type="text" name="value" id="fromStation" value='${pickProcess.fromStation}' size=5 maxlength=5 tabindex="1">
<font size=2 color=red><br> ${fromStation.error}</font>
</form>
</td>
<td valign=top>
<form name="toStation" action="${pageContext.request.contextPath}/ValidateToStation" method=post id="toStation">
To Station: <input type="text" name="value" value='${pickProcess.toStation}' size=5 maxlength=5 tabindex="2">
<font size=2 color=red><br> ${toStation.error}</font>
</form>
</td>
</tr>
<tr bgcolor="#c8d8f8">
<td valign=top colspan="2"><form name="toLoad" action="${pageContext.request.contextPath}/ValidateToLoad" method=post id="toLoad">
To Load: <input type="text" name="value"
value='${pickProcess.toLoad}' size=34 maxlength=30 tabindex="3">
<font size=2 color=red><br> ${toLoad.error}</font>
</form></td>
</tr>
</table>
</body>
</html>
然后,我可以在该会话存在的任何位置检索它:
PickProcess pickProcess = (PickProcess)session.getAttribute("pickProcess");
如果没有收到空值,我无法检索会话属性。我以为这就是我通过设置“”所做的,但可能我弄错了。不管怎样,我想我已经想出了一个解决方案,见上文。