免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1468 | 回复: 0
打印 上一主题 下一主题

tomcat web 开发(上) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-05 21:31 |只看该作者 |倒序浏览

lesson 3. tomcat与jsp
1.jdk的设置
只要path=...bin,classpth=.;..jdk/lib/servlet-api.jar,这两个不能少,至于lib/dt.jar,..tools.jar
不需要了.另外,设置系统变量java_home也是不需要的.

2.tomcat设置
设置系统变量:tomcat_home也不需要了.
3.tomcat的两种安装方式
: binary,好处:安装过程中指定用户角色,用记名,密码,而且使用比较稳定.
:解压的方式:必须手动设置用户名,角色.

4.admin包的安装:
:tomcat从5.5开始不再有admin和manager两个应用了. (其实manager还有的)
:手动安装admin
  :下载(5.5.20版本下的)Administration Web Application:
  :将对应的内容admin.xml 文件拷贝到Tomcat 5.5\conf\Catalina\localhost. 的文件夹中。
    将admin整个文件夹拷贝到webapps 文件夹中。
  :tomcat-users.xml 文件。在最后一行之前,加入下列一行
   
  :over
5.tomcat是一个基于组件的窗容器
三个顶层组件:server,servie ,connecotor
engne>host>context
server:多个service
service:对应一个engine;多个host;多个connector
host:多个context

只有这三个组件才能处理客户的请求并生成响应.它们有不同的服务范围.
engine:为特定的service处理所有的客户请求(一个serviece对应一个engine)
host:代表一个虚拟主机,一个虚拟主机可以包含多个web应用(context组件)
context:一个context代表一个web应用.
:::一个java web应用必须有一个context元素与之对应

6.发布WEB应用
两种方式
  :修改server.xml,在host元素下增加context元素
   
   
    ::注意到这里的docBase最后的是/jsp而path同样的也为/jsp,这是可以自定义的,
     如/ch3/jsp也可以,但要保证能找到.
     swallowOutput="true"这里的system.out,和system.err被重定向输出到web应用的logger.
     reloadable:自动重载,验证说明,只web-inf,或是相应的lib下的.class文件变动,只有
     重启.
     
     
  :使用COntext片断方式
   放置只能在conf\Catalina\localhost下.
   这个方式的优点:可以动态的重新配置web应用(即修改),验证,修改CONTEXT内容后,tomcat会
   自动与响应,不需重启.
   
   因为如果修改了conf/server.xml就必须重启tomcat才能使修改有效.
   :::
   "work\Catalina\localhost\"下的文件命名,如果是amin方式则自动命名为根目录的方式,如
   jsp.xml,也可以自定义如ch3.xml,ch3333.xml.因为tomcat查找的方式只是依据CONTEXT元素,
   而不是文件名.
   
   ""注意web.xml只要改变就要重启
   :::在context的配置中不能有中文的注释,否则无法正确加载web应用.
    在localhost中写context元素:
      如果建立的文件不在web-app下,则一定要写!
      如果建立的文件在web-app下,则一定不要写!
      对于.war压缩而成的文件,其规定和上面完全相同.
   
   
发布目录的使用方式
  :放在默认的webapps下,则不必须搞定context,tomcat自动搞定.支持热效果(但有时如果加载jar库时会不行).
   缺点是不可以发布时,不可以声明资源或者添加Realm
   ::要声明资源或者添加realms必须明确使用context元素,即使用上面的两种方法之一.
    第六章的知识,数据源时,就明白了.
   
  :放在任意的目录下,必须用上面的两种方式搞定context设置.
   请注意:它不像上面支持热反应,每次有新的context建立,就必须重启动.
    建立之后,可以动态的修改context,这时tomcat就能动态的跟踪了.
    因此实际应用中,全部加载进去,然后再修改.其实默认的方式最适于调试.
   
7.
WelcomeTomcat
cn.ac.ict.WelcomeTomcat



WelcomeTomcat
/welcome//这里的/welcome必须要求这样的方式,当然映射的地焉可以自己指定.

::要理解什么是映射地址,也就是/welcome下的servlet就是本servlet.
::servlet-name:是可以随意定义的,唯一不能变得就是servlet-class

8.
value代表的是初始值.

9.jsp,html文件可以在tomcat运行过程中修改,不需要重启tomcat.因为,当有第一个请求到来时,tomcat自动将
jsp文件转换为servlet文件,然后编译成.class,常驻内存;当再次请求时,直接开另一个线线程,不需要重
编译,从而速度很快.
  :注意,如果jsp改变了,则只要有请求到来,tomcat自动会察觉出变化,然后重新编译.
