SCWCD (web组件开发认证)

本文深入探讨SCWCD认证,涵盖Servlet、JSP的基础知识及应用,解析web应用程序架构,并介绍HTTP协议及其在web开发中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Home > java开发 > Scwcd

SCWCD (web组件开发认证)

 

SCWCDSun certified web component developer

 

1.1servlet

Java服务器小程序,运行于服务器端,是一个中间层,负责接收客户端请求,然后做出响应。

 

Browser ßà Server [servlet …..] ßà Database

【我的思考】

为什么要采用BS模式?试想一下,如果要对数据库操作并包含一定业务逻辑大体上有几种方式?

l         ApplicationßàDatabase

这种方式application 中包含业务逻辑和对数据库的连接、控制、关闭,如果业务逻辑、数据库发生了变化,就需要修改程序后分发给每一个用户,这是非常不可取的。可以说这是单机版或者很小的使用人群可以使用这种方式。

 

l         ClientßàServerßàDatabase

这种方式将业务逻辑和数据库层面的操作都提取出来放到服务器上,由server接收客户端请求并响应,客户端只负责处理本地的业务逻辑,这种方式虽然在一定程度上减少了对客户端更新的情况,但是这种情况依然存在。

 

l         BrowserßàServerßàDatabase

客户端为轻量的,虽然对操作受到一定限制,但是便于服务器端的更行和维护,对客户来说是透明的。

 

BrowserßàServer[ ßàweb server(处理底层网络)ßàapp server(处理业务逻辑)]ßàDB

 

Servlet 的几个重要特性:

线程,不同于cgi使用进程的方式,Servlet会为每一个请求打开一个线程,减少cpu占用

缓存,不用于cgi针对每一个请求会将cgi程序代码载入内存一次,Servlet只载入单一副本

 

Tomcat的安装与配置(略)

Tomcat启动分析

Tomcat启动àcatalina_home(需要预先设置这个环境变量,就是tomcat的安装目录)

Tomcat5之后的版本以catalina作为servlet的容器。

 

Tomcat的目录结构及用途:

目录

功能描述

/bin

存放启动和关闭tomcat的脚本

/common/lib

存放可以被tomcat和所有web应用程序访问的jar

/conf

存放各种配置文件,主要包括:server.xml(tomcat主配置文件)tomcat-users.xml,web.xml

/logs

存放tomcat日志文件

/server/lib

存放只能被tomcat服务器访问的jar

/server/webapps

存放tomcat的两个应用程序,admin应用程序和manager应用程序

/work

Tomcatjsp生成的servlet源文件和字节码文件存放在这个目录下

 

Tomcat体系结构

 

先看下图:

 

l         Server:整个catalina容器

l         Serviceserver包含多个service,每个service将多个连接器绑定到这个serviceengine

l         Connector:负责连接客户端,接收客户请求,返回响应结果。

l         Engine:每个service包含一个引擎,从Connector接收用户请求,处理用户请求。再通过空闲的Connector返回给客户端。

l         Host:一个engine可包含多个虚拟主机

l         Context:代表web应用程序(一个web应用程序是由一组Servlethtml、类以及其他资源组成的运行在web服务器上的完整应用程序),每个context都有唯一的路径。

 

一个servlet示例

Servlet开发分四步:编码、编译、部署、运行

1.         编码

Package chapter01

Import java.io.*;

Import javax.servlet.*;

Import javax.servlet.http.*;

Public class helloWorldServlet extends HttpServlet{

       Public void service(HttpServletRequest request,HttpServletResponse response)

                            Throws ServletException,IOException{

printWriter pw=response.getWriter();

pw.println(“<html>”);

pw.println(“<head>”);

pw.println(“</head>”);

pw.println(“<body>”);

pw.println(“helloWorld”);

pw.println(“</body>”);

pw.println(“</html>”);

}

}

 

上例中引入了javax.servletjavax.servlet.http包位于servlet-api.jarcommon/lib目录下。

 

2.         编译

