servlet简单示例+调用webservice
1:servlet的简单示例
1.1:servlet是什么?
Servlet(Server Applet),全称 Java Servlet,暂无中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
以上是百度百科里面的解释,我这是笔记,是写着初学者看得,所以只要记住两点
(1):
实现了servlet接口;
(2):
接受客户端(浏览器)的请求并作出反应。
1.2:创建第一个servlet
新建一个类,类名自取,要注意的是实现servlet接口,图中红色标注部分
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class servlet implements Servlet {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
//后台日志记录
System.out.println("servlet开始响应请求!");
//页面返回结果
arg1.getOutputStream().write("<font color='red'><input type='text' value='hello world!' /></font>".getBytes());
}
}
我们可以看到生成的代码里实现 了五个方法,先聚焦最后一个service()方法,其他方法在servlet生命周期里讲。arg1是响应的结果,我们给他输出一个红色的“hello world”字样。
servlet写好了接下来就是配置web.xml文件了(不配置tomcat怎么知道如何去构建servlet呢,服务器又怎么调用呢)
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>MyServlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<!-- 自己給servlet取得名字 -->
<servlet-name>servlet</servlet-name>
<!-- servlet的路徑 -->
<servlet-class>com.ustcinfo.servlet.servlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 與上面的servlet-name對應 -->
<servlet-name>servlet</servlet-name>
<!-- 訪問servlet的地址,自己取 -->
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
</web-app>
主要配置两个东西<servlet>和<servlet-mapping>,前者是tomcat用来构建servlet,后者是映射地址让浏览器请求能发送到正确的位置。
启动服务器,浏览器里输入地址:http://localhost:8080/MyServlet/hello1,结果如下:
简单的servlet就构建好了!
1.3:servlet的生命周期
接下来说一下servlet的生命周期:上文提到了我们在构建servlet类的时候实现了servlet接口,里面有五个方法:
destroy():销毁servlet,停掉服务器的时候调用
getServletConfig():获取servlet配置信息。
getServletInfo():获取servlet的属性信息。
init(ServletConfig config):初始化信息。
service(ServletRequest request, ServletResponse response):响应请求。
所以不难看出在我们启动服务器的调用某个servlet的时候的过程是:
init(ServletConfig config)————service(ServletRequest request, ServletResponse response)————destroy()
其他两个是穿插在其中的,并不影响servlet的生命周期。
ps:其实servlet是可以在服务器启动时就创建,不用非得等到servlet调用才创建。这里就需要在web.xml的servlet中配置一个<load-on-startup>参数为int类型,表示的意思是第几个自动创建的servlet的意思。
1.4:HttpServlet
前面讲的是基本的servlet,servlet一共有三种,而最常用的一种就是Httpservlet,基本百分之九十都是它。
右击项目new----servlet可以看到上图所示内容,注意实现的接口是HttpServlet(相当于在servlet上封装了一个http协议)。
然后往下next,可以设置我们的访问地址(这里有这个设置是因为我们用的是注解的方式),接着next可以选择我们要重写的方法(一般来说只需要重写两种doGet,doPost,这两个区别在于,浏览器的访问方式是post还是get)。
下面通过servlet调用web服务来详细介绍HttpServlet.
2:通过servlet调用web服务
2.1创建webservice
可见我的上一篇博客:
2.2调用的实现
创建好webservice并解析WSDL文档后,将生成的java文件(class文件删除)拷贝到我们servlet所在的项目中。
注意:上面我们已经介绍了用web.XML配置,这里我们采用注解的方式。一处表示的是ServletContext里的参数,我们暂时用不上。二处是url-mapping也就是容器创建好servlet后给外界提供的访问servlet的地址。
上图我们可以看到实现的额方法可能跟之前的servlet有点不一样,但是大家一定听过post,get方式。这里的doPost和doGet就是分别处理这些方式的,如果在前台提交表单的时候没有说明方式,那么默认的就是get方式。
httpServletMain.java
package com.ustcinfo.client;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(asyncSupported = true, urlPatterns = { "/servletService" },loadOnStartup=1)
public class httpServletMain extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
System.out.println("創建servlet!");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//构建我们需要的服务对象
HelloWebServiceService hw = new HelloWebServiceService();
HelloWebService hws = hw.getHelloWebServicePort();
String name = request.getParameter("name");
String rs = hws.helloWord(name);
response.getOutputStream().write(rs.getBytes());
}
}
这里我们重写了doPost方法,我们在前台准备以post的方式发送数据。
接下来写我们前台的jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="servletService" method="post">
<input type="text" name="name" />
<input type="submit" value="submit"/>
</form>
</body>
</html>
这个jsp里有一个form表单,表单的action是servletService,这个跟我们建立httpServlet是填写的URL-Mapping是一致的,这样我们才能准确的发送我们表单到正确的位置。
到这基本就完成了,我们首先启动我们的服务,然后部署我们的servlet到tomcat中。
输入网址:http://localhost:8080/MyServlet/service.jsp
随便输入一行字符串:如:chenQQQ.然后提交
就可以看到我们返回的结果了,嘻嘻。