¡¡Äãʱ³£±»¿Í»§±§Ô¹JSPÒ³ÃæÏìÓ¦ËٶȺÜÂýÂð£¿ÄãÏë¹ýµ±¿Í»§·ÃÎÊ´ÎÊý¾çÔöʱ£¬ÄãµÄWEBÓ¦ÓÃÄܳÐÊÜÈÕÒæÔö¼ÓµÄ·ÃÎÊÁ¿Â𣿱¾ÎĽ²ÊöÁ˵÷ÕûJSPºÍservletµÄһЩ·Ç³£ÊµÓõķ½·¨£¬Ëü¿ÉʹÄãµÄservletºÍJSPÒ³ÃæÏìÓ¦¸ü¿ì£¬À©Õ¹ÐÔ¸üÇ¿¡£¶øÇÒÔÚÓû§ÊýÔö¼ÓµÄÇé¿öÏ£¬ÏµÍ³¸ºÔØ»á³ÊÏÖ³öƽ»¬Éϳ¤µÄÇ÷ÊÆ¡£ÔÚ±¾ÎÄÖУ¬ÎÒ½«Í¨¹ýһЩʵ¼ÊÀý×ÓºÍÅäÖ÷½·¨Ê¹µÃÄãµÄÓ¦ÓóÌÐòµÄÐÔÄÜÓгöÈËÒâÁϵÄÌáÉý¡£ÆäÖУ¬Ä³Ð©µ÷Óż¼ÊõÊÇÔÚÄãµÄ±à³Ì¹¤×÷ÖÐʵÏֵġ£¶øÁíһЩ¼¼ÊõÊÇÓëÓ¦Ó÷þÎñÆ÷µÄÅäÖÃÏà¹ØµÄ¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«ÏêϸµØÃèÊöÔõÑùͨ¹ýµ÷ÕûservletºÍJSPÒ³Ã棬À´Ìá¸ßÄãµÄÓ¦ÓóÌÐòµÄ×ÜÌåÐÔÄÜ¡£ÔÚÔĶÁ±¾ÎÄ֮ǰ£¬¼ÙÉèÄãÓлù±¾µÄservletºÍJSPµÄ֪ʶ¡£
¡¡·½·¨Ò»£ºÔÚservletµÄinit()·½·¨Öлº´æÊý¾Ý
¡¡µ±Ó¦Ó÷þÎñÆ÷³õʼ»¯servletʵÀýÖ®ºó£¬Îª¿Í»§¶ËÇëÇóÌṩ·þÎñ֮ǰ£¬Ëü»áµ÷ÓÃÕâ¸öservletµÄinit()·½·¨¡£ÔÚÒ»¸öservletµÄÉúÃüÖÜÆÚÖУ¬init()·½·¨Ö»»á±»µ÷ÓÃÒ»´Î¡£Í¨¹ýÔÚinit()·½·¨Öлº´æһЩ¾²Ì¬µÄÊý¾Ý»òÍê³ÉһЩֻÐèÒªÖ´ÐÐÒ»´ÎµÄ¡¢ºÄʱµÄ²Ù×÷£¬¾Í¿É´ó´óµØÌá¸ßϵͳÐÔÄÜ¡£
¡¡ÀýÈ磬ͨ¹ýÔÚinit()·½·¨Öн¨Á¢Ò»¸öJDBCÁ¬½Ó³ØÊÇÒ»¸ö×î¼ÑÀý×Ó£¬¼ÙÉèÎÒÃÇÊÇÓÃjdbc2.0µÄDataSource½Ó¿ÚÀ´È¡µÃÊý¾Ý¿âÁ¬½Ó£¬ÔÚͨ³£µÄÇé¿öÏ£¬ÎÒÃÇÐèҪͨ¹ýJNDIÀ´È¡µÃ¾ßÌåµÄÊý¾ÝÔ´¡£ÎÒÃÇ¿ÉÒÔÏëÏóÔÚÒ»¸ö¾ßÌåµÄÓ¦ÓÃÖУ¬Èç¹ûÿ´ÎSQLÇëÇó¶¼ÒªÖ´ÐÐÒ»´ÎJNDI²éѯµÄ»°£¬ÄÇϵͳÐÔÄܽ«»á¼±¾çϽµ¡£½â¾ö·½·¨ÊÇÈçÏ´úÂ룬Ëüͨ¹ý»º´æDataSource£¬Ê¹µÃÏÂÒ»´ÎSQLµ÷ÓÃʱÈÔÈ»¿ÉÒÔ¼ÌÐøÀûÓÃËü£º
[code]public class ControllerServlet extends HttpServlet
{
¡¡private javax.sql.DataSource testDS = null;
¡¡public void init(ServletConfig config) throws ServletException
¡¡{
¡¡¡¡super.init(config);
¡¡¡¡Context ctx = null;
¡¡¡¡try
¡¡¡¡{
¡¡¡¡¡¡ctx = new InitialContext();
¡¡¡¡¡¡testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
¡¡¡¡}
¡¡¡¡catch(NamingException ne)
¡¡¡¡{
¡¡¡¡¡¡ne.printStackTrace();
¡¡¡¡}
¡¡¡¡catch(Exception e)
¡¡¡¡{
¡¡¡¡¡¡e.printStackTrace();
¡¡¡¡}
¡¡}
¡¡public javax.sql.DataSource getTestDS()
¡¡{
¡¡¡¡return testDS;
¡¡}
¡¡...
¡¡...
}[/code]
¡¡·½·¨ 2:½ûÖ¹servletºÍJSP ×Ô¶¯ÖØÔØ(auto-reloading)
¡¡Servlet/JSPÌṩÁËÒ»¸öʵÓõļ¼Êõ£¬¼´×Ô¶¯ÖØÔؼ¼Êõ£¬ËüΪ¿ª·¢ÈËÔ±ÌṩÁËÒ»¸öºÃµÄ¿ª·¢»·¾³£¬µ±Äã¸Ä±äservletºÍJSPÒ³Ãæºó¶ø²»±ØÖØÆôÓ¦Ó÷þÎñÆ÷¡£È»¶ø£¬ÕâÖÖ¼¼ÊõÔÚ²úÆ·ÔËÐн׶ζÔϵͳµÄ×ÊÔ´ÊÇÒ»¸ö¼«´óµÄËðºÄ£¬ÒòΪËü»á¸øJSPÒýÇæµÄÀà×°ÔØÆ÷(classloader)´øÀ´¼«´óµÄ¸ºµ£¡£Òò´Ë¹Ø±Õ×Ô¶¯ÖØÔع¦ÄܶÔϵͳÐÔÄܵÄÌáÉýÊÇÒ»¸ö¼«´óµÄ°ïÖú¡£
¡¡·½·¨ 3: ²»ÒªÀÄÓÃHttpSession
¡¡ÔںܶàÓ¦ÓÃÖУ¬ÎÒÃǵijÌÐòÐèÒª±£³Ö¿Í»§¶ËµÄ״̬£¬ÒÔ±ãÒ³ÃæÖ®¼ä¿ÉÒÔÏ໥ÁªÏµ¡£µ«²»ÐÒµÄÊÇÓÉÓÚHTTP¾ßÓÐÌìÉúÎÞ״̬ÐÔ£¬´Ó¶øÎÞ·¨±£´æ¿Í»§¶ËµÄ״̬¡£Òò´ËÒ»°ãµÄÓ¦Ó÷þÎñÆ÷¶¼ÌṩÁËsessionÀ´±£´æ¿Í»§µÄ״̬¡£ÔÚJSPÓ¦Ó÷þÎñÆ÷ÖУ¬ÊÇͨ¹ýHttpSession¶ÔÏñÀ´ÊµÏÖsessionµÄ¹¦Äܵģ¬µ«ÔÚ·½±ãµÄͬʱ£¬ËüÒ²¸øϵͳ´øÀ´Á˲»Ð¡µÄ¸ºµ£¡£ÒòΪÿµ±Äã»ñµÃ»ò¸üÐÂsessionʱ£¬ÏµÍ³ÕßÒª¶ÔËü½øÐзÑʱµÄÐòÁл¯²Ù×÷¡£Äã¿ÉÒÔͨ¹ý¶ÔHttpSessionµÄÒÔϼ¸ÖÖ´¦Àí·½Ê½À´ÌáÉýϵͳµÄÐÔÄÜ£º
¡¡¡¡? Èç¹ûûÓбØÒª£¬¾ÍÓ¦¸Ã¹Ø±ÕJSPÒ³ÃæÖжÔHttpSessionµÄȱʡÉèÖ㺠Èç¹ûÄãûÓÐÃ÷È·Ö¸¶¨µÄ»°£¬Ã¿¸öJSPÒ³Ã涼»áȱʡµØ´´½¨Ò»¸öHttpSession¡£Èç¹ûÄãµÄJSPÖв»ÐèҪʹÓÃsessionµÄ»°£¬ÄÇ¿ÉÒÔͨ¹ýÈçϵÄJSPÒ³Ãæָʾ·ûÀ´½ûÖ¹Ëü£º
£¼%@ page session="false"%£¾
¡¡¡¡? ²»ÒªÔÚHttpSessionÖдæ·Å´óµÄÊý¾Ý¶ÔÏñ£ºÈç¹ûÄãÔÚHttpSessionÖдæ·Å´óµÄÊý¾Ý¶ÔÏñµÄ»°£¬Ã¿µ±¶ÔËü½øÐжÁдʱ£¬Ó¦Ó÷þÎñÆ÷¶¼½«¶ÔÆä½øÐÐÐòÁл¯£¬´Ó¶øÔö¼ÓÁËϵͳµÄ¶îÍ⸺µ£¡£ÄãÔÚHttpSessionÖдæ·ÅµÄÊý¾Ý¶ÔÏñÔ½´ó£¬ÄÇϵͳµÄÐÔÄܾÍϽµµÃÔ½¿ì¡£
¡¡¡¡? µ±Äã²»ÐèÒªHttpSessionʱ£¬¾¡¿ìµØÊÍ·ÅËü£ºµ±Äã²»ÔÙÐèÒªsessionʱ£¬Äã¿ÉÒÔͨ¹ýµ÷ÓÃHttpSession.invalidate()·½·¨À´ÊÍ·ÅËü¡£
¡¡¡¡? ¾¡Á¿½«sessionµÄ³¬Ê±Ê±¼äÉèµÃ¶ÌÒ»µã£ºÔÚJSPÓ¦Ó÷þÎñÆ÷ÖУ¬ÓÐÒ»¸öȱʡµÄsessionµÄ³¬Ê±Ê±¼ä¡£µ±¿Í»§ÔÚÕâ¸öʱ¼äÖ®ºóûÓнøÐÐÈκβÙ×÷µÄ»°£¬ÏµÍ³»á½«Ïà¹ØµÄsession×Ô¶¯´ÓÄÚ´æÖÐÊÍ·Å¡£³¬Ê±Ê±¼äÉèµÃÔ½´ó£¬ÏµÍ³µÄÐÔÄܾͻáÔ½µÍ£¬Òò´Ë×îºÃµÄ·½·¨¾ÍÊǾ¡Á¿Ê¹µÃËüµÄÖµ±£³ÖÔÚÒ»¸ö½ÏµÍµÄˮƽ¡£
¡¡·½·¨ 4: ½«Ò³ÃæÊä³ö½øÐÐѹËõ
¡¡Ñ¹ËõÊǽâ¾öÊý¾ÝÈßÓàµÄÒ»¸öºÃµÄ·½·¨£¬ÌرðÊÇÔÚÍøÂç´ø¿í²»¹»·¢´ïµÄ½ñÌì¡£ÓеÄä¯ÀÀÆ÷Ö§³Ögzip(GNU zip)½øÐÐÀ´¶ÔHTMLÎļþ½øÐÐѹËõ£¬ÕâÖÖ·½·¨¿ÉÒÔÏ·¾çÐԵؼõÉÙHTMLÎļþµÄÏÂÔØʱ¼ä¡£Òò´Ë£¬Èç¹ûÄ㽫servlet»òJSPÒ³ÃæÉú³ÉµÄHTMLÒ³Ãæ½øÐÐѹËõµÄ»°£¬ÄÇÓû§¾Í»á¾õµÃÒ³Ãæä¯ÀÀËٶȻá·Ç³£¿ì¡£µ«²»ÐÒµÄÊÇ£¬²»ÊÇËùÓеÄä¯ÀÀÆ÷¶¼Ö§³ÖgzipѹËõ£¬µ«Äã¿ÉÒÔͨ¹ýÔÚÄãµÄ³ÌÐòÖмì²é¿Í»§µÄä¯ÀÀÆ÷ÊÇ·ñÖ§³ÖËü¡£ÏÂÃæ¾ÍÊǹØÓÚÕâÖÖ·½·¨ÊµÏÖµÄÒ»¸ö´úÂëƬ¶Î£º
[code]public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
¡¡OutputStream out = null
¡¡String encoding = request.getHeader("Accept-Encoding");
¡¡if (encoding != null && encoding.indexOf("gzip") != -1)
¡¡{
¡¡¡¡request.setHeader("Content-Encoding" , "gzip");
¡¡¡¡out = new GZIPOutputStream(request.getOutputStream());
¡¡}
¡¡else if (encoding != null && encoding.indexOf("compress") != -1)
¡¡{
¡¡¡¡request.setHeader("Content-Encoding" , "compress");
¡¡¡¡out = new ZIPOutputStream(request.getOutputStream());
¡¡}
¡¡else
¡¡{
¡¡¡¡out = request.getOutputStream();
¡¡}
¡¡...
¡¡...
}[/code]
¡¡·½·¨ 5: ʹÓÃÏ̳߳Ø
¡¡Ó¦Ó÷þÎñÆ÷ȱʡµØΪÿ¸ö²»Í¬µÄ¿Í»§¶ËÇëÇó´´½¨Ò»¸öÏ߳̽øÐд¦Àí£¬²¢ÎªËüÃÇ·ÖÅÉservice()·½·¨£¬µ±service()·½·¨µ÷ÓÃÍê³Éºó£¬ÓëÖ®ÏàÓ¦µÄÏß³ÌÒ²ËæÖ®³·Ïû¡£ÓÉÓÚ´´½¨ºÍ³·ÏûÏ̻߳áºÄ·ÑÒ»¶¨µÄϵͳ×ÊÔ´£¬ÕâÖÖȱʡģʽ½µµÍÁËϵͳµÄÐÔÄÜ¡£µ«ËùÐÒµÄÊÇÎÒÃÇ¿ÉÒÔͨ¹ý´´½¨Ò»¸öÏ̳߳ØÀ´¸Ä±äÕâÖÖ×´¿ö¡£ÁíÍ⣬ÎÒÃÇ»¹ÒªÎªÕâ¸öÏ̳߳ØÉèÖÃÒ»¸ö×îСÏß³ÌÊýºÍÒ»¸ö×î´óÏß³ÌÊý¡£ÔÚÓ¦Ó÷þÎñÆ÷Æô¶¯Ê±£¬Ëü»á´´½¨ÊýÁ¿µÈÓÚ×îСÏß³ÌÊýµÄÒ»¸öÏ̳߳أ¬µ±¿Í»§ÓÐÇëÇóʱ£¬ÏàÓ¦µØ´Ó³Ø´ÓÈ¡³öÒ»¸öÏß³ÌÀ´½øÐд¦Àí£¬µ±´¦ÀíÍê³Éºó£¬ÔÙ½«Ïß³ÌÖØзÅÈëµ½³ØÖС£Èç¹û³ØÖеÄÏ̲߳»¹»µØ»°£¬ÏµÍ³»á×Ô¶¯µØÔö¼Ó³ØÖÐÏ̵߳ÄÊýÁ¿£¬µ«×ÜÁ¿²»Äܳ¬¹ý×î´óÏß³ÌÊý¡£Í¨¹ýʹÓÃÏ̳߳أ¬µ±¿Í»§¶ËÇëÇó¼±¾çÔö¼Óʱ£¬ÏµÍ³µÄ¸ºÔؾͻá³ÊÏÖµÄƽ»¬µÄÉÏÉýÇúÏߣ¬´Ó¶øÌá¸ßµÄϵͳµÄ¿ÉÉìËõÐÔ¡£
¡¡·½·¨ 6: Ñ¡ÔñÕýÈ·µÄÒ³Ãæ°üº¬»úÖÆ
¡¡ÔÚJSPÖÐÓÐÁ½ÖÖ·½·¨¿ÉÒÔÓÃÀ´°üº¬ÁíÒ»¸öÒ³Ã棺1¡¢Ê¹ÓÃincludeָʾ·û(£¼%@ includee file=¡±test.jsp¡± %£¾)¡£2¡¢Ê¹ÓÃjspָʾ·û(£¼jsp:includee page=¡±test.jsp¡± flush=¡±true¡±/£¾)¡£ÔÚʵ¼ÊÖÐÎÒ·¢ÏÖ£¬Èç¹ûʹÓõÚÒ»ÖÖ·½·¨µÄ»°£¬¿ÉÒÔʹµÃϵͳÐÔÄܸü¸ß¡£
¡¡·½·¨ 7:ÕýÈ·µØÈ·¶¨javabeanµÄÉúÃüÖÜÆÚ
¡¡JSPµÄÒ»¸öÇ¿´óµÄµØ·½¾ÍÊǶÔjavabeanµÄÖ§³Ö¡£Í¨¹ýÔÚJSPÒ³ÃæÖÐʹÓã¼jsp:useBean£¾±êÇ©£¬¿ÉÒÔ½«javabeanÖ±½Ó²åÈëµ½Ò»¸öJSPÒ³ÃæÖС£ËüµÄʹÓ÷½·¨ÈçÏ£º
£¼jsp:useBean id="name" scope="page|request|session|application" class=
"package.className" type="typeName"£¾
£¼/jsp:useBean£¾
¡¡ÆäÖÐscopeÊôÐÔÖ¸³öÁËÕâ¸öbeanµÄÉúÃüÖÜÆÚ¡£È±Ê¡µÄÉúÃüÖÜÆÚΪpage¡£Èç¹ûÄãûÓÐÕýÈ·µØÑ¡ÔñbeanµÄÉúÃüÖÜÆڵĻ°£¬Ëü½«Ó°ÏìϵͳµÄÐÔÄÜ¡£
¡¡¾ÙÀýÀ´Ëµ£¬Èç¹ûÄãÖ»ÏëÔÚÒ»´ÎÇëÇóÖÐʹÓÃij¸öbean£¬µ«ÄãÈ´½«Õâ¸öbeanµÄÉúÃüÖÜÆÚÉèÖóÉÁËsession£¬Äǵ±Õâ´ÎÇëÇó½áÊøºó£¬Õâ¸öbean½«ÈÔÈ»±£ÁôÔÚÄÚ´æÖУ¬³ý·Çsession³¬Ê±»òÓû§¹Ø±Õä¯ÀÀÆ÷¡£ÕâÑù»áºÄ·ÑÒ»¶¨µÄÄڴ棬²¢ÎÞνµÄÔö¼ÓÁËJVMÀ¬»øÊÕ¼¯Æ÷µÄ¹¤×÷Á¿¡£Òò´ËΪbeanÉèÖÃÕýÈ·µÄÉúÃüÖÜÆÚ£¬²¢ÔÚbeanµÄʹÃü½áÊøºó¾¡¿ìµØÇåÀíËüÃÇ£¬»áʹÓÃϵͳÐÔÄÜÓÐÒ»¸öÌá¸ß¡£
¡¡ÆäËüһЩÓÐÓõķ½·¨
¡¡¡¡? ÔÚ×Ö·û´®Á¬½Ó²Ù×÷Öо¡Á¿²»Ê¹Óá°£«¡±²Ù×÷·û£ºÔÚjava±à³ÌÖУ¬ÎÒÃdz£³£Ê¹Óá°£«¡±²Ù×÷·ûÀ´½«¼¸¸ö×Ö·û´®Á¬½ÓÆðÀ´£¬µ«Äã»òÐí´ÓÀ´Ã»ÓÐÏëµ½¹ýËü¾ÓÈ»»á¶ÔϵͳÐÔÄÜÔì³ÉÓ°Ïì°É£¿ÓÉÓÚ×Ö·û´®Êdz£Á¿£¬Òò´ËJVM»á²úÉúһЩÁÙʱµÄ¶ÔÏñ¡£ÄãʹÓõġ°£«¡±Ô½¶à£¬Éú³ÉµÄÁÙʱ¶ÔÏñ¾ÍÔ½¶à£¬ÕâÑùÒ²»á¸øϵͳÐÔÄÜ´øÀ´Ò»Ð©Ó°Ïì¡£½â¾öµÄ·½·¨ÊÇÓÃStringBuffer¶ÔÏñÀ´´úÌæ¡°£«¡±²Ù×÷·û¡£
¡¡¡¡? ±ÜÃâʹÓÃSystem.out.println()·½·¨£ºÓÉÓÚSystem.out.println()ÊÇÒ»ÖÖͬ²½µ÷Ó㬼´ÔÚµ÷ÓÃËüʱ£¬´ÅÅÌI/O²Ù×÷±ØÐëµÈ´ýËüµÄÍê³É£¬Òò´ËÎÒÃÇÒª¾¡Á¿±ÜÃâ¶ÔËüµÄµ÷Óᣵ«ÎÒÃÇÔÚµ÷ÊÔ³ÌÐòʱËüÓÖÊÇÒ»¸ö±Ø²»¿ÉÉٵķ½±ã¹¤¾ß£¬ÎªÁ˽â¾öÕâ¸öì¶Ü£¬ÎÒ½¨ÒéÄã×îºÃʹÓÃLog4j¹¤¾ß(http://Jakarta.apache.org )£¬Ëü¼È¿ÉÒÔ·½±ãµ÷ÊÔ£¬¶ø²»»á²úÉúSystem.out.println()ÕâÑùµÄ·½·¨¡£
¡¡¡¡? ServletOutputStream Óë PrintWriterµÄȨºâ:ʹÓÃPrintWriter¿ÉÄÜ»á´øÀ´Ò»Ð©Ð¡µÄ¿ªÏú£¬ÒòΪËü½«ËùÓеÄÔʼÊä³ö¶¼×ª»»Îª×Ö·ûÁ÷À´Êä³ö£¬Òò´ËÈç¹ûʹÓÃËüÀ´×÷ΪҳÃæÊä³öµÄ»°£¬ÏµÍ³Òª¸ºµ£Ò»¸öת»»¹ý³Ì¡£¶øʹÓÃServletOutputStream×÷ΪҳÃæÊä³öµÄ»°¾Í²»´æÔÚÒ»¸öÎÊÌ⣬µ«ËüÊÇÒÔ¶þ½øÖƽøÐÐÊä³öµÄ¡£Òò´ËÔÚʵ¼ÊÓ¦ÓÃÖÐҪȨºâÁ½ÕßµÄÀû±×¡£
¡¡×ܽá
¡¡±¾ÎĵÄÄ¿µÄÊÇͨ¹ý¶ÔservletºÍJSPµÄһЩµ÷Óż¼ÊõÀ´¼«´óµØÌá¸ßÄãµÄÓ¦ÓóÌÐòµÄÐÔÄÜ£¬²¢Òò´ËÌáÉýÕû¸öJ2EEÓ¦ÓõÄÐÔÄÜ¡£Í¨¹ýÕâЩµ÷Óż¼Êõ£¬Äã¿ÉÒÔ·¢ÏÖÆäʵ²¢²»ÊÇijÖÖ¼¼Êõƽ̨£¨±ÈÈçJ2EEºÍ.NETÖ®Õù£©¾ö¶¨ÁËÄãµÄÓ¦ÓóÌÐòµÄÐÔÄÜ£¬ÖØÒªÊÇÄãÒª¶ÔÕâÖÖƽ̨ÓÐÒ»¸ö½ÏΪÉîÈëµÄÁ˽⣬ÕâÑùÄã²ÅÄÜ´Ó¸ù±¾É϶Ô×Ô¼ºµÄÓ¦ÓóÌÐò×öÒ»¸öÓÅ»¯£¡