JSP - 退出执行其余代码

时间:2012-02-19 07:51:25

标签: jsp session

在我的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();

3 个答案:

答案 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>
    .......
<%   } %>

除了

  • 你不应该使用scriptlet,而是JSP页面中的JSP EL和JSTL
  • 这样的逻辑不应该在JSP中,它只需要生成标记。它应该在您首选的MVC框架的操作servlet中,该框架将重定向或分派到JSP。

答案 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;
    }