端口
tomcat默认端口号为8080,ie默认为80,可在tomcat安装目录下的conf中找到server.xml,在文中找到<Connector port="8080"…,将8080改为80便可。
根目录
tomcat默认根目录为安装目录下的webapps/ROOT,可在server.xml中找到Host name="localhost"appBase="webapps" 中的“webapps”改为你需要的目录,比如”E:/jsp”.那么你的jsp页面根目录就在E:/jsp/ROOT下。tomcat将jsp翻译成servlet以及class字节码放在%TOMCAT_ROOT%work/Catalina/localhost/_/org/apache/jsp中。
更改根目录也可在</host>前面加上<Contextpath="/hello" docBase="D:/Myjsp/star" debug="0"reloadable="true"/>。此时,tomcat将jsp翻译成servlet以及class字节码放在%TOMCAT_ROOT%work/Catalina/localhost中。
<Context ….>可存在多个,这样可以同时建立多个网站,或者把一个网站分布在不同地方,根据path="…."来区分。
主页
jsp中如果你的主文件名为index.jsp,默认是不允许的(报错),可把目录中WEB-INF中web.xml中下面文字注释掉,便可用index.jsp了
<servlet>
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<servlet-class>org.apache.jsp.index_jsp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
指令标记
<%@pagecontentType="text/html;charset=GB2312"%>
<%@pageimport="java.util.*"%>
<%@pagelanguage="java"%>
<%@pagesession="true"%>
<%@pagebuffer="24KB"%>
<%@pageautoFlush="true"%>
<%@pageisThreadSafe="true"%>
<%@include file="文件的URL"%>静态嵌入一个文件,不允许URL中存在变量
动作标记
<jsp:include page=”文件路径”/>或者
<jsp:include page=”文件路径”>
<jsp:param name=”参数名1” value=”参数1值”/>
….
<jsp:param name=”参数名n” value=”参数n值”/>
</jsp:include> URL中允许存在变量
指令标记include与动作标记include区别
指令标记include不允许存在变量,而动作标记include中可以
include指令标记在编译时处理所需文件,优点是速度快
include动作标记的所需文件在jsp运行时才被处理,缺点是速度慢,优点是更灵活
forward动作指令
<jsp:forward page=”文件路径”/>或者
<jsp:forward page=”文件路径”>
<jsp:param name=”参数名1” value=”参数1值”/>
….
<jsp:param name=”参数名n” value=”参数n值”/>
</jsp:forward>
从该标记出现处停止当前jsp页面的继续执行,而转向指定页面
声明变量
在<%!...%>之间放置java的变量声明语句,翻译成servlet时,这里的变量将成为成员变量,tomcat为每个用户启动一个线程,用户线程共享这些成员变量,因此一个用户对jsp页面成员变量的改变也会影响其他用户线程
内置对象
request
getPRotocol(); getServletPath();getHeader(String s); getServerPort();getServerName();
response
setContentType(String s)s可取text/html image/gif image/jpegapplication/msword等等
setHeader(Stringhead,String value) 如setHeader("Refresh","5")
sendRedirect(URL url)
setStatus(int n)
session
getID() 每一个session会有一个ID标识
setAttribute(String key,Object obj)
getAttribute(String key)
getAttributeNames()
removeAttribute(String name)
invalidate()
getMaxInactiveInterval()
setMaxInactiveInterval()
session对象的生存期限依赖于客户是否关闭浏览器,依赖于是否调用invalidate()或 session对象达到了设置的最长“发呆”状态时间
application
out
JavaBean
编写javabean就是编写一个java类,这个类创建的一个对象成为一个bean,这个类需遵循:
1 如类的成员变量为xxx,那么为了获取或设置变量,需提供两个方法:getXxx()setXxx()
2 对boolean变量,可以用“is”代替“get”和“set”
3 类中方法访问属性必须为public
4 构造方法必须为public、无参数
在jsp页面中使用bean
<jsp:useBean id="给bean起的名字" class="创建bean的类"scope="bean有效范围"/>
其中scope可取pagesession request application
<jsp:getProperty name="bean的名字"property="bean的属性"/>
setProperty有3种方式设置bean属性的值
1 通过字符串直接设置
<jsp:setPropertyname="bean的名字" property="bean的属性" value=字符串/>
2 通过http表单的参数值来设置bean相应属性值,要求表单参数名字与bean属性名相同
<jsp:setProperty name="bean的名字" property="*"/>
3 通过request参数值设置bean属性值
<jsp:setProperty name="bean的名字" property="bean的属性" param="参数名"/>
中文字符处理
在用request接收到的中文字符显示为乱码,可用下面的函数将request接收到的字符串传化为正常字符串
<%!
public String codeToString(String str)
{
String s=str;
try{
byte tempB[]=s.getBytes("ISO-8859-1");
s=new String(tempB);
return s;
}catch(Exception e){
return s;
}
}
%>
Tomcat安装目录中的server.xml中不能出现中文,如出现,在启动tomcat时会发生“服务启动后停止”的错误。
如果通过server.xml更改根目录后,指定的页面(如index.jsp)老是在浏览器中看到不是该页面的内容,那么可以进tomcat安装目录下work/Catalina/localhost/_/org/apache/jsp删除该页面生成的servlet字节码和java文件。
如果根目录下所有文件用浏览器查看时都找不到,那么可能是WEB-INF下的web.xml配置有问题。
通过url直接访问servlet
需要在根目录的WEB-INF/web.xml的<web-app>中添加如下语句:
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>Logic.Dologin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/test/hello</url-pattern>
</servlet-mapping>
其中,Logic.Dologin是在Logic包中的一个servlet文件,文件名为Dologin,/test/hello是在浏览器地址栏输入的访问地址
容器启动时加载servlet
<servlet>
<servlet-name>initservlet</servlet-name>
<servlet-class>com.bb.eoa.util.initServlet</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>config/log.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
标记容器是否在启动的时候就加载这个servlet。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。
eclipse不能自动编译工程的解决方法
eclipse出现不编译工程的现象。怎么刷新classes目录下也是空的.
具体都操作了:
打开project->build automatically 试后不行,还是不编译.
打开project --> build automatically 另外clean一下就可能会编译了,结果还不行.
eclipse默认是选自动编译。即使取消自动编译,手动build工程,也不能编译。
出现这种情况一般有以下三种原因:
1.如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来class文件的情况,可以把所有包都删除,然后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果.
2.想删掉某个class文件重新生成,删除class文件后,但classes目录下的文件夹被其它程序打开,比如Total Commander。此时编译也不会通过,在problems下可能会提示“can't delete classes ……”。关掉其它程序重新编译即可。
3.还有种情况是remove掉 JRE System Library,重新导入即可编译。但是什么原因导致的还不清楚
页面中applet连接数据库失败的解决方法
在本地jre目录的lib/security中有一个client.policy,添加
permission java.net.SocketPermission"*:3306","connect";
其中3306是mysql数据库端口号
tomcat5.5 的Tomcat Native library which allows optimal performance 的解决办法
启动tomcat5.5.25出现如下提示:org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息:The Apache Tomcat Native library which allows optimal performance in productionenvironments was not found on the java.library.path: ….
实际这是建议使用apache的( Apache Portable Runtime)apr。Tomcat 可以用apr来提供更强性能,提升Web静态页面的处理能力,不再需要专门的Web Server来处理静态页面了。
解决方法:安装Apache TomcatNative library。
文件下载地址:http://tomcat.heanet.ie/native/,并选择合适的包(假设选择了版本1.1.2)。
环境变量配置:将下载好的文件tcnative-1.dll放到Tomcat5.5/bin/目录下。重启Tomcat便OK!
后台代码修改导致需要重启tomcat的解决办法
在eclipse的tomcat配置中,JDK的参数加上:
-noverify-javaagent:C:/Tomcat/javarebel.jar-Drebel.dirs=C:/Tomcat/webapps/ROOT/WEB-INF/classes
其中javarebel.jar是需要的工具包,后面的路径是需要监视的地方