亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

J2EE學習經驗:JSP學習總結

2019-11-18 16:17:20
字體:
來源:轉載
供稿:網友
前言
熟悉java語法很久后,遲遲才開始學習jsp。而學習JSP時,卻只學了基本的用法就去學Struts和Hibernate,以致對JSP掌握得很不夠。后來發現所學習的Struts框架實際上是“包裝”了的JSP。所以,我在學習框架的時候也回頭看看JSP。
以后應該不會再去專門學習JSP了?,F在把一些JSP的相關知識總結下,記錄下來,以防來日忘了。
 
說明:以下所描述的環境是jdk1.5、tomcat5.5、 jsp2.0、 servlet2.4、JSTL1.1.2
一、基本配置
基本的重要的配置在web.xml 文件中。
 
1、Jsp屬性組
 
Word-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<jsp-PRoperty-group>
       <url-pattern>/pages/*</url-pattern>
    <el-ignore>true</el-ignore>
    <page-encoding>UTF-8</page-encoding>
    <include-prelude>/include/header.jspf</include-prelude>
    <include-coda>/include/copyright.jspf</include-coda>
</jsp-property-group>
這個設置可以指定頁面編碼,頁頭頁腳等等。
設置 <page-encoding>UTF-8</page-encoding> 的好處是不用在每個頁面像這樣指定編碼:<%@page contentType="Html/text;charset=UTF-8" %>
而設置 <include-prelude>/include/header.jspf</include-prelude> 使得每個頁面都在頭部包含header.jspf文件(通常把對標簽的包含放在這里)。
 
2、數據庫資源的引用
J2EE學習經驗:JSP學習總結(圖一)<resource-ref>
J2EE學習經驗:JSP學習總結(圖一)       <description>CourseDesign JDNI datasource</description>
J2EE學習經驗:JSP學習總結(圖一)       <res-ref-name>jdbc/test</res-ref-name>
J2EE學習經驗:JSP學習總結(圖一)       <res-type>javax.sql.DataSource</res-type>
J2EE學習經驗:JSP學習總結(圖一)       <res-auth>Container</res-auth>
J2EE學習經驗:JSP學習總結(圖一)</resource-ref>
前提是要在TOMCAT的中配置
<Context path="/Course" docBase="Course" debug="0" crosscontext="true" reloadable="true">
       <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="root" passWord="123456" 
driverClassName="com.MySQL.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/databaseName?useUnicode=true&amp;characterEncoding=UTF-8" />
</Context>
在程序中可以這樣獲取連接
J2EE學習經驗:JSP學習總結(圖一)public static Connection getConnection()
J2EE學習經驗:JSP學習總結(圖二)J2EE學習經驗:JSP學習總結(圖三)       ...{
J2EE學習經驗:JSP學習總結(圖四)Connection conn=null;
J2EE學習經驗:JSP學習總結(圖四)              try   
J2EE學習經驗:JSP學習總結(圖五)J2EE學習經驗:JSP學習總結(圖六)              ...{            
J2EE學習經驗:JSP學習總結(圖四)                     Context initContext = new InitialContext();
J2EE學習經驗:JSP學習總結(圖四)                     Context envContext = (Context)initContext.lookup("java:/comp/env");
J2EE學習經驗:JSP學習總結(圖四)                     DataSource ds = (DataSource)envContext.lookup("jdbc/test");
J2EE學習經驗:JSP學習總結(圖四)                     conn = ds.getConnection();
J2EE學習經驗:JSP學習總結(圖五)J2EE學習經驗:JSP學習總結(圖六)              }catch(Exception e)...{            }
J2EE學習經驗:JSP學習總結(圖四)              return conn;
J2EE學習經驗:JSP學習總結(圖七)       }
3、過濾器
一般來說,字符編碼的處理,我們會寫一個過濾器。這個過濾器的JAVA類在TOMCAT的例子中有提供,可以按需來更改再拿來用。只要在配置文件中設置:
 
<filter-name>setCharacterEncoding</filter-name>
        <filter-class>powerwind.filter.SetCharacterEncodingFilter</filter-class>
        <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
        </init-param>
</filter>
 
<filter-mapping>
        <filter-name>setCharacterEncoding</filter-name>
        <url-pattern>/pages/*</url-pattern>
</filter-mapping>
 
4、標簽的URI
JSTL是個東西,里面提供了很好用的標簽(Tag),但也不一定滿足我們的要求,就自己寫標簽了。把 *.tld 文件直接放到WEB-INF下,在自己定義的tld文件中加上<uri>元素,如:<uri>http://powerwind/course</uri> 。
 
5、日志
只用過log4j這個日志包。首先是配置文件 log4j.properties (比較完整的配置,應根據情況選擇):
J2EE學習經驗:JSP學習總結(圖一)log4j.rootLogger = DEBUG,INFO, A1, A2,A3
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A1 = org.apache.log4j.ConsoleAppender
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A1.layout = org.apache.log4j.PatternLayout
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A1.layout.ConversionPattern = %4p [%t] (%F:%L) - %m%n
J2EE學習經驗:JSP學習總結(圖一) 
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A2 = org.apache.log4j.RollingFileAppender
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A2.File =../../log/test.log
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A2.MaxFileSize = 1KB
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A2.MaxBackupIndex = 3
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A2.layout = org.apache.log4j.PatternLayout
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A2.layout.ConversionPattern = %d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
J2EE學習經驗:JSP學習總結(圖一) 
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender 
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A3.URL= jdbc:mysql://localhost:3306/log4jTest
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A3.driver= com.mysql.jdbc.Driver
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A3.user= root
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A3.password= 123456
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A3.layout = org.apache.log4j.PatternLayout
J2EE學習經驗:JSP學習總結(圖一)log4j.appender.A3.layout.ConversionPattern = INSERT INTO log4j (createDate, thread, level, class, message) values('%d', '%t', '%-5p', '%c', '%m')
QQread.com 推出Windows2003教程 win2003安裝介紹 win2003網絡優化 win2003使用技巧 win2003系統故障 服務器配置 專家答疑


更多的請看:http://www.qqread.com/windows/2003/index.html

接著寫個Servlet來加載log4j:

package powerwind.servlet;
 
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
import javax.servlet.*;
import javax.servlet.http.*;
 
public class Log4jInit extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
        super.init(config);
        String prefix = getServletContext().getRealPath("/");
        String file = getInitParameter("log4j"); 
        System.out.println("init log4j...");
        if (file != null){
          PropertyConfigurator.configure(prefix+file);
        }else
        {
                 PropertyConfigurator.configure(prefix+"log4j.properties");
        }
}
}

然后同時要在web.xml下配置:

<servlet>
         <servlet-name>log4jInit</servlet-name>
         <servlet-class>powerwind.servlet.Log4jInit</servlet-class>
              <init-param>
                <param-name>log4j</param-name>
                <param-value>WEB-INF/classes/log4j.properties</param-value>
              </init-param>
         <load-on-startup>1</load-on-startup>
</servlet>


6、國際化

J2EE學習經驗:JSP學習總結(圖一)#test_zh_CN.properties
J2EE學習經驗:JSP學習總結(圖一)#login page
J2EE學習經驗:JSP學習總結(圖一)login.title=登錄頁面
小型的應用中,我們并不常需要國際化。但是,如果網站要中文版和英文版的話,這個就不錯啦。使用時很簡單,把資源test_zh_CN.properties文件放到classes目錄下,然后用JSTL的fmt標簽調用。
<fmt:setLocale value="zh_CN"  scope=”session” />
<fmt:setBundle basename="test" scope=”session” var=”hehe” />
<fmt:message key="login.title" bundle=”${hehe}” scope=”session” />

其中var和scope屬性不是必需的。三者結合,就可以實現國際化了。

二、極限與安全
資源放在WEB-INF下是安全的,因為這個目錄對于客戶端是不存在的。權限控制并不是僅僅這樣就可以了。如果只是簡單地判斷用戶是否登錄,可用一個過濾器檢查Session對象即可。若需要級別控制的話,就在Session中保存級別信息,然后加以判斷。
一般把權限的控制做成一個標簽(tag)。如:
public int doEndTag() throws JspException {
              HttpSession session = pageContext.getSession();
              if ((session != null) && (session.getAttribute("user") != null)) {
                     String t = ((UserBean) session.getAttribute("user")).getType();
                     if (t == null  role == null) {
                            invalid();
                            return (SKIP_PAGE);
                     }
                     String[] roles = role.split(delimiter);
                     for (int i = 0; i < roles.length; i++) {
                            if (roles[i].equalsIgnoreCase(role))
                                   return (EVAL_PAGE);
                     }
              } else {
                     invalid();
                     return (SKIP_PAGE);
              }
              return (EVAL_PAGE);
       }


三、上傳與下載

上傳的話,一般使用已有的組件,如commons-fileupload 或者歐萊禮的cos (可能會遇到中文編碼的問題)。而下載,比較簡單,就自己寫了個Servlet。
public void handleRequest(HttpServletRequest request,
              HttpServletResponse response) throws IOException, ServletException {
              String name = request.getParameter("name");
              String type = request.getParameter("type");
              String dir = request.getParameter("dir");
              if (name == null  name.length() < 2  dir == null  dir.length() < 1  type == null  type.length() < 1) {
                     throw new ServletException("Sorry,error occured");
              }
              char ch = dir.charAt(dir.length() - 1);
              if (ch != '/'  ch != '/')
                     dir = dir + "/";
              ServletOutputStream os = null;
              BufferedInputStream bis = null;
              try {
                     File file = new File(dir + name);
                     if (!file.exists()  file.length() >= Integer.MAX_VALUE) {
                            logger.error("Invalid file or file to large,file: " + name);
                            throw new ServletException(
                                          "Invalid file or file to large,file: " + name);
                     }
                     response.setContentType("application/" + type);
                     response.addHeader("Content-Disposition", "attachment; filename="+ name);
                     response.setContentLength((int) file.length());
                     os = response.getOutputStream();
                     bis = new BufferedInputStream(new FileInputStream(file));
                     int size = -1;
                     while ((size = bis.read()) != -1)
                            os.write(size);
              } catch (IOException ioe) {
                     throw new ServletException(ioe.getMessage());
              } finally {
                     if (os != null)
                            os.close();
                     if (bis != null)
                            bis.close();
              }
       }


        以上只是個示例程序,靈活與方便的做法應該是在Servlet初始化參數(<init-param>)設置下載文件所在目錄,當然也可以在頁面中設置參數。甚至可以做成一個下載標簽,方便使用。

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人福利夜色影视| 91香蕉亚洲精品| 亚洲国产91精品在线观看| 亚洲欧美国产一本综合首页| 欧美黑人视频一区| 亚洲xxxx做受欧美| 免费av一区二区| 精品久久久久久久久久久久| 国产精品激情av电影在线观看| 日韩欧美在线观看视频| 国产精品亚洲欧美导航| 欧美午夜视频在线观看| 日韩精品免费一线在线观看| 欧洲一区二区视频| 国产精品免费视频久久久| 欧美性色xo影院| 亚洲女人天堂视频| 日韩中文综合网| 欧美色视频日本版| 精品视频在线播放色网色视频| 亚洲国产又黄又爽女人高潮的| 亚洲www永久成人夜色| 欧美性感美女h网站在线观看免费| 精品国产成人在线| 欧美日韩成人在线观看| 国产中文字幕日韩| 中文字幕日韩免费视频| 一区二区三区久久精品| 91国产高清在线| 亚洲电影中文字幕| 亚洲三级免费看| 国产精品久久久久久久久久东京| 成人激情视频小说免费下载| 国产精品极品尤物在线观看| 岛国视频午夜一区免费在线观看| 欧美激情精品久久久久久变态| 亚洲电影免费观看高清完整版在线观看| 日韩综合视频在线观看| 亚洲国产精品久久久| 欧美激情乱人伦| 日韩av123| 2021久久精品国产99国产精品| 国产日韩欧美在线观看| 午夜精品一区二区三区在线视| 国产精品久久久999| 久久久久久午夜| 久久久伊人欧美| 91精品久久久久久综合乱菊| 精品视频久久久久久久| 欧美视频在线观看 亚洲欧| 亚洲欧洲成视频免费观看| 亚洲成色999久久网站| 日韩电影中文 亚洲精品乱码| 亚洲女人被黑人巨大进入| 91久久精品国产91久久| 中文字幕在线观看日韩| 亚洲电影免费观看高清完整版| 日韩av片免费在线观看| 国产成人免费91av在线| 久久免费视频在线观看| 亚洲人成电影网站色…| 黑人精品xxx一区| 最近2019年手机中文字幕| 久久久女女女女999久久| 久久色精品视频| 日韩电影大片中文字幕| 国语自产精品视频在线看抢先版图片| 亚洲欧美制服丝袜| 亚洲国产精品va在线| 亚洲第一二三四五区| 亚洲一级免费视频| 欧美在线视频在线播放完整版免费观看| 日韩电影在线观看中文字幕| 久久亚洲私人国产精品va| 欧美中文字幕第一页| 欧美激情视频播放| 久久精品夜夜夜夜夜久久| 久久99视频免费| 日韩中文视频免费在线观看| 国产精品91久久| 国产美女扒开尿口久久久| 成人激情黄色网| 日韩av在线不卡| 欧美性色视频在线| 亚洲永久免费观看| 日韩免费av片在线观看| 亚洲天堂免费在线| 欧美日韩性视频在线| 性色av香蕉一区二区| 91精品国产综合久久久久久蜜臀| 日日骚av一区| 精品国产鲁一鲁一区二区张丽| www亚洲精品| 日韩精品极品视频免费观看| 国产亚洲激情视频在线| 92国产精品久久久久首页| 日韩成人在线视频网站| 国产一区二区三区在线免费观看| 久久久久久久97| 日韩视频中文字幕| 一夜七次郎国产精品亚洲| 欧美国产精品人人做人人爱| 亚洲va国产va天堂va久久| 久久亚洲影音av资源网| 日韩欧美中文在线| 伊人久久男人天堂| 欧美极品少妇xxxxⅹ裸体艺术| 久久久免费高清电视剧观看| 国模精品视频一区二区三区| 国产成人av在线| 欧美另类高清videos| 成人字幕网zmw| 2019中文字幕全在线观看| 国产欧美精品久久久| 亲爱的老师9免费观看全集电视剧| 国产精品a久久久久久| 国模叶桐国产精品一区| 欧美一区二区三区四区在线| 国产视频久久久久| 美女扒开尿口让男人操亚洲视频网站| 成人国产在线激情| 夜夜嗨av色综合久久久综合网| 日韩中文字在线| 精品国产一区二区三区四区在线观看| 欧美激情手机在线视频| 国产精品wwww| 亚洲free性xxxx护士白浆| 欧美日韩不卡合集视频| 欧美电影免费观看高清| 中文字幕亚洲无线码在线一区| 日韩av在线直播| 精品美女永久免费视频| 国产精品视频xxx| 国产欧美最新羞羞视频在线观看| 精品magnet| 97av在线影院| 国产亚洲精品久久久久久牛牛| 日韩成人在线免费观看| 国产男女猛烈无遮挡91| 久久精品免费播放| 亚洲成人999| 亚洲精品国产精品自产a区红杏吧| 亚洲福利小视频| 韩国福利视频一区| 少妇av一区二区三区| 91精品中国老女人| 懂色av中文一区二区三区天美| 日韩在线观看免费全| 久久精品小视频| 欧美疯狂xxxx大交乱88av| 日本在线观看天堂男亚洲| 在线日韩av观看| 国产一区二区三区四区福利| 亚洲国产精品一区二区三区| 国产精品1区2区在线观看| 大荫蒂欧美视频另类xxxx| 亚洲欧美日韩另类| 在线亚洲国产精品网| 欧美日韩一二三四五区| 亚洲欧美日本精品| 亚洲午夜精品久久久久久性色| 日韩欧美国产一区二区| 青青草一区二区| 茄子视频成人在线|