实现servlet
servlet作为一个java 小程序,需要运行在服务器中。tomcat是常用的servlet服务器。
tomcat是什么
Tomcat是Servlet容器,同时也是轻量级的Web服务器。
Apache Server、Microsoft IIS、Apache Tomcat都是Web服务器。
Tomcat作为Web服务器时,主要负责实现HTTP传输等工作。
Tomcat的容器分为四个等级,Servlet的容器管理Context容器,一个Context对应一个Web工程。
包括
- Server,代表整个Servlet容器组件,是Tomcat的顶层元素。其中可以包含一到多个Service;
- Service,包含一个Engine,以及一到多个Connector;
- Connector,代表和客户端程序实际交互的组件,负责接收客户请求,以及向客户返回响应结果;
- Engine,处理同一个Service中所有Connector接收到的客户请求;
- Host,在Engine中可以包含多个Host,每个Host定义了一个虚拟主机,它可以包含一个到多个Web应用;
- Context,一个Host中可以包含多个Context,每个Context代表了运行在虚拟主机上的单个Web应用。
实现servlet的方法
servlet基本开发流程
- 在%TOMCAT_HOME%/webapps下WEB-INF的文件夹,写一个文件web.xml(该网站的配置信息),建立一个classes的子文件夹,也可以从别的目录ROOT下拷贝
在web.xml文件中添加如下代码:
<servlet>
<!—给servlet取名,可以随意取名-->
<servlet-name>hello</servlet-name>
<!—指明servlet的路径,就是servlet的包+类名-->
<servlet-class>com.test.Hello</servlet-class>
</servlet>
<servlet-mapping>
<!—给servlet取名,可以随意取名-->
<servlet-name>hello</servlet-name>
<!—浏览器中输入的url,可以随意取名-->
<url-pattern>/hello<url-pattern>
</servlet-mapping>
- 开发servlet(引入Tomcat文件夹下lib文件夹里的servlet-api.jar)
- 部署你的servlet到tomcat
- 启动Tomcat,访问你的servlet,在浏览器的地址栏中输入:http://127.0.0.1:8080/myWebSite/hello
方法一:实现servlet接口
servlet接口中公有五个方法,init()、getServletConfig()、getServletInfo()、service()、destroy()。
编写类实现servlet接口,然后实现接口中的五个方法,代码为:
public class Hello implements Servlet{
//该函数用于初始化servlet,类似于类的构造函数,该函数只会被调用一次
public void init(ServletConfig parm1) throws ServletException {
System.out.println("init it!");
}
public ServletConfig getServletConfig() {
// TODO: Add your code here
return null;
}
//这个函数用于处理业务逻辑
//当用户每访问servlet时,都会调用
//req:用于获得客户端(浏览器)信息
//res:用于向客户端(浏览器)返回信息
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
//从res中得到PrintWriter
System.out.println("Service it");
PrintWriter pw = res.getWriter();
pw.println("Hello world!");
}
public String getServletInfo() {
return "";
}
//销毁,释放内存,三种方式会触发destroy
//1. reload该servlet(webApps) 2. 关闭tomcat 3.关机
public void destroy() {
System.out.println("destroy it!");
}
}
方法二:继承GenericServlet
通过GenericServlet去开发servlet,只需要重写service方法,相对来说要简单一些。
public class HelloGen extends GenericServlet{
//重写一个方法service即可
public void service(ServletRequest req, ServletResponse res){
//返回Hello world, generic
try{
PrintWriter pw = res.getWriter();
pw.println("Hello generic");
}
catch(Exception e){
e.printStackTrace();
}
}
}
方法三:继承HttpServlet
通过HttpServlet去开发servlet,需要重写doGet、doPost方法,这是目前用的最多的一种方法。
表单提交数据get请求和post请求的区别:
- 从安全性看get< post。get提交的数据会在浏览器的地址栏显示
- 从提交的内容大小看get< post。get提交的数据不能大于2K,而post提交的数据理论上不受限制,但是实际编程中建议不要大于64K
- 从请求响应速度看get>post。get请求服务器立即处理请求,而post请求可能形成一个队列请求
public class HelloHttp extends HttpServlet{
//处理get请求
public void doGet(HttpServletRequest req, HttpServletResponse res){
//业务逻辑
try{
PrintWriter pw = res.getWriter();
pw.println("hello, Http");
}
catch (Exception e){
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res){
this.doGet(req,res);
}
}
注意
- 每次写好代码之后,需要在web.xml中注册新的servlet ,格式相同,修改名称和路径
<servlet>
<!—给servlet取名,可以随意取名-->
<servlet-name>hello</servlet-name>
<!—指明servlet的路径,就是servlet的包+类名-->
<servlet-class>com.test.Hello</servlet-class>
</servlet>
<servlet-mapping>
<!—给servlet取名,可以随意取名-->
<servlet-name>hello</servlet-name>
<!—浏览器中输入的url,可以随意取名-->
<url-pattern>/hello<url-pattern>
</servlet-mapping>
- 修改了servlet之后,需要在tomcat管理界面reload servlet或者重启tomcat。
参考文献
http://blog.csdn.net/zhiaini06/article/details/52729604
http://blog.csdn.net/jim_007/article/details/53813300
http://blog.csdn.net/pirateleo/article/details/8574973