既可以使用集成开发环境,也可以使用javac命令

 

3.         部署

部署一个web应用程序分两个步骤:

l         web资源放置到指定目录中。

以本例为例:

包:Package chapter01  类:helloWorldServlet

就是将这个文件拷贝至%tomcat_home%/webapps/chapter01/Web-INF/classes目录中

l         编辑web.xml文件配置应用程序,将其放置在web应用程序的Web-INF目录中

本例为:

将编辑好的web.xml文件拷贝至%tomcat_home%/webapps/chapter01/Web-INF/

示例的xml

<?xml version=”1.0” encoding=”ISO-8859-1”?>

<web-app xmlns=http://java.sun.com/xml/ns/j2ee

Xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

Xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd

version=”2.4”>

<display-name>root</display-name>

<servlet>

<servlet-name>helloworldservlet</servlet-name>

<servlet-class>chapter01.helloWorldServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>helloworldservlet</servlet-name>

<url-pattern>/helloworldservlet</url-pattern>

</servlet-mapping>

</web-app>

4.         运行

启动tomcat,打开浏览器,http://localhost:8080/helloworldservlet

Servlet应用开发接口被分成两个包:javax.servletjavax.servlet.http。对这两个包中api的掌握决定了servlet开发的成败。

 

每一个servlet类必须直接或间接的实现javax.servlet. Servlet接口,接口的方法如下:

方法

功能描述

init()

Servlet容器会在servlet实例化后,在放置于服务service()之前精确的调用init()方法,这个方法必须成功执行并退出。

service()

Servlet容器调用这个方法允许Servlet响应请求,在init之前不响应。

destroy()

Servlet容器调用这个方法将servlet实例从service中删除,只有在service所有线程退出或发生超时错误后方可执行。

getServletConfig()

返回servletConfig对象

getServiceInfo()

servlet运行者提供有关信息

Service方法用于处理客户端请求并创建服务器端响应,当客户端发来请求时,Servlet容器自动调用这个方法。

Service(ServletRequest req,ServletResponse res)

Req:代表客户端请求

Res:代表服务器响应

 

Servlet

   |-----------GenericServlet  可继承该类并重载service()完成自己的servlet的功能

                |------javax.servlet.http.HttpServlet   service方法允许servlet响应一个请求

   |-----------ServletRequest  这个类中的方法用于从客户端请求中提取信息。

                           |------java.servlet.http.HttpServletRequest 获取http请求头信息、cookie

   |-----------ServletResponse 这个类中的方法用于发送适当的信息给客户端。

                            |------java.servlet.http.HttpServletResponse 设置响应的头信息、cookie

Servlet优点使用java语言,移植性好

缺点:支持的协议受web服务器限制,至少支持http。必须按照框架规范。

 

2.1 jsp

动态网页的执行过程:

 

Jsp -------------------------------------------------------------------à  web server

                                                        |

                                                        |

                        转换成等价的servletß ---- 处理其中的程序片段

                                |

                                |

         以转换后的servlet和标记替换原片段

                                     |                 

                                     |

ß---html格式返回客户端ß---html部分融合

     

 

所有操作都在服务器端执行,传送给客户端的仅是运行结果。

Jsphtmljava代码构成。

 

Jspservlet引申出来的,具有良好的页面展现,编码简易等特点。

 

Web应用程序由两种技术构成:

l         Servlet:负责处理业务逻辑,如用户校验、访问数据库等

l         Jsp:负责处理表示层,如输入信息表单页面、提示信息等

Jsp架构模式有两种:

l         Jsp+JavaBeanjsp负责处理所有事物,jsp页面独自响应客户端所有请求并将处理结果返回客户端。Jsp接收客户端请求创建javabean访问数据库,处理后将结果返回客户端。这种模式导致页面嵌入大量的脚本语言,难以维护;而且jsp中的代码无法复用,使应用程序组件可复用率达到最低,因此这种模式只适合作为业务逻辑简单且不经常修改的web应用开发使用。

