在我的JSP页面的第一行,我检查会话值是否为null。如果null重定向回登录页面。
当我通过注销并检查该页面进行测试时,会出现org.apache.jasper.JasperException: java.lang.NullPointerException
错误。
那么如何在sendRedirect行之后退出代码?
代码:
<%
if((session.getAttribute("user_type")==null) || (!session.getAttribute("user_type").equals("user")))
{
response.sendRedirect("login.jsp");
//prevent executing rest of code.
}
%>
<html>
<head>
.......
要注销,我只使用:session.invalidate();
答案 0 :(得分:1)
您的JSP代码等同于:
if (someCondition) {
redirect();
}
doPlentyOfOtherThings();
如果你不想做很多其他的事情,代码应该是
if (someCondition) {
redirect();
}
else {
doPlentyOfOtherThings();
}
所以看起来应该是这样的:
<%
if((session.getAttribute("user_type")==null) || (!session.getAttribute("user_type").equals("user")))
{
response.sendRedirect("login.jsp");
}
else
{
%>
<html>
<head>
.......
<% } %>
除了
答案 1 :(得分:0)
在做了一些调试后,我发现了这个问题导致的问题。
我有一个jsp:include标签。在主代码中,我只分配了包含用户是否有效(登录)的页面。因此,当用户注销时,此标记仍在尝试包含它(我使用变量来传递页面名称)。
我添加了什么:
<%
if(session.getAttribute("user_type")!=null)
{
%>
<jsp:include.... />
<%
}
%>
现在,当用户无效时,不会在执行期间考虑此jsp标记。
答案 2 :(得分:0)
是。 只需添加以下行:
RenderScript mRs;
Bitmap mLutBitmap, mBitmap;
ScriptIntrinsic3DLUT mScriptlut;
Bitmap mOutputBitmap;
Allocation mAllocIn;
Allocation mAllocOut;
Allocation mAllocCube;
int mFilter = 0;
mRs = RenderScript.create(yourActivity.this);
public Bitmap filterapply() {
int redDim, greenDim, blueDim;
int w, h;
int[] lut;
if (mScriptlut == null) {
mScriptlut = ScriptIntrinsic3DLUT.create(mRs, Element.U8_4(mRs));
}
if (mBitmap == null) {
mBitmap = photo;
}
mOutputBitmap = Bitmap.createBitmap(mBitmap.getWidth(),
mBitmap.getHeight(), mBitmap.getConfig());
mAllocIn = Allocation.createFromBitmap(mRs, mBitmap);
mAllocOut = Allocation.createFromBitmap(mRs, mOutputBitmap);
// }
mLutBitmap = BitmapFactory.decodeResource(getResources(),
mLut3D[mFilter]);
w = mLutBitmap.getWidth();
h = mLutBitmap.getHeight();
redDim = w / h;
greenDim = redDim;
blueDim = redDim;
int[] pixels = new int[w * h];
lut = new int[w * h];
mLutBitmap.getPixels(pixels, 0, w, 0, 0, w, h);
int i = 0;
for (int r = 0; r < redDim; r++) {
for (int g = 0; g < greenDim; g++) {
int p = r + g * w;
for (int b = 0; b < blueDim; b++) {
lut[i++] = pixels[p + b * h];
}
}
}
Type.Builder tb = new Type.Builder(mRs, Element.U8_4(mRs));
tb.setX(redDim).setY(greenDim).setZ(blueDim);
Type t = tb.create();
mAllocCube = Allocation.createTyped(mRs, t);
mAllocCube.copyFromUnchecked(lut);
mScriptlut.setLUT(mAllocCube);
mScriptlut.forEach(mAllocIn, mAllocOut);
mAllocOut.copyTo(mOutputBitmap);
return mOutputBitmap;
}