上次看到处理HEAD请求,下面是关于Web应用程序的配置问题。
Web应用程序是Servlet、JSP、HTML文档、图片、模版以及其他可在支持Servlet的Web服务器上部署的所有Web资源的一个集合。
(这句话好长,总之就是你能在网上看到的东西,或者一些产生动态Web页的程序)。
我们安装了Tomcat就会知道,在webapps文件夹下面有很多的子文件夹,一个文件夹对应一个应用程序。他们是一堆的JSP程序以及配置文件。另外我们可以给他打包,成为一个存档文件,扩展名为:war。
WEB-INF目录
每个Web Apps,都有一个这样的目录,有一个web.xml文件。
现在对xml作一点学习:
XML是eXtensible Markup Language
他与HTML类似,都是用标签标记它的内容,并用尖括号来结束;
XML和HTML的服务目标是不同的:XML文档中的标签没有定义文字的显示格式,而是解释了文本的意思。它是一个可扩展的标记语言,他可以定制一些新的标签来写你自己需要的文档。
有几个要注意的地方:
1、XML区分大小写(大小写敏感)
2、又开始的标签必须有结束(标签必须是一对)要么就这么写:<servlet/>,用来代替一对的符号
3、嵌套的元素不可以重叠!例如这样写就是非法的<outside><inside></outside></inside>
4、所有数值必须加上单引号或者双引号
配置描述符:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>
hi
</servlet-name>
<servlet-class>
HelloWorld
</servlet-class>
</servlet>
</web-app>
web-app标签表示这些是用来配置一个web应用程序的,servletname是一个你所写的servlet的名字,class是他的类名,可以写成所属包名+类名的形式,有些IDE可以自动的生成。
servlet映射
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>
hi
</servlet-name>
<servlet-class>
HelloWorld
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
hi
</servlet-name>
<url-pattern>
/hello.html
</url-patter>
</servlet-mapping>
</web-app>
servlet-mapping表示他来标示servlet的映射信息,映射过后我们就可以用自己定义的地址来访问他;
其中有两个子标签,一个是name,另一个是url-pattern。第一个不用说就是servlet里面定义的那个name;
url-pattern指的是上面那个servlet-name所指定的servlet可以在浏览器中用什么样的url访问。
设置有几种:
明确映射,就是一个地址,跟普通的相对路径没有什么区别。
路径前缀映射,/lite/*这样子的url-pattern
就是以/开头,/*结尾,处理所有拥有该前缀的请求。这种映射机制,允许一个servlet来控制一个虚拟目录层次的sevlet请求。
扩展名映像:
*.jsp
可以表示这个servlet用来处理所有的JSP请求。
默认映射,/
如果没有与之相匹配的servlet可以处理该请求,则将这个请求扔给这个servlet,等同于/*,要慎用!
posted @
2005-12-30 13:33 Fusion KISS 阅读(584) |
评论 (1) |
编辑 收藏
今天动手实践了一下写Servlet的代码,感觉不错.现在写些东西给大家分享一下:
我们是用Servlet的API处理HTTP请求的,现在我给大家看一段代码,它的作用就是在浏览器里面打出一行字,经典的不能再经典(你想说老土我也不反对)就是,Hello,World
package Chap2;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld extends HttpServlet
{
// eclipse非要让我加这句话,要么会有一个警告,我看对运行没有什么影响我就加了,不知道哪位高人知道怎么用这个东西
private static final long serialVersionUID = 1L;
// 这个方法可以处理GET的请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置一个Content-Type首部
response.setContentType("text/html");
// 这个东西就像你拿到了向客户端浏览器写字的一支笔
PrintWriter out = response.getWriter();
// 现在可以往客户端的浏览器写HTML代码了,想怎么写就怎么写,呵呵
out.println( "<HTML>" );
out.println( "<HEAD><TITLE>Hello World</TITLE></HEAD>" );
out.println( "<BODY>" );
out.println( "<BIG>Hello World</BIG>" );
out.println( "</BODY></HTML>" );
}
}
把这个东西发布到你的服务器下面,你就可以看到一行字:Hello,World.
至于怎么配置服务器,近期我会给大家一份资料,里面详细描述了配置JDK+Tomcat+Eclipse+MyEclipse的方法,这些软件都可以到我的网站上去下载,链接在我的签名里面!
下面我们来点动态的东西,做完了以后,学过JSP的人们会发现,这个...不就是JSP么?
对!JSP就是拿这个东西实现的,就如同Windows API和MFC的关系;相信如果你是个肯钻研的主,早就不愿意学MFC那个把你规定的死死的东西了吧.
第二个例子:
package Chap2;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Exp2 extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String name = request.getParameter( "name" );
out.println( "<HTML>" );
out.println( "<HEAD>" );
out.println( "<TITLE>Hello " + name + ".</TITLE>" );
out.println( "</HEAD>" );
out.println( "<BODY>" );
out.println( "Hello, " + name + "." );
out.println( "</BODY>" );
out.println( "</HTML>" );
}
public String getServletInfo()
{
return "A servlet that knows the name of the person to whom it's saying hello";
}
}
这个Servlet可以接受一个name的参数,当然你可以新建一个页面来让用户来提交这个参数.
我给大家一个
<HTML>
<HEAD>
<TITLE>Introductions</TITLE>
</HEAD>
<BODY>
Exp2
<FORM METHOD=GET ACTION="servlet/Exp2"> If you don't mind me asking, what is your name?
<INPUT TYPE=TEXT NAME="name"></P>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
纯粹的HTML代码,简单的不能再简单,根据你服务器配置的不同和Servlet存放的地方的不同,你要看你的FORM标签上面那个ACTION属性该怎么填!
Exp2那个Servlet就是接受了一个name的变量,然后叫一下你的名字,问候你下你呵呵.
但是有时候用户会发出一个HEAD请求(客户端只想看到响应的首部时发出的请求),这个东西可能会让你很烦,你心里会说这些人就会给我捣乱,发什么HEAD请求啊!确实这个东西看上去微不足道,也没有doHead()的方法可以使用.任何有子类HttpServlet和实现了doGet方法的servlet都支持HEAD请求.
现在我们看一下处理HEAD请求的工作过程:
HttpServlet的service()方法确定HEAD请求并把它特殊对待。它构建一个修改过的HttpServletResponse对象,并把它和原来的请求一起发给doGet方法(你知道了,我们要在doGet那个东西里面做文章!)。很高兴地告诉你,如果是一个HEAD请求,系统可以为我们自动屏蔽后面的输出,但是如果让我们来做一个判断,你可以提高你的程序性能,也能加深我们对这个Servlet的了解。
我们要在Exp2的doGet()方法中加一句话:
if( request.getMethod().equals( "HEAD" ) ) return;
通过request这个对象我们可以看到客户端的请求类型,如果这个字符串时HEAD,哈哈,干掉他!
但是,即使我们只是处理一个HEAD请求,我们也要设置Content-Type首部。
posted @
2005-12-30 13:32 Fusion KISS 阅读(415) |
评论 (0) |
编辑 收藏
HTTP servlet基础
内容:编写和运行一个简单的HTTP servlet
包括如何在一个标准的Web应用程序上预见性servlet及其基于XML的配置描述
HTTP基础
重点:GET POST方法
HTTP是一个简单的、无状态的协议。
在访问一个Web服务的时候(方法就是填入一个URL加以访问),浏览器会发出一个请求,类似于ftp里面的各种命令,这种请求要指定一个HTTP请求的名称、URL、HTTP协议的版本;
例子:GET /intro.html HTTP/1.0
这个命令使用了GET方法向一个名为intro.html的文档提出请求,用的是1.0版本的HTTP协议。
之后,浏览器发送一个选择性的首部信息告知服务器关于请求的附加信息,注意,这些信息不直接和你所要请求的那个URL有关,而是可以对服务器的响应有一点帮助。
例子:
User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)
Accept: image/gif, image/jpeg, text/*, */*
User-Agent说明了客户端软件的信息
Accept说明了客户端愿意接受的media(MIME)类型的数据;
发送了附加信息,客户端发送一个空行给服务器,表示已经完成。
下面该服务器响应了,响应的第一行是用来指服务器所用的HTTP/1.0 200 OK
200-是正常的提示
还有一个我们比较常见的状态码:
404-找不到
发送了状态条后,服务器发送响应首部,用来告诉客户端,服务器使用的软件和响应内容类型的信息。
GET和POST
前面提到过,发送请求的时候有一个叫做HTTP请求的东西(也叫做方法),最最常用的就是GET和POST了.
看名字就知道:
GET:取得信息的方法;说白了就是读取
POST:用来发送信息;就像在版上灌水一个道理
GET方法(用来读数据,地球人都知道了现在),请求中可以加入一些自身信息来更好地描述需求.比如在URL中显式地发送一个信息给一个页面;
POST方法,如果要上传一个东西,你可能要传输一个上M的文件,所以它用不同的技术来向服务器发送信息.一个POST请求把它的不限长度的数据作为HTTP请求体的一步分.通常通过Socket发送出去.传送对用户是不可见的(想象一下,如果你的信用卡号传给银行的时候对用户可见,你的钱恐怕早就没有了.呵呵
posted @
2005-12-30 13:26 Fusion KISS 阅读(372) |
评论 (0) |
编辑 收藏
以前也知道要改配置文件~~今天看了一个帖子~~觉得这个答案比较好。
转自:cjsdn
怎么在Tomcat里发布自己的程序?
http://www.china***net 作者:aile 发表于:2003-06-11 22:24:30
我刚开始学JSP,用WINXP+Tomcat4.1.24,在webapps目录下建立一个新目录myjsp,把自己写的jsp程序test.jsp放在里面,可是用http://localhost:8080/myjsp/test.jsp
无法运行(The requested resource (/begjsp-ch01/index.jsp) is not available)把它放在ROOT里用http://localhost:8080/test.jsp运行正常,
我应该怎么做?
【发表回复】【查看CU论坛原帖】【关闭】
--------------------------------------------------------------------------------
kpflysky 回复于:2003-06-12 08:38:32
同意
你主要是server.xml里面的映射没有弄清楚
默认的根目录是ROOT
所以你放到ROOT里就可以了
--------------------------------------------------------------------------------
badseed 回复于:2003-06-11 23:51:25
你有没有写web.xml
研究一下 webapps/examples/WEB-INF目录下的文件和目录结构
,再看看 web.xml的写法
--------------------------------------------------------------------------------
zhangv 回复于:2003-06-12 21:06:14
找到%tomcathome%\conf\server.xml文件,在<host>标签中加入:
<Context path="/虚拟目录名" docBase="本地路径" debug="0"
reloadable="true" crossContext="true">
</Context>
这样将你的jsp文件放到"本地路径"下,然后在浏览器中输入http://127.0.0.1:8080/虚拟目录名/xxx.jsp即可执行.
注意!!!还没有完!!这时候你的这个虚拟目录还没有执行servlet的能力(当然如果你不用servlet那就令当别论了).
下面是一个范例:
<Context path="/bbs" docBase="work" debug="0"
reloadable="true" crossContext="true">
</Context>
你要建一个名叫work的目录在webapps\下
要使这个work目录可以执行servlet,要有一个配置文件--web.xml,内容为:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<display-name>MyWEB</display-name>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
</web-app>
这个使最小配置,仅仅是指明servlet的位置.要把这个文件放到webapps\work\WEB-INF\下,你自己的servlet放到webapps\work\WEB-INF\classes\下.
手酸~^_^
posted @
2005-12-18 21:58 Fusion KISS 阅读(421) |
评论 (0) |
编辑 收藏
我来自国防科技大学,现在是一名大三的学生。希望大家一起和我来交流JSP和有关UML结合Java的技术。
posted @
2005-12-18 11:29 Fusion KISS 阅读(201) |
评论 (0) |
编辑 收藏