如果自己定义的servlet,编译后(.class)放在指定的文件夹下,如果改变了相应的.class文件,则必须重启
tomcat,才能生效.因为tomcat是动态的调用.class文件.

10.jsp与html
jsp文件必须通过tomcat解析,ie exploer不能解析,html则两者都可以.

11.jsp1.2
: java.util.Date toLocaleString()已过时。
  java.text.DateFormat 方法.format(Date date)
:
注释
  显式:
  隐式:
:声明
  
  
  记住:它和java中一样.
:指令
  jsp指令共有6种,其中page,include,taglib最常用.
  :page:
  
   :isErrorPage false
   :language="java"
   :errorPage="a.jsp"
   :pageEncoding="gb2312",默认为iso8859-1
   :session 是否使用session
   :import="java.sql.*"
   :contextType="text/html;charset=iso8859-1"
  :include  
   该指令在jsp编译时(即jsp被转换成servlet时)插入一个包含文本或代码的文件,
   当使用include指令时,这个包含的过程就是静态的包含.(***)
   
:动作
  利用xml语法格式来控制servlet引擎的行为.利用该动作可以动态的地插入文件,重用javabean ,
  把用户重定向另外的页面.
  jsp:include 在页面被请求的时候引入一个文件
   该动作实现包含一个静态内容,如html文件或者web组件的输出结果
   注意:插入文件的时间是在页面被请求的时候,百上面的则是在编译的时候.
   
  jsp:useBean寻找或实例化一个javabean
   非常重要的功能,既可以发挥javabean的优势,又能避免损失jsp的方便性
   区别于servlet的特征之一.
   首先寻找这样的javabean实例,如果没有就创建之.
   
    注意这里的id,scope是必须的.(p40,书一例子说明不是必须的)
    id,只要唯一就行,不一定是类名.对于一个类可以建立两个实例,这时id就不能为类名了吧.
  jsp:setProperty设置javabean属性
   设置已经实例化的bean对象的属性.
   两种方式:
    :在外面
     
     此时,不管jsp:useBean是打到了一个实例,还是创建 一个,它都会执行.
    :里面
     
      
     
      注意:这里的id和name是一个值.
     这时,jsp:setProperty 只有在新建bean实例时才会执行,如果是使用责成的,则不会执行.
     
     属性值:name,property不能少,value,param可选,但不能都选.
  jsp:getProperty
   属性值:name,property不能少
   
   注意:它会提取指定属性的值,并转换为字符串,然后输出.
   
  *jsp:forward把请求转到另一个页面.
   只有一个属性;page
   
   这里的page可以是相对的URL,也可以是动态的.
   这个URL必须在同一个context,即属于同一个应用.
   可以附加一些参数.
   
   
   
   
   
  jsp:plugin不常用.
  
  :jsp程序段
   
   如果在page指令中没有指定method的属性,则生成的代码默认为service()方法的主体.
   所以这里声明的变量是局部变量.
  :jsp表达式
  
12.jsp隐含对象
out:javax.servlet.jsp.jspWriter
request:httpservletrequest
response:HttpServletResponse
pageContext:servlet.jsp.PageContext abstract jsp在servelt容器解析时保存jsp的上下文信息.
application:servletContext servlet与容器交换信息的对象.
config:servletConfig servlet容器向servlet传递信息的对象.
session:http.httpSession 会话信息
Exception: java.lang.exception
page: java.lang.object 当前的jsp页面,类似于this.

13.jsp与cookie
:设置客户允许
:添加:
  
:客户显示
  
也可以"/error.jsp"
这两个不能少.

:理解jsp中的隐含对象out代表的jspWriter,就是说所有的打印都会输出在jsp页面上.
  示例:
   
   这里的exception为jsp中的隐含对象,因为printWriter所以要

request.getParameter("num1")用于get,post方法,
要注意:如果输入的整数,则默认为String对象,所以如果是想要得到的整数,则必须实现.

总结:jsp处理cookie和异常是在实际开发中经常用到的技术,一定要掌握.另外servlet也是要用到的技术,
  它一般用于实现逻辑功能
  
15.jsp2.0
表达式语言:EL
  形式为:${变量}
