mainservlet.java
来自「Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI」· Java 代码 · 共 409 行 · 第 1/2 页
JAVA
409 行
getServletConfig().getServletContext().setAttribute("context", sm);
}
catch( Exception e )
{
if ( logger != null) {
logger.fatalError("Could not start server", e);
}
ContainerUtil.dispose( raplaMainContainer);
log( "Problem starting Rapla ", e );
throw new ServletException( "Error during initialization", e );
}
log("Rapla Servlet started");
}
/**
* Pass all servlet requests through to container to be handled.
^s */
public void service( HttpServletRequest request, HttpServletResponse response )
throws IOException, ServletException
{
String page = request.getParameter("page");
String contextPath =request.getRequestURI();
int rpcIndex=contextPath.indexOf("/rapla/rpc/") ;
if ( rpcIndex>= 0) {
handleRPCCall( request, response, contextPath );
return;
}
if ( page == null || page.trim().length() == 0) {
page = "index";
}
if ( page == null){
// for compatibility with versions prior to 1.0RC1
String completeURL = request.getRequestURL().toString();
int oldExportCompatibility = completeURL.indexOf("/export/calendar.jsp");
if ( oldExportCompatibility>=0) {
String redirectURL = completeURL.substring(0, oldExportCompatibility) + completeURL.substring( oldExportCompatibility + "/export".length()) + "?" + request.getQueryString();
response.sendRedirect( redirectURL);
return;
}
// for compatibility with versions prior to 1.0RC1
String servletPath = request.getPathInfo().trim();
page = servletPath.substring(1);
int jspIndex = page.indexOf(".jsp") ;
if ( jspIndex >= 0){
page = page.substring(0,jspIndex);
}
int jnlp = page.indexOf("raplaclient.jnlp") ;
if ( jnlp >= 0){
page = "raplaclient";
}
}
if ( page == null )
{
throw new ServletException( "Cant process your servlet request " + contextPath);
}
if (pageList.contains( page) ) {
RaplaPageGenerator servletPage;
try {
servletPage = (RaplaPageGenerator) serverService.getContext().lookup( RaplaExtensionPoints.SERVLET_PAGE_EXTENSION + "/" + page );
} catch (RaplaContextException e) {
java.io.PrintWriter out = response.getWriter();
out.println(IOUtil.getStackTraceAsString( e));
throw new ServletException( e);
}
servletPage.generatePage( getServletContext(), request, response);
} else {
throw new ServletException( "Page " + page + " not found in Rapla context");
}
}
private void handleRPCCall( HttpServletRequest request, HttpServletResponse response, String contextPath ) throws IOException
{
int rpcIndex=contextPath.indexOf("/rapla/rpc/") ;
String methodName = contextPath.substring(rpcIndex + "/rapla/rpc/".length());
HttpSession session = request.getSession( true);
if ( methodName.equals("getException"))
{
Exception ex = (Exception)session.getAttribute("lastException");
if ( ex == null)
{
response.sendError( 500 , "No exception found");
} else {
ObjectOutputStream out = new ObjectOutputStream( response.getOutputStream());
out.writeObject( ex);
out.flush();
}
return;
}
String username = (String)session.getAttribute("username");
try
{
Map paramterMap = makeSingles(request.getParameterMap());
ServerServiceImpl server = (ServerServiceImpl)raplaMainContainer.getContext().lookup( ServerService.ROLE);
if ( methodName.equals("login"))
{
username = server.login( paramterMap);
session.setAttribute("username", username);
response.getWriter().println("Login successfull" );
}
else if ( methodName.equals("logout"))
{
session.removeAttribute("username");
response.getWriter().println("User logout" );
}
else
{
RemoteSession remoteSession = (RemoteSession)session.getAttribute(RemoteSession.class.getName());
if ( remoteSession != null)
{
// If session was created by another server, than invalidate
if (((RemoteSessionImpl)remoteSession).getServerStartTime() != serverStartTime)
{
remoteSession = null;
}
}
if ( remoteSession == null)
{
remoteSession = new RemoteSessionImpl(server.getContext(), session.getId(), serverStartTime);
session.setAttribute( RemoteSession.class.getName(), remoteSession);
}
((RemoteSessionImpl)remoteSession).setUsername( username);
byte[] out = server.dispatch(remoteSession, methodName, paramterMap);
response.setContentType( "text/html; charset=utf-8");
//response.setCharacterEncoding( "utf-8" );
response.getOutputStream().write( out );
}
// response.getWriter().println("There are currently " + reservations + " reservations");
}
catch (Exception e)
{
String message = e.getMessage();
if ( message == null )
{
message = e.getClass().getName();
}
session.setAttribute( "lastException", e);
response.addHeader("X-Error-Stacktrace", message);
response.getWriter().println("Error: " + IOUtil.getStackTraceAsString( e));
//response.sendError( 500, e.getMessage());
response.setStatus( 500);
//throw new ServletException( e);
}
}
private Map makeSingles( Map parameterMap )
{
Map singlesMap = new HashMap();
for (Iterator it = parameterMap.keySet().iterator();it.hasNext();)
{
String key = (String)it.next();
String[] values = (String[]) parameterMap.get( key);
if ( values != null && values.length > 0 )
{
singlesMap.put( key,values[0]);
}
else
{
singlesMap.put( key,null);
}
}
return singlesMap;
}
private void stopServer() {
try {
ShutdownService shutdownService = (ShutdownService) raplaMainContainer.getContext().lookup(ShutdownService.ROLE);
shutdownService.removeShutdownListener( shutdownListener );
ContainerUtil.dispose( raplaMainContainer );
} catch (Exception ex) {
log("Error while stopping server");
}
}
/**
* Disposes of container manager and container instance.
*/
public void destroy()
{
log("Destroying rapla");
stopServer();
}
public RaplaContext getContext()
{
return raplaMainContainer.getContext();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?