- 浏览: 112608 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
wenbing2610:
其实用Struts实现图片上传比用Servlet实现容易多了。 ...
Struts2文件上传深入FileUploadInterceptor -
i_feng:
public class uploadImageAction ...
Struts2文件上传深入FileUploadInterceptor -
wenbing2610:
...
ognl.MethodFailedException
当一个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的加载,因为保存后在你不修改以前不发生变化 而加载后在你不重启服务器以前不发生变化 但是我的在我的印象中是不管使用什么服务器都是这个原理,也就是与服务器无关!!!
望大家也注意。(我用的运行环境是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的加载,因为保存后在你不修改以前不发生变化 而加载后在你不重启服务器以前不发生变化 但是我的在我的印象中是不管使用什么服务器都是这个原理,也就是与服务器无关!!!
发表评论
-
CSS样式表的overflow属性
2015-01-02 19:22 28一、滚动条样式overflow ... -
jrebel运用
2014-07-13 22:00 1131JRebel热部署 ... -
JPA执行原生SQL截断Char类型问题
2014-05-24 21:39 1131在JPA的API中执行原生 ... -
JPA基本数据类型映射
2014-05-24 21:06 3830/** ... -
spring定时器配置
2014-03-18 21:36 646创建测试类: ... -
The Struts dispatcher cannot be found
2013-11-03 18:48 605运行环境:struts2环境中访 ... -
JasperException
2013-09-15 20:41 975JasperException异常: ... -
equal symbol expected
2013-09-15 20:08 1133equal symbol ... -
Hibernate主键生成器
2013-09-12 21:11 752... -
Criterion和Criteria
2013-09-08 16:00 1836Hibernate Criter ... -
getHibernateTemplate用法
2013-09-08 15:02 528HibernateTemplate提供的方法 ... -
JS中页面跳转
2013-09-08 14:01 613<html><head><t ... -
GridPanel详解
2013-03-10 10:45 9761、Ext.grid.GridPanel ... -
tomcat内存溢出
2013-03-04 20:26 683在使用Java程序从数据库中查询大量的数据或 ... -
History Object
2013-01-07 21:06 702history 对象是window 对象的另一个子 ... -
Write to programmer
2012-12-29 20:16 796很多的java初级程序员对自己没有一个明确的方 ... -
EL语言
2012-09-27 22:08 837EL的前世今生: ... -
JSTL标签的使用
2012-09-27 22:00 746JSP 标准标记库( Standard Tag Library ... -
使用IBATIS防止sql注入
2012-08-26 21:17 1523对于ibaits参数引用可以使用#和$两 ... -
IBATIS动态SQL标签用法
2012-08-26 21:04 11381、动态SQL片段通过SQL片 ...
相关推荐
我学习配置的第一个servlet,方便了初学者
用shell写的脚本,用于java web开发时,自动编译运行servlet,速度极快,免除了eclipse慢且不过更新代码和资源的问题。脚本中的路径请自行替换为自己的
运行servlet的两种方法.ppt
servlet运行方法,servlet开发过程
NULL 博文链接:https://andrewstz.iteye.com/blog/1668372
NULL 博文链接:https://hbiao68.iteye.com/blog/1570415
Servlet引擎提供网络服务,能够理解MIME请求,并提供一个运行Servlet的容器。 javax.servlet.Servlet接口定义了在Servlet的生命周期中特定时间以及特定顺序被调用的方法。 Servlet的解析和载入 Servlet引擎解析并...
JDK - Tomcat - JSP - Servlet 配置运行全攻略
servlet的学习资料 1. C/S与B/S C/S叫做客户端服务器,要想运行此类程序,必须在客户端与服务器端分别安装程序。 好处:运行速度快,一般程序较简单,典型程序...Tomcat是运行Servlet与JSP的一种软件。 Tomcat文件目录
Servlet运行原理图,描述servlet运行的步骤方向和servlet运行过程
3. 使用代码以及文字,说明Servlet的运行机制和生命周期 4. 实现用Servlet实现伪静态页面的访问 5. 实现用缺省的Servlet实现对静态页面的访问。 6. 使用ServletConfig对象,访问web.xml中的数据库连接信息。 7. 使用...
servlet的概念和运行原理,包含servlet中web.xml的配置,servlet api的结构,jsp和servlet的关系
Servlet揭秘:编写、部署和运行Servlet 如果在HTTL中引入Java,JSP则应运而生 2 Web应用体系结构:高层概述 考试要求 什么是容器,容器能带给你什么? 代码里有什么 命名servlet,使用DD将Servlet映射到URL ...
Servlet揭秘:编写、部署和运行Servlet 如果在HTTL中引入Java,JSP则应运而生 2 Web应用体系结构:高层概述 考试要求 什么是容器,容器能带给你什么? 代码里有什么 命名servlet,使用DD将Servlet映射到URL ...
Servlet揭秘:编写、部署和运行Servlet 如果在HTTL中引入Java,JSP则应运而生 2 Web应用体系结构:高层概述 考试要求 什么是容器,容器能带给你什么? 代码里有什么 命名servlet,使用DD将Servlet映射到URL ...
Servlet揭秘:编写、部署和运行Servlet 如果在HTTL中引入Java,JSP则应运而生 2 Web应用体系结构:高层概述 考试要求 什么是容器,容器能带给你什么? 代码里有什么 命名servlet,使用DD将Servlet映射到URL ...
Servlet JSP开发运行环境配置.docServlet JSP开发运行环境配置.docServlet JSP开发运行环境配置.doc
Linux环境下安装运行JSPservlet
servlet是在服务器上运行的小程序。这个词是在Java applet的环境中创造的,Java applet是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等...