- 论坛徽章:
- 0
|
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&passward=ict"
注意这其中&的使用.
:伪会话:
利用javabean实现,即模仿tomcat机制实现.如要判断失效的时间.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/32621/showart_253716.html |
|