运算符:empty 如:${empty true}得到值true,
\${(1==2) ? 6 : 4}
      ${(1==2) ? 6 : 4}
      注意转义字符只能和EL搭配使用.
      
     :访问数据的格式
      ${student.name},或者是#{student[name]}
      如:${header.userName},#{header["userName"]}
     :隐含对象
      有相当多的隐含对象,
      :param,java.util.Map ${param.name}=request.getParameter(name);
      :paramValues java.util.Map ${paramValues.name}=request.getParameterValues(name)
      :header java.util.Map ${header.name}=request.getHeaer(name)
      :headerValues java.util.Map ${headervalues.name}=request.getHeaderValues(name)
      :initParam java.util.Map ServletContext.getInitParameter(String name)
      :cookie java.util.Map ${cookie.name.value}返回带有特定名称的第一个的cookie值.
  
  
:在EL中定义和使用函数
  : concat(String str) string中的方法,用于连接两个字串.
  
  :步骤
   :函数必须定义在pulic 类的public staitc方法,然后编译放在classes下.
   :函数一经定义它的签名需要映射到标签库描述符TLD中,EL才可使用.
    在WEB_INF创建.tld文件.
   
   
     
     
     
     函数的声明
     
   
   
   :web.xml中添加
   
     /sdf
     /WEB-INF/sdf.tld
   
   :在Jsp文件中使用:
    //这里的/sdf前面的/不能少.也可以具体/WEB-INF/asf.tld
    ${su:函数名(param.参数)}
   
   
   
:jsp2.0简单标签扩展
  :方法一:实现javax.servlet.jsp.tagext.SimpleTag接口
  :方法二
   最简单,使用标签文件,.tag
   步骤:
    :定义标签hello.tag里面的内容自定义,如hello,woreld
    :放在自己指定的目录如:WEB-INF/tags
    :jsp中使用
     
     ...
     //这里的hello这定义的标签文件名.
  :::
   总结,其实标签就是一段显示的内容,从而利用它可以灵活的控制jsp的显示内容,
   我们所做的就是把这个定义的标签插入到jsp中
   
   
  lesson4. servelt介绍
1.是jsp的基础,它的任务可以由jsp+java bean完成.
它的优点:效率高,安全性高,应用相当主泛.

2.注意这里的含义:servlet-name中的名字可以任意,但是servlet-class中的名字只能唯一
url-pattern设置的内容,顾名思义就是游览器的应输入的内容.而且url-pattern只能以/开头.
如:http://localhost:8080/servlet/httpservletsampel,
总之:web容器只是用了servlet类的作用,对于servlet-name则不关心.所以一定
要保证servlet-class的正确,其余的则可灵活设置.这其中的对应关系由它们自己设定.由上述
可以看出.和

url-pattern中的内容就是浏览器的应输入的内容!!!一定要注意!!!
浏览器的内容和编写servlet的类名没有任何关系!!!!
3.只要对应的web.xml变动了,则tomcat就会变化,必须重启.
4.mime媒体类型.
5.servletContext
每个web应用只有一个servletContext,可以访问该应用的所有资源,也可以用于不同serlvet间的数据共享,
但不能与其他web应用交换信息
其中定义了一些方法用于与servlet容器通信
它包含在servletConfig对象之中,servletConfig的方法:getServletContext()可得得到.
  记住:一些重要的方法:
   在extends HttpServlet
   {
   ....
   ServletContext context=getServletContext();//这是genericSerlet中的方法.
   
   
   }
6.servlet技术是继cgi,asp之后的双一动态网页技术.它的功能可以完全由jsp+javaBean代替.
总结:注意到servlet的这个路径可以手工输入,但多数情况下为在jsp页面中
  加以调用.所以只要有这个映射的路径
  被访问,就会有相应的servlet被唤起.
lesson 5 javabeang与web
1.javabean技术是实现web分层技术一个成功的尝试,实现显示和逻辑的在一定程度上的分离,是小型项目的
不错选择.

2.它类似于COM组件
非可视化javabean在web开发中得到了广泛的应用,在web应用主要负责处理逻辑事务,如数据运算,访问数据库等.
可视化的运用.
3.要求:
构造方法: 标准的javabean一定要有一个不需要任何参数的构造函数,它的任何属性都应该提供对应的
  set方法对属性进行初始化.
属性:就是变量,四种属性
  :simple
   即有get,set方法的变量,在jsp联合开发中,这种属性的应用最多.
  :indexed属性
   表示一个数组值.
  :Bound属性,在jsp与javabean的开发应用很少
  :constriained同上
  
4.在JSP中访问javabean
步骤:
  :导入:
  :在JSP中声明
   
   注意这里的id,scope是必须的.
   在第一次请示的时候,容器会初始化一个实例.以后就不用了,除非修改了.
   其实,实例化的名字就是test!!!从而可以利用test.getXX,testsetXX()访问属性.
  :访问javabean属性
   
   
   :::id必须唯一,name,id,class,property是关键字,name表示javabean的名字,即id的值.
   注意:设置和获取属性的方法上面的这两种并不常用.
   最常用的是下面的方法::
   
   
    充分利用了jsp的语法.
   
  最后:在JSP页面中,上述的语句,可以出现在任何地方!!但要注意,getProperyt()和getProperty()
  这两个的顺序问题,
  
5.scope的属性:
page:默认
  这个实例存在于这个页面,一旦离开这个页面,GC就会回收它
request:
  客户对页面的每一次请求,都会创建一个对象.
  一个页面包含的inclue,forward的页面都属于同个请求.
session:
  每个会话.
appliecation:
  所有访问该应用的客户都共享这个javabean对象.
  
注意:tomcat能自动随jsp页面的改变而加以改变显示,如字体,颜色.javabean的属性设置,
这时以上各项并不会受到影响.根本原因:::
6.jsp的设计模式
jsp+javabean+serlvet:中型以上的项目.
jsp+javabean:小型
原则:
  在JSP中少写代码
  jsp+javabean:
   将业务逻辑放在javabean中,实现页面显示和处理逻辑的分离
   如view.jsp,但该JSP需要知道调用的javabean,并知道这个javabean的方法,这样才能调用并显示.
   而实际上,它只应该用来显示数据.
  jsp+javabean+servlet:
   jsp只用来输入,输出数据,
   servlet用来操纵JSP.这就是MVC模式~~
    servlet负责从javabean取数据,然后再把取到的数据发给jsp页面进行显示,
    javabean仅仅是数据的容器.
   :用户的请求由servlet接收(原来由jsp接收,请求javabean处理后,JSP再把它显示出来).
   P74
   
lesson6 开发数据库应用程序

1.在web开发中,数据库的应用是实现动态网页技术的一个重要方面.
2.jdbc
可以将sql语句传给任何一种数据库.
三个功能:
  同一个数据库建立连接
  向数据库发送SQL语句
  处理数据库返回的结果.
3.jdbc的两层模型和三层模型
两层:client/servler
三层:中间层,具有更好的性能.

4.数据库的URL
利用driverManager.getConnection();throws SQLException
  该类方法全为static,多数只会用到方法.getConnection();
数据库的URL为:
  jdbc:mocrosoft:sqlserver://localhost:1433/test
  jdbc:subProtocol:subName://hostname:port/databasename
  jdbc:mysql://localhost/shopdb?user=gaoge&password=110
  
5.加载驱动程序:
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection getConnection(url,user,pass);

6.statement:
conn.createStatement();
三个重要的方法:
  executeQuery();
  executeUpdate();
  execute();
7.resultSet
结果集是一张二维表,有列标题和相应的值,注意在使用时,必须首先调用result.next()
使用结果集指向第一行.
重要的方法:getString(int),getString(string column)

8.tomcat和mysql是非常流行的服务端组合方式.
9.mysql-connector-java-5.0.4-bin.jar
放在common下,注意mysql-connector-java-5.0.4-bin-g.jar是调试包.不需要的.

10.连接数据库的重要的两种方式
:使用jjdbc+dbc-odbc桥+odbc
  java编写的三层结构的应用程序的服务器代码,非常常用.
  建立odbc源
:使用本地协议纯java驱动程序连接数据库
  //释放资源
   rs.close();
   stmt.close();
   conn.close();

11.数据源javax.sql.*;
通过JNDI使用数据源是使用数据源的主要方式.
配置数据源的过程就是向JNDI注册的过程.
:必须使用context方式,即不能使用默认目录的方式.

:::在context的配置中不能有中文的注释,否则无法正确加载web应用.
:::使用数据源,驱动程序必须放在common/lib下.
软件包 javax.naming 为访问命名服务提供类和接口。
  try{
   InitialContext ctx = new InitialContext(); //获取初始上下文对象
  DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/shopdb"); //固定的方式
                   //得到数据源.
  conn = ds.getConnection();//从连接池中获取一个连接
   不需要用户名密码,因为它们已经在context元素中的元素中设置了.
  
  //Class.forName("com.mysql.jdbc.Driver").newInstance();//注意里的newInstance()没有任何作用.可写可不写.
  //conn = DriverManager.getConnection(url,user,passw);
}catch(Exception ex){
  out.println("数据库驱动加载出现错误!"+ex);
}

  :::通过这个例子,区分两者的差别.
  
12.编码问题
在一个JSP页面中:
  //设定了页面的编码方式
  id://确保编码方式为gb2312.
  对于编码方式??
  
13.context片断方式
不需要重启,边修改context内容边观看效果,非常好用.
一旦有.class文件改变,必须重启.
14.

         jdbc/shopdb
         javax.sql.DataSource
         Container
     
-->
该内容可在具体的web.xml中设置,也可以在全局的web.xml中设置,,
执行的时候,如果具体的web.xml中没有,则自动转到全局的web.xml中寻找.
它和在localhost设置的context内容中的
作用等价!!!
因此,这两个可以都写,也可以任写其中一个!!!
由于通过建立了全局的jndi,所以如果没有针对具体的web应用建立jdni,则所有的
web应用都采用统一的全局jdni;
注意::使用数据源连接数据库即initailContext方法和其他方法Class.forName().newInstance()
是不同的..前者一定要使用resourcelink或resouce-ref的方法.后者则什么都不需要!!!
在server.xml和web.xml中一定不能出现中文的注释,不然会出错!!!!比如在admin图形方式
建立context时,就会出错....
再有:::凡是在admin图形相关的设置.xml格式的文档,一律不准出现中文!!!!!!!!
这是经过多次的失败才得到的经验...
建立logger方法,在amdin图形方式中,必须提交才能看到改变的效果.
15.问题
在7章中,引用不行,而将其替换成原码却可以????
???原码换成是datasource也不行,??

16.在admin下做了的修改,save后会在工边栏显示修改后的样式,但是必须保存后,才能对应硬盘中的文件.
只要保存后,下面再次进入该页面,左栏仍有上次的修改,但必须commit后才能对应硬盘.

17.host,service,context
配置logger,value,realm
logger:如context,每次访问这个应用就肢产生一个日志.
value:作用,对catalina容器接收到的http请求进行预处理
  accesslogvalue,访问日志阀.,其中的pattern,记录何种类型的日志.
realm:安全域,是一组用户名,密码,用户解色的数据库,用来限制对资源的访问.
  如memoryRealm,要增加相应的安全限制(web.xml)
  
  
      ShopOnLine Configuration
      
      
        Protected Area
         /* //所有的资源都必须经过安全许可才可以访问.
      
      
      
       manager
     
   
//使用的验证方式是basic
   
       BASIC
       ShopOnLine Application Realm
   

   
     
       The role that is required to log in to the ShopOnLine Application
     
     manager//允许访问的用户角色是manager.
   
   注意:/意思是映射到没有任何资源,即当不指定具体访问资源时
    该servlet被调用 .
18.web.xml

  
  
>

  
  


  
  
  
  
  


  


  
  





....

....

  


lesson8.9

1.安全管理.
catalina.policy,catalina.properties包保护


lesson10 session

1.:session 是否使用session

2.


由此看出区别.第一个必须有相应的servlet类的/welcome
第二个必须有checkuer.jsp页面.
3.sesson:getAttribute(string name);
request.getParameter("username");
两者的功能是一样的,表述不一样.得到的都是username 的值.

4.session的追踪方法
:cookie
  只要在jsp页面中声明即可.
:encodeURL(string url)
  只要cookie不能使用,servlet会自动选用该方法,它的机制是:能过把sessionID添加到URL信息中.
  记住:只要是相关的URL都要response.encodeURL(url)如<form action="<%=reponse.
  <a href="<%=response.encoeURL....
  
5.session的持久化
tomcat默认采用的是standManager,因此不需要设置context即可在word/loclahost/session.ser找到
另外,pesistentManager,它实现了可以指定存储session的方式
  :FileStore
  :JDBCStore,
   connectionURL="jdbc:mysql://localhost/TomcatSession?user=root&amp;passward=ict"
   
注意这其中&amp;的使用.
  :伪会话:
   利用javabean实现,即模仿tomcat机制实现.如要判断失效的时间.


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/32621/showart_253716.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP