controllerservlet.java~18~

来自「一个自己做的公司网站和办公职员管理系统。」· JAVA~18~ 代码 · 共 212 行

JAVA~18~
212
字号
package ws.woa.core;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ws.woa.logger.LogManager;
import ws.woa.util.StrUtil;

/**
 * 僌儖乕僾僂僃傾偺僄儞僩儕億僀儞僩偱偁傞僒乕僽儗僢僩丅
 *
 * @author Wang
 */
public class ControllerServlet extends HttpServlet {

    public static ServletContext _context;
    private SystemConfig  config;
    private ModulePluginManager modulePluginMgr;
    private Exception initException;

    /**
     * 僌儖乕僾僂僃傾慡懱偺弶婜壔張棟
     * @see javax.servlet.Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        this._context = config.getServletContext();

        try {
            // Servlet撪偱巊梡偡傞僔儞僌儖僩儞僋儔僗偺弶婜壔
            this.config = SystemConfig.getInstance();
            this.modulePluginMgr = ModulePluginManager.getInstance();

            // SystemContext撪偱巊梡偡傞僔儞僌儖僩儞僋儔僗偺弶婜壔
            LogManager        logMgr = LogManager.getInstance();
            DataSourceManager dsMgr  = DataSourceManager.getInstance();

        } catch(Exception ex){
            // 弶婜壔拞偵僄儔乕偑敪惗
            initException = ex;
        }
    }


    /**
     * doProcess儊僜僢僪偵張棟傪埾忳偟傑偡丅
     *
     * @param request  儕僋僄僗僩
     * @param response 儗僗億儞僗
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest, HttpServletResponse)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
        doProcess(request,response);
    }

    /**
     * doProcess儊僜僢僪偵張棟傪埾忳偟傑偡丅
     *
     * @param request  儕僋僄僗僩
     * @param response 儗僗億儞僗
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest, HttpServletResponse)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
        doProcess(request,response);
    }

    /**
     * 儘僌僀儞拞偺儐乕僓偺忣曬傪奿擺偟偨UserInfo傪庢摼偟傑偡丅
     * @param request
     * @return UserInfo
     */
    private UserInfo getUserInfo(HttpServletRequest request){
        return (UserInfo)request.getSession().getAttribute("userInfo");
    }

    /**
     * 儘僌僀儞拞偐偳偆偐傪敾抐偟傑偡丅
     * @param request
     * @return true=儘僌僀儞拞丄false=枹儘僌僀儞
     */
    private boolean isLogin(HttpServletRequest request){
        if(getUserInfo(request)==null){
            return false;
        } else {
            return true;
        }
    }

    /**
     * 傾僋僙僗尃丄儘僌僀儞僠僃僢僋傪峴偄傑偡丅晄惓側応崌偼椺奜傪搳偘傑偡丅
     */
    private void accessCheck(ModuleInfo moduleInfo,HttpServletRequest request)
                                              throws ApplicationException {
        // ACCESS_ALL_USERS偺応崌
        if(moduleInfo.getModuleAccessLevel()==ModuleAccessLevel.ALL_USERS){
            if(!isLogin(request)){
                throw new ApplicationException(Constants.ERR_NEEDLOGIN,"login.module");
            }
        // ACCESS_ADMIN_ONLY偺応崌
        } else if(moduleInfo.getModuleAccessLevel()==ModuleAccessLevel.ADMIN_ONLY){
            if(!isLogin(request)){
                throw new ApplicationException(Constants.ERR_NEEDLOGIN,"login.module");
            }
            if(getUserInfo(request).getGroupType()!=GroupType.ADMIN){
                throw new ApplicationException(Constants.ERR_PERMISSION,"portal.module");
            }
        }
    }

    /**
     * Servlet丄JSP丄HTML僼傽僀儖偺撪梕傪僀儞僋儖乕僪偟傑偡丅
     */
    private void includeJSP(String jsp,HttpServletRequest request,
            HttpServletResponse response) throws ServletException,IOException {
        ServletContext context = getServletContext();
        RequestDispatcher dis = context.getRequestDispatcher(jsp);
        dis.include(request,response);
    }

    /**
     * 奺儌僕儏乕儖偺僴儞僪儔偵僨傿僗僷僢僠傪峴偄傑偡丅
     *
     * @param request  儕僋僄僗僩
     * @param response 儗僗億儞僗
     */
    private void doProcess(HttpServletRequest request, HttpServletResponse response)
                                      throws ServletException, IOException {

        // 儕僋僄僗僩傪儔僢僾偡傞
        String cType = request.getContentType();
        Request reqWrap = null;
        if(cType!=null && cType.toLowerCase().startsWith("multipart/form-data")){
             reqWrap = new RequestMultipart(request,this.config.getRequestEncode());
        } else {
             reqWrap = new RequestNormal(request,this.config.getRequestEncode());
        }

        // 儌僕儏乕儖柤傪庢摼
        String path = request.getServletPath();
        String moduleName = path.substring(1,path.indexOf("."));

        // 僿僢僟傪弌椡
        response.setContentType("text/html; charset=Shift_JIS");
        PrintWriter out = response.getWriter();

        try {
            // 僿僢僟傪僀儞僋儖乕僪
            includeJSP(Constants.JSP_HEADER,request,response);

            // 弶婜壔偵幐攕偟偰偄偨応崌偼偦偺椺奜傪搳偘傞
            if(initException!=null){
               throw initException;
            }

            ModuleHandler handler = this.modulePluginMgr.getModuleHandler(moduleName);

            // 傾僋僙僗尃偺僠僃僢僋
            ModuleInfo moduleInfo = this.modulePluginMgr.getModuleInfo(moduleName);
            accessCheck(moduleInfo,request);

            // 僴儞僪儔偵張棟傪埾忳
            ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
            PrintWriter dummyOut = new PrintWriter(byteOut);
            Response resWrap = new Response(response,dummyOut);
            handler.init(new SystemContext(reqWrap,resWrap));
            handler.doProcess(reqWrap,resWrap);
            dummyOut.flush();

            // 儘僌僀儞拞偺傒僫價僎乕僔儑儞傪昞帵
            if(isLogin(request)){
                includeJSP(Constants.JSP_NAVI,request,response);
            }

            // 儌僕儏乕儖偺弌椡偟偨HTML傪弌椡
            out.println(new String(byteOut.toByteArray()));
            byteOut.close();

        } catch(ApplicationException ex){
            // 傾僾儕働乕僔儑儞僄儔乕
            out.println("<PRE CLASS=\"Alert\">"+StrUtil.formFilter(ex.getMessage())+"</PRE><BR>");

            if(ex.getBackURL()!=null){
                out.print("[ <A HREF=\""+ex.getBackURL()+"\">Go Back</A> ]");
            }

        } catch(Exception ex){
            // 抳柦揑側僄儔乕帪偺張棟
            out.println("<PRE>");
            ex.printStackTrace(out);
            out.println("</PRE><BR>");
        }

        // 僼僢僞傪僀儞僋儖乕僪
        includeJSP(Constants.JSP_FOOTER,request,response);

        out.flush();
        out.close();
    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?