⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 day03.txt

📁 servlet上课内容
💻 TXT
字号:
Servlet_day03   langna  2007-9-25   星期二
回顾: 
       1, 如何编写线程安全的servlet? 唯一的,成员变量,静态变量, 写的时候加锁,读的时候不需要;
       2, 如何读取请求中的参数? 
 作业:
       1, 计数器: 访问此servlet的次数:
       int current=0;
        synchronized(this)
        {
          count++;
	  current=count;
        }
        out.println(current);
        
        指定字符集:告诉浏览器我这里有特殊字符;
        response.setContentType("text/html;charset=gbk"); 
        
       2,  getParameterMap:  key -- String 
                                        value-- String[] 
       
 一,  ServletInputStream / ServletOutputStream
      
      getReader:调了这个系统就不会再给你封装了,getParameter就得不到了;
      getParameter:调了这个系统把参数给你封装好了, 就不能调getReader了;
     
      xml文件:  version="2.4" ; 2.4 之前用的是dtd约束的;  2.4之后用的是Schema;
     
      虚拟路径也叫servlet路径;
     
     getContextPath: 应用路径
     将serv-app  改为 servlet-app ;
     1)一个 servlet 可以部署在任何应用中; 因为虚拟路径是从应用之后开始写的;
     2)对于form表单中的action的路径有影响;因为这里的路径是从应用路径开始写的;
         解决的方法是在:action中改成动态的路径;将静态页面变成servlet;
         将整个页面写到doGet()请求中;将路径写成动态的; 
     3)将action中的应用路径去掉;改成相对路径; 
        相对路径:相对的是当前请求; serv-app/request/form.html;  虚拟路径是: /request/parameter
                                                   action="parameter" ;
        
    ServletPath: 虚拟路径
    *.do 通配模式;一个servlet服务多个请求
    MVC模式: 多个servlet之间通信;
    
二, 分布式:
    数据库服务器; C/S; 
    B/S:  web browser -- web server -- DB
    java中支持分布式的技术;
        数据库;jdbc;
        RMI; 远程方法调用;
        兼容c++ ; corba语言; 
        IDL; 接口访问语言;
    
    JDBC的编程步骤: (安装驱动)
    1, 加载驱动;
    2, 建立连接;
    3,创建statement;
    4,执行sql语句;
    5,处理结果集;
    6,释放资源;    
   
   将数据库的去定ojdbc14.jar 放到 common/lib 包下; 这样会在tomcat启动的时候会找到
   这个驱动啊!
   
   init(); 配置init 参数; 不需要同步;单线程的;
   service()中只读也不需要同步;
   
   servlet 从数据库中读数据封装成html发送到客户端;
   
   create: 创建记录,增加
   read: 读记录,
   update:更新记录
   delete:删除记录
   
   例子:
   
   1,建表: (依赖于数据库的)
              create table  ln_user(
                    id  number(4) primary key,
                    name varchar2(20)  not null,
                    birthday  date,
                    gender    varchar2(6), 
                    phone      number(20)
               );
               保存为credbs.sql ; 一般都用sqlplus建表,除非用临时表才在程序中建;
   2,建一个序列:
               create sequence  ln_seq; 
     insert  into  ln_user  values(ln_seq.nextval,'langna',sysdate-24,'femail',1376);
     to_date('2007-9-3','yyyy-mm-dd')  
   
   3, 数据库的异常在servlet方法中捕获并向客户端抛出servlet异常;
       在servlet中写jdbc代码,访问数据库;
       
       做静态原型页面;再变成动态的;
       IO异常也应该往外抛, 不是面向最终用户的;是被调的;
       
   4, 配初始化参数:
        <servlet>
            <servlet-name>UserServlet</servlet-name>   
            <servlet-class>com.tarena.UserServlet</servlet-class>
            
            <init-param>
                <param-name>jdbcurl</param-name>
                <param-value>jdbc:oracle:thin:@192.168.0.201:1521:tarena</param-value>
            </init-param>
            <init-param>
                <param-name>driver</param-name>
                <param-value>oracle.jdbc.driver.OracleDriver</param-value>
            </init-param>
            <init-param>
                <param-name>username</param-name>
                <param-value>xjh0704</param-value>
            </init-param>
            <init-param>
                <param-name>password</param-name>
                <param-value>xjh0704</param-value>
            </init-param>
        </servlet>
       
  5,  将不同的技术分层:  jdbc和servlet分层 ; UserService
  6,  jdbc 连接数据库, 读配置文件dbconfig.properties; 放到classes文件夹中;(相对于类路径)
        
        driverClassName=oracle.jdbc.driver.OracleDriver
        dburl=jdbc:oracle:thin:@192.168.0.201:1521:tarena
        username=openlab
        password=open123
        
    用类装载器来定位资源:  
    InputStream in = UserService.class.getClassLoader()
                                                .getResourceAsStream("config/dbconfig.properties"); //classpath--classes下
    Properties  prop=new  Properties();
    prop.load(in);
    in.close();
    prop.getProperties("dburl");
    
    对eclipse而言,项目的根是类路径; 而不是当前路径; 
    在命令行下,将文件的路径追加到类路径下; 也可以找到相关的资源;
    
    将jdbc相同的代码抽取出来,做一个工具包; JdbcUtil { }
    将读配置文件放到静态代码块中;只读一次就行;在静态代码块中抛ExceptionInInitializerError异常;
     private static Properties config = new Properties();
     static{
           try{
                    InputStream in = ConnectionFactory.class.getClassLoader()
                                                           .getResourceAsStream("config/dbconfig.properties");
                    config.load(in);
                    in.close();
                }catch(IOException  e){
                        e.printStackTrace();
                        throw new ExceptionInInitializerError();
                }
        }
三, MVC

  1,解析请求:控制作用 C   UserActionServlet :  将showUser()去掉
  2,处理请求:业务  M       UserService / User / JDBCUtil 
  3,返回客户端结果:视图  V  UserListViewServlet : 将showUser的代码放到这里的doGet方法里;
                                           (JSP)
   一个servlet怎么调另外的servlet;  上下文=应用;
   ServletContext: 全局对象,在同一个应用中只有一个,任何一个servlet都可以访问它;
   
   在UserActionServlet转向UserListViewServlet: 
  {
       Collection users = userServices.findUsers();
       request.setAttribute("users", users);//将要传的数据放到请求中;
       ServletContext application = getServletContext();
       RequestDispatcher dispatcher = application
                                        .getRequestDispatcher("/user/list/view");
                                        //传的是目标servlet的虚拟路径(与web.xml中的一致);
       dispatcher.forward(request, response);
   }
   
   UserListViewServlet
   {
        Collection students = (Collection)request.getAttribute("users");
        
   }
   
   M: jdbc , javabeans , EJB
   V:  servlet/jsp
   C:  servlet
   
   起到了一个松耦合的作用; 

关于配置: 
 1,  oracle用的是8080,把端口占用了;   
       改tomcat的端口号: 
       apache-tomcat-5.5.20\conf\server.xml\Connector  8080-->8088/80(不需要加端口)
 2,  web.xml 加一个空格; 修改后
     context.xml  <Context  reloadable="true"> //会自动监视classes下的文件; 
 3, 写一个脚本: 
     主目录下,建一个bin 自动加到path下 ;   echo $path 
     vi  .bash_prifile  path=$HOME/bin:  默认有这个路径;即这个目录下的可执行命令可以在任何目录下执行;
     
     工程 --  abc , src-- 源文件: HelloworldServlet.java, classes -- 类路径
     
     在bin/servletc.sh写上: -cp=-classpath 
     javac -d  $HOME/abc/classes  -cp  $CATALINA_HOME/common/lib/servlet-api.jar  $1(脚本运行时的第一个参数)
    
     在src目录下直接编译就行:
     servletc.sh   HelloworldServlet.java
     
     将tomcat 应用的类编译时的所有内容写到sh文件中,生成的字节码文件放到想放的地方 : 
      javac -d  $CATALINA_HOME/webapps/abc/WEB-INF/classes   
                             -cp  $CATALINA_HOME/common/lib/*.jar    $1 
       或者:
        javac -d  $1   -cp  $CATALINA_HOME/common/lib/*.jar   $2
       $1  :  目标路径
       $2 :   源文件
  4,  在eclipse中配置数据库和服务器:
      
     1)  eclipse-jee-europa-win32; 
       databases--> SQL-JDBCConnection--> name: oracle20@oracle ---> 
       选择一个驱动---> oracle9(oracle-thin)---> driver-name: oracle14-->
       jar包-- add jar-- ojdbc14.jar ---> 将属性写上
     2)  
       建一个 web 工程, 建的时候有一个runtime 配置,将tomcat安装目录导入即可;
       部署描述符: 
       dynamic web moudle -- 2.4 
       java-- 5.0
       
       content-root : 应用名
       src: 直接写类或建一个servlet; 可以直接配置servlet的初始化参数和url
       

⌨️ 快捷键说明

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