Jsp+Servlet+JavaBean:遵循mvc(模型-视图-控制器)设计模式。Jsp负责表现页面,servlet完成大量事务处理。在这中模式中,servlet负责处理所有请求的事务,充当控制者的角色

l         接收客户端发送的请求

l         创建jsp需要的javabean对象

l         根据用户请求决定将哪个jsp发给用户

 

Jsp技术是scwcd考试的主要内容,构成元素和语法必须要掌握:

类别

元素

功能描述

伪指令

<%@page   %>

指定整体jsp页面属性

<%@include %>

通知jsp容器在当前jsp页面中内嵌指定位置上的资源内容

<%@taglib %>

导入jsp页面开发者的自定义标签

声明

<%! 声明%>

声明、定义方法和变量

脚本

<% 代码%>

java语句集合

表达式

<%=表达式%>

在页面输出值的简洁方式

动作指令

<jsp:include />

在当前jsp页面中包含静态或动态资源,请求时间内允许。

<jsp:forword />

允许将客户端请求转发到另一个资源文件

<jsp:useBean />

jsp中创建一个javabean实例

<jsp:setProperty />

设置javaBean使用的参数值

<jsp:getProperty />

获取javaBean使用的参数值

<jsp:plugin />

允许在jsp页面中插入指定的控件

注释

<%-- 注释 --%>

注释

 

3.1 web应用程序

什么是web应用程序?

就是通过互联网访问的应用程序,基于B/S架构的应用系统。网站是典型的例子,不过网站只是web应用程序的一种。

 

B/SC/S有很多优势:

l         维护升级简单

l         成本低,先期一次投入,后期维护费用较少

l         服务器承担符合,对客户端要求很低

l         数据集中在服务器,安全性高

l         数据库系统对数据统一管理,数据一致性好,实时性好

l         服务器保留有操作日志,数据库有日志可对数据溯源

 

Web资源分为:静态资源(html、图片、flash等)、动态资源(servlet等)

 

http传输过程分四步:

1.         客户端打开一个与服务器的连接

2.         客户端发送一个http请求到服务器端

3.         客户端接收由服务器端返回的响应

4.         关闭与服务器端的连接

 

为什么说http协议是无状态的?

因为服务器端一旦返回响应给客户端本次连接就结束了,也就是说客户端的每一次请求都是全新的、独立的,不依赖于之前的任何一个连接,数据不会从一个请求延续到下一个请求。

 

浏览器:http客户端   web服务器:http服务器端

Html网页、图像文件、servlet等是web资源,每个资源由统一的资源标识符(URI)标识。

 

辨析URIURLURN

l         URI:统一资源标识符,用于标识web资源的字符串,是URL的一部分,没有域名和查询字符串,例如:files/sales/report.html

l         URL:是一个指定传输协议的字符串

n         <protocol>://<server-name>[:port]/<url-path>[?query-string]

n         Protocol:传输协议,不同协议有各自的格式和响应的解析方式。

n         Server-name:服务器名,就是web服务器使用的域名

n         Port:端口号,代表一个特定的服务

n         url-path:路径,指定访问资源的路径

n         query-string:查询字符串,位于问号后面,表示在http请求中发送的数据

l         URN:统一资源名称。是资源的唯一标识,例如:ISBN:1-930110-59-6

 

http请求和http响应统称http消息,二者格式十分相近。

名称

描述

初始行

指定请求或响应消息的目的

标题

指定大小、类型、编码格式等额外的辅助信息,有助于处理该消息

空行

 

正文

请求或响应消息的主体

 

******************http请求****************************

由三部分组成,各部分之间由空格分开。

方法名 URI  HTTP协议版本 

例如:     GET   /reports/sales/index.html    HTTP/1.1

             |             |                   |

         方法名         URI          请求的HTTP协议的版本号

方法名:用于指定客户端请求服务器端希望执行的操作。http请求有8个,分别是:

GETHEADPOSTPUTOPTIONSDELETETRACECONNECT

 

l         Get方法:用于检索资源,一般是静态资源,如html、图像等。也可用于检索动态资源,适用于不包含或包含少量参数的http请求,如果请求包含参数,则参数会以查询字符串形式追加到URI尾部,如:

GET  /servlet/helloServlet?userid=songyc&userpwd=111  http/1.1

多个查询字符串之间用&分隔。

HTTP请求中增加查询字符串可以不用通过表单发送数据,避免了检索数据的步骤。缺点是URL最多可接受240个字符,且不保密。

 

l         HEAD方法:用于检查请求的资源最新的修改时间。

 

l         POST方法:用于发送数据到服务器端,html网页使用post方法提交表单数据

初始行         POST  /servlet/helloServlet  http/1.1

 

头信息         User-Agent:MOZILLA/1/1

               Content-Type:application/x-www-form-urlencoded     ß请求的数据类型

                        ContentLength:11                  ß请求的数据长度

 

空白行

正文           userid=john   ß请求的数据

 

很明显,post方法将参数放在正文中,而get方法将参数放在uri中。

l         PUT方法:用于向服务器端添加资源,即发布文件到服务器端。例如:可以使用

http://www.myhome.com/files/example.html将一个客户端本地文件example.html放置在服务器端。

Post方法是发送数据到服务器端处理,Put方法是发送数据到服务器端指定的URI处。

 

HTTP响应:是服务器端向客户端发消息。一个响应包含三部分:

HTTP协议版本

状态码

描述

例如:

http/1.1 404 not found

http/1.1 500 internal errorß描述,就是描述状态码的短语

        |

      状态码是请求的结果

 

触发http请求的三种途径:

1.         点击网页超链接

2.         点击表单的提交按钮

3.         地址栏直接输入

 

只有浏览器默认使用get方法在网页表单中才不需要指定method属性,除此之外必须指定。

<form name=’loginform’ method=’post’ action=’/loginServlet’>

<input type=’text’ name=’userid’>

<input type=’password’ name=’passwd’>

</form>

 

Getpost方法比较:

特性

Get方法

Post方法

可被请求的对象

动态、静态web资源。适合获取html和图像等,只需发送文件名给服务器即可

动态web资源

传输数据类型

文本

文本、二进制文件

传输数据量

请求240个字符以内

请求自身没有限制

数据保密性

不保密

保密

数据缓存

数据可在浏览器的url历史中保存下来

数据不能在浏览器的url历史中保存

 

******************处理http请求************************************

在了解了http协议方法如何发送http请求及各自适用的场景后,继续学习http协议如何与servlet通信。

 

http请求àweb服务器-----------------àhttp方法映射到Servlet中对应的方法

                         |    

                       解析

                         |

              Servlet容器调用HttpServletservice(ServletRequestServletResponse)方法

                         |

              上面的方法继而调用service(HttpServletRequestHttpServletResponse)

                                        |

                   调用doXXX()方法

 

http协议方法

httpServlet方法

Get

doGet()

Head

doHead()

Put

doPut()

Post

doPost()

Delete

doDelete()

Options

doOptions()

trace

doTrace()

少了一个connect的对应?不知道是否书作者的疏漏

上述所有httpServlet方法均为空,需要程序员重载,自行编辑业务逻辑和处理。

 

这里需要注意的是:service()方法如果重载之后不会自动映射doXXX()方法,所以不要重载它,只要重载doPost()doGet()方法,底层的调用交给Servlet容器处理。

 

所有doXXX()方法都具有两个参数:HttpServletRequestHttpServletResponse

Servlet容器负责实现这两个接口的类实例对象。

 

HttpServletRequest接口是最常用的,继承自ServletRequest专门针对web应用程序,http协议。

先看一下ServletRequest 主要用途是从客户端请求中提取数据,常用的检索数据的方法如下:

方法

功能描述

String getParameter(String paramName)

获取指定参数的值

String[] getParameterValues(String paramName)

获取指定参数的所有值,如一个参数有多个值的情况,典型的是复选

Enumeration getParameterNames()

获取所有参数的名字。用于不知道参数名要获取参数值的情况,然后通过循环遍历结合getParametergetParameterValues获取参数值。

 

 

http

 

Servlet容器的方法

方法

功能描述

Void init(ServletConfig)

Servlet容器调用此方法初始化Servlet

Void service(ServletRequest,ServletResponse)

Servlet容器调用此方法

Void destroy()

 

 

 

 

Web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

 

<web-app>

<!------------------过滤器定义---------------------------->

  <filter>

    <filter-name>TradeAssistantAutoLoginFilter</filter-name>    <filter-class>net.emedchina.tradeassistantclient.filter.TradeAssistantAutoLoginFilter</filter-class>

  </filter> 

 <filter-mapping>

    <filter-name>TradeAssistantAutoLoginFilter</filter-name>

    <servlet-name>Portal</servlet-name>

  </filter-mapping> 

<!------------------servlet定义---------------------------->

  <servlet>

    <servlet-name>Portal</servlet-name>

    <servlet-class>net.emedchina.base.Portal</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>Portal</servlet-name>

    <url-pattern>/portal</url-pattern>

  </servlet-mapping>

<!------------------标签库定义---------------------------->

  <taglib>

    <taglib-uri>emed-html</taglib-uri>

    <taglib-location>/WEB-INF/emed-html.tld</taglib-location>

  </taglib>

<!------------------资源定义---------------------------->

  <resource-ref>

    <res-ref-name>jdbc/gpo_ds</res-ref-name>  

    <res-type>javax.sql.DataSource</res-type>  

    <res-auth>CONTAINER</res-auth>

  </resource-ref>

<!------------------会话超时定义---------------------------->

  <session-config>

    <session-timeout>1440</session-timeout>

  </session-config>

<!------------------监听器定义----------------------------> 

    <listener>        <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>

    </listener>

 

  <mime-mapping>

    <extension>wsdl</extension>

     <mime-type>text/xml</mime-type>

  </mime-mapping>

    <mime-mapping>

    <extension>xsd</extension>

    <mime-type>text/xml</mime-type>

  </mime-mapping>

<!------------------上下文定义---------------------------->

       <context-param>

        <param-name>appId</param-name>

        <param-value>jundui</param-value>

       </context-param>

</web-app>

 

先来看

<filter>

    <filter-name>TradeAssistantAutoLoginFilter</filter-name>    <filter-class>net.emedchina.tradeassistantclient.filter.TradeAssistantAutoLoginFilter</filter-class>

 </filter>

 

net.emedchina.tradeassistantclient.filter.TradeAssistantAutoLoginFilter.java

引入部分:

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import net.emedchina.tradeassistantclient.util.UserHelper;

import net.emedchina.user.db.GpoUsrUser;

import javax.servlet.http.*;

import java.io.*;

import org.apache.log4j.Logger;

 

类体

public class TradeAssistantAutoLoginFilter implements Filter{

       private static Logger log = Logger.getLogger(TradeAssistantAutoLoginFilter.class);

       private static final String USER_LOGIN ="user.login";

       private static final String OPERATE = "Login";

       public void init(FilterConfig arg0) throws ServletException {}

       public void destroy() {}

       public void doFilter(ServletRequest req, ServletResponse resp,

                                           FilterChain chain) throws IOException, ServletException  {

              HttpServletRequest request = (HttpServletRequest)req;

              HttpSession session = request.getSession(true);

           //若为交易助手客户端用户且还未登录web则自动登录

               String TAclient  =  (String)request.getParameter("TAClient");

              if( TAclient!=null&&TAclient.equals("1")&&(session == null || (GpoUsrUser)session.getAttribute("USER_SESSION")==null) ) {

                     String code  =  (String)request.getParameter("code");

                  String passWord  =  (String)request.getParameter("passWord");

            java.sql.Connection con_con=null;                    

                            try{

                    con_con = net.emedchina.common.db.ConnectionManager.getConnection();

                    if (con_con==null) throw new ServletException("fail to get db connection");

                    GpoUsrUser currentUser=UserHelper.doAutoLogin(con_con,code,passWord);

                    if (currentUser==null) throw new ServletException("Your password error or you don't have the right to access this module!");

                    currentUser.checkPermission(null);

                    session.setAttribute("USER_SESSION",currentUser);

                }catch(Exception e){                             

                       throw new ServletException(e.getMessage());                    

                }finally{                  

                    try {     

                       if(con_con != null) {

                         con_con.close();

                         con_con=null;

                       }        

                    }catch(Exception e1){};                                       

                }                         

              }                                       

              //如果是客户端用户则处理输出

              if( TAclient!=null&&TAclient.equals("1")){

                 resp.setContentType("text/html; charset=GBK");

                 TSClientResponseWrapper rw=new TSClientResponseWrapper((HttpServletResponse)resp);

                 chain.doFilter(request,rw);              

                 rw.getOutputStream().flush();

              }else{

                     chain.doFilter(request, resp);

              }

       }    

}

再来看

  <servlet>

    <servlet-name>Portal</servlet-name>

    <servlet-class>net.emedchina.base.Portal</servlet-class>

  </servlet>

 

emedFrameworknet.emedchina.base.Portal.java

引入部分

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import net.emedchina.tradeassistantclient.util.UserHelper;

import net.emedchina.user.db.GpoUsrUser;

import javax.servlet.http.*;

import java.io.*;

import org.apache.log4j.Logger;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import org.apache.log4j.Logger;

 

类体

       private static final long serialVersionUID = -3256171887584782623L;

       private static Logger log = Logger.getLogger(Portal.class);

       //在开发时将其设为falseurl后直接加菜单的字符串方便调试。

       public static boolean isLogin = true;

       /**

        * 重载doGet  doPost

        * 调用doServlet

        */

       protected void doGet(HttpServletRequest request,

                                           HttpServletResponse response)

                              throws javax.servlet.ServletException, java.io.IOException     {

              doServlet(request, response);

       }

       protected void doPost(HttpServletRequest request,

                                            HttpServletResponse response)

                               throws javax.servlet.ServletException, java.io.IOException   {

              doServlet(request, response);

       }

       /**

        * !本函数设置env! * 权限检查 * 用户认证

        */

       private void doServlet(HttpServletRequest request,

                                             HttpServletResponse response)

                                   throws javax.servlet.ServletException, java.io.IOException {

              Environment env = null;

              if (request instanceof EmedHttpRequestWrap){

                     //得看一下这个东东EmedHttpRequestWrap

                     env = ((EmedHttpRequestWrap)request).getEnv();//返回env对象

              }else{

                     env = new Environment(request, response);

              }try{

                     performTask(env);//

                     //提交

                     env.commitConnection();

              }catch (EmedException e){

                     try{

                            env.rollbackConnection();

                     }catch (SQLException ee)     {}

                     request.setAttribute("ServletException", e);

                     setNextPage(env, "/common/error/error.jsp");

                     log.error(e.getMessage());

              }catch (Throwable e){   //系统捕获不到的错误                                    

                     try{

                            env.rollbackConnection();

                     }catch (SQLException ee){}

                     request.setAttribute("ServletException", e);

                     setNextPage(env, "/common/error/error.jsp");

              }finally{//关闭数据库连结

                     try{

                            env.closeConnection();

                     }catch (Exception e){}

              }

              //转向

              request.setAttribute("output", env.getOutput());

              request.setAttribute("ourNextPage",env.getNextPage());

              toNextPage(request, response, env.getNextPage());

       }

       public void performTask(Environment env) throws Throwable   {

              String operate = env.getInput().operate;

              //这是什么东东  BusinessHandlerConfig???

              String businessName = BusinessHandlerConfig.getValue(env.getInput().handlerId +

                                                                                                          "");

              if ((businessName == null) || (businessName.length() == 0))             {

                     throw new BaseException("没有配置Servlet ID值为" +

                                                               env.getInput().handlerId +

                                                               "请检查ServletConfig文件");

              }

              if (operate == null){

                     throw new BaseException("operate没有定义");

              }

              //session

              if ("1".equals(env.getInput().getIsMenuFlag()))    {

                     env.removeMenuSession();

                     env.getInput().setIsMenuFlag("0");

              }

              if (isLogin &&

                            (!(env.getInput().handlerId.equals(SysConfig.getLoginHandler()) &&

                            env.getInput().operate.equals(SysConfig.getLoginOperate()))) &&

                            (!(env.getInput().handlerId.equals(SysConfig.getLoginHandler()) &&

                            env.getInput().operate.equals(SysConfig.getLogoutOperate()))) &&

                            (!(env.getInput().handlerId.equals("key.login") &&

                            env.getInput().operate.equals(SysConfig.getLoginOperate()))) &&

                            (!(env.getInput().handlerId.equals("key.login") &&

                            env.getInput().operate.equals(SysConfig.getLogoutOperate()))) &&

                            (!(env.getInput().handlerId.equals("key.login") &&

                            env.getInput().operate.equals("Interact"))) &&

                            (!(env.getInput().handlerId.equals("key.login") &&

                            env.getInput().operate.equals("InteractStep1")))){

                     if (env.getCurrentUser() == null) {

                            env.setNextPage("/index.jsp");

                            return;

                     }

              }

              if(StringUtils.isNotEmpty(env.getInput().getCurrModuleID())){

                     env.setSession("navigation_str" , getNavigation(env.getInput().getCurrModuleID() , env.getCon()));

              }

              Class[] paraType = {Environment.class};

              Class   businessClass = null;

              try{

                     businessClass = Class.forName(businessName);

              }catch (Exception e){

                     throw new BaseException(businessName + "类没有找到," +

                                                               "请检查ServletConfig文件");

              }

              try{

                     java.lang.reflect.Method method = businessClass.getMethod("do" +operate, paraType);

                     Object[] para = {env};

                     method.invoke(businessClass.newInstance(), para);

              }catch (NoSuchMethodException e){

                     throw new BaseException(businessClass.getName() + "没有定义" + "do" +

                                                               operate + "(Environment env)方法");

              }catch (IllegalAccessException e){

                     throw new BaseException(e);

              }catch (java.lang.reflect.InvocationTargetException e){

                     throw e.getTargetException();

              }

       }

       /**

        * 设置转向页

        */

       protected void setNextPage(Environment env, java.lang.String newNextPage)   {

              env.setNextPage(newNextPage);

       }

       private void toNextPage(HttpServletRequest request,

                                                 HttpServletResponse response, String nextPage)

                                    throws java.io.IOException, javax.servlet.ServletException{

              if (nextPage == null){

                     throw new EmedRuntimeException("下页面为空");

              }

              while ((nextPage.charAt(0) == '/') && (nextPage.length() > 1)){

                     nextPage = nextPage.substring(1);

              }

              getServletConfig().getServletContext()

                     .getRequestDispatcher('/' + nextPage).forward(request, response);

       }

       private static String getNavigation (String moduleId , Connection connection){

              PreparedStatement st = null;

              ResultSet rs = null;

              String navigation = null;

              try {

              st = connection.prepareStatement ("select ((select name from gpo_usr_module a where a.id = b.father_id) || ' >> ' || b.name ) navigation from gpo_usr_module b where id = ? ");

                     st.setString(1, moduleId);

                     rs = st.executeQuery ();

                     if (rs.next ()){

                            navigation =  rs.getString("navigation");

                     }

              } catch(SQLException sqle){                    

              }finally {

                     if (rs != null){

                            try {

                                   rs.close ();

                            } catch (SQLException e) {}

                     }

                     if (st != null){

                            try {

                                   st.close ();

                            } catch (SQLException e) {}

                     }

                     return navigation;

              }

       }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值