运行Servlet

当一个servlet已经写好怎样来运行测试呢?但其实现在想想也不是很难。我想通过一个例子详细的说说,这样会有一个感性的把握。我会把我当时遇到的主要问题用黑体字写出,那时我当时主要浪费时间的地方,希

望大家也注意。(我用的运行环境是Tomcat5.0)
首先我们来写一个最简单的servlet:
package test;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException,IOException{
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");

PrintWriter out=response.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("<p>Hello!这是我的第一个Java Servlet程序。</p>");
out.println("</BODY>");
out.println("</HTML>");
}
}
由于我们把它进行了打包,所以把这个编译好的.class文件放到\Tomcat文件夹

\webapps\ourappfiles\WEB-INF\classes\test的文件夹下。
接着我们需要写一个调用该Servlet的html文件:
<html>
<head>
<title>Java Servlets Sample-Properties</title>
</head>
<body>
<form method="get" action="test.HelloServlet">
<input name="test" type="submit" value="Test HelloServlet servlet">
</body>
</html>
注意:这里的method不能用post,不然不会在IE中正常显示,我当初就是在这个地方没有弄好,浪费了好多时间。至于为什么这样写,我也弄不太清楚,由于水平有限,多多包涵
。 现在我们还差最后一步,编写我们的web.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application

2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd";>
<web-app>
<servlet>
<servlet-name>helloservlet</servlet-name>
<servlet-class>test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloservlet</servlet-name>
<url-pattern>/test.HelloServlet</url-pattern>
</servlet-mapping>
</web-app>

把编写好的web.xml文件放到\Tomcat文件夹\webapps\ourappfiles\WEB-INF下。 好了,现在万事俱备,就差启动Tomcat运行我们的Servlet了。
以上就是运行Servlet的几个步骤。

附录二

1.ServletConfig
一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。
ServletConfig包涵 ServletContext 和 一些 Name/Value pair
ServletContext接口封装了Web应用程序的上下文概念。

2.会话跟踪
(1) Session
当一个Client请求多个Servlets时,一个session可以被多个servlet共享。
通常情况下,如果server detect到browser支持cookie,那么URL就不会重写。
(2) cookie
在Java Servlet中,如果你光 Cookie cookie = new Cookie(name,value)
那么当用户退出Browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。
如果要存储 cookie,需加一句 cookie.setMaxAge(200)

cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.

(3) URL Rewriting

在使用URL Rewriting来维护Session ID的时候,每一次HTTP请求都需要EncodeURL() 典型的用在两个地方
(1) out.print(“form action=\” ”);
out.print(response.encodeURL(“sessionExample”));
out.print(“form action=\” ”);
out.print(“method = GET>”);
(2) out.print(“<p><a href=\” ”);
out.print(response.encodeURL(“SessionExample?database=foo&datavalue=bar”));
out.println(“\” >URL encoded </a>”);

3.SingleThreadModel
默认的,每一个servlet definition in a container只有一个servlet class的实例。 只有实现了SingleThreadModel,container才会让servlet有多个实例。
Servlet specification上建议,不要使用synchronized,而使用SingleThreadModel。

SingleThreadModel(没有方法)
保证servlet在同一时刻只处理一个客户的请求。
SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,

SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
这等同于在servlet的service()方法种使用synchronized.

Single Thread Model一般使用在需要响应一个heavy request的时候,比如是一个需要和

数据库打交道的连接。


2. 在重载Servlet地init( )方法后,一定要记得调用super.init( );

3. the client通过发送一个blank line表示它已经结束request
而the server通过关闭the socket来表示response已结束了。

4. 一个Http Servlet可以送三种东西给Client
1) a single status code
2) any number of http headers
3) a response body

5. Servlet之间信息共享的一个最简单的方法就是
System.getProperties().put(“key”,”value”);

6. Post和Get
Post:将form内各字段名称和内容放置在html header内传送给server
Get: ?之后的查询字符串要使用URLEncode,经过URLEncode后,这个字符串不再带有空格

,以后将在server上恢复所带有的空格。

Get是Web上最经常使用的一种请求方法,每个超链接都使用这种方法。

7. Web.xml就是Web Applicatin 的deployment descriptor
作用有:组织各类元素
设置init param
设置安全性

8. Request Dispatcher用来把接收到的request forward processing到另一个servlet
要在一个response里包含另一个servlet的output时,也要用到Request Dispatcher.

9. Servlet和Jsp在同一个JVM中,可以通过ServeltContext的
setAttribute( )
getAttribute( )
removeAttribute( )
来共享对象
10. 利用request.getParameter( )得到的String存在字符集问题。
可以用 strTitle = request.getParameter(“title”);
strTitle = new String(strTitle.getBytes(“8859-1”),”gb2312”);

如果你希望得到更大得兼容性
String encoding = response.getCharacterEncoding(); //确定Application server用

什么编码来读取输入的。
strTitle = new String(strTitle.getBytes(encoding),”gb2312”);
而jsp页面是由web服务器负责解析的,你每次改了jsp页面以后是要保存后刷新的,而刷新的作用就是告诉web服务器重新解析,只有在web服务器启动的时候才可以解析!!,但与是否重启服务器无关,因为就算你重启服务器,它解析jsp的方式也是那样,是实现好了的,不
会改变!你只要用他解析jsp也就好了. 以上理解为要用新的只要重新解析!! 最好的理解方式是什么呢?? 你可以把jsp页面的"保存"对等与Servlet的加载,因为保存后在你不修改以前不发生变化 而加载后在你不重启服务器以前不发生变化 但是我的在我的印象中是不管使用什么服务器都是这个原理,也就是与服务器无关!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值