当前位置: 首页 > news >正文

网站建站代理威海互联网推广

网站建站代理,威海互联网推广,大庆企业网站建设公司,什么是营销型网站呢Servlet Servlet是sun公司开发的动态web技术 sun在API中提供了一个接口叫做 Servlet #xff0c;一个简单的Servlet 程序只需要完成两个步骤 编写一个实现了Servlet接口的类 把这个Java部署到web服务器中 一般来说把实现了Servlet接口的java程序叫做#xff0c;Servlet 初步…Servlet Servlet是sun公司开发的动态web技术 sun在API中提供了一个接口叫做 Servlet 一个简单的Servlet 程序只需要完成两个步骤 编写一个实现了Servlet接口的类 把这个Java部署到web服务器中 一般来说把实现了Servlet接口的java程序叫做Servlet 初步认识Servlet Servlet接口sun公司有两个默认的实现抽象类HttpServletGenericServlet 看看Serlvet接口是怎么在这两个类中实现的 Servlet接口 package javax.servlet;import java.io.IOException;public interface Servlet {void init(ServletConfig var1) throws ServletException;ServletConfig getServletConfig();void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;String getServletInfo();void destroy(); } 这个接口里有五个抽象方法 init(ServletConfig var1)getServletConfig()service(ServletRequest var1, ServletResponse var2)getServletInfo()destroy() 这五个方法建立起了Servlet的基本框架初始化、获取配置、服务功能、获取状态信息、销毁 也体现了servlet的生命周期 Servlet 初始化后调用 init () 方法。Servlet 调用 service() 方法来处理客户端的请求。Servlet 销毁前调用 destroy() 方法。最后Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。 其中比较值得观察的是service方法 GenericServlet package javax.servlet;import java.io.IOException; import java.io.Serializable; import java.util.Enumeration;public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {private static final long serialVersionUID 1L;private transient ServletConfig config;public GenericServlet() {}public void destroy() {}public String getInitParameter(String name) {return this.getServletConfig().getInitParameter(name);}public EnumerationString getInitParameterNames() {return this.getServletConfig().getInitParameterNames();}public ServletConfig getServletConfig() {return this.config;}public ServletContext getServletContext() {return this.getServletConfig().getServletContext();}public String getServletInfo() {return ;}public void init(ServletConfig config) throws ServletException {this.config config;this.init();}public void init() throws ServletException {}public void log(String message) {this.getServletContext().log(this.getServletName() : message);}public void log(String message, Throwable t) {this.getServletContext().log(this.getServletName() : message, t);}public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;public String getServletName() {return this.config.getServletName();} } 还是那五个抽象方法 init(ServletConfig var1)getServletConfig()service(ServletRequest var1, ServletResponse var2)getServletInfo()destroy() 可以看到对于service方法这个类并没有做任何的改变只是对初始化和状态信息获取做出了改变 HttpServlet package javax.servlet.http;import java.io.IOException; import java.lang.reflect.Method; import java.text.MessageFormat; import java.util.Enumeration; import java.util.ResourceBundle; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;public abstract class HttpServlet extends GenericServlet {private static final String METHOD_DELETE DELETE;private static final String METHOD_HEAD HEAD;private static final String METHOD_GET GET;private static final String METHOD_OPTIONS OPTIONS;private static final String METHOD_POST POST;private static final String METHOD_PUT PUT;private static final String METHOD_TRACE TRACE;private static final String HEADER_IFMODSINCE If-Modified-Since;private static final String HEADER_LASTMOD Last-Modified;private static final String LSTRING_FILE javax.servlet.http.LocalStrings;private static ResourceBundle lStrings ResourceBundle.getBundle(javax.servlet.http.LocalStrings);public HttpServlet() {}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String protocol req.getProtocol();String msg lStrings.getString(http.method_get_not_supported);if (protocol.endsWith(1.1)) {resp.sendError(405, msg);} else {resp.sendError(400, msg);}}protected long getLastModified(HttpServletRequest req) {return -1L;}protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {NoBodyResponse response new NoBodyResponse(resp);this.doGet(req, response);response.setContentLength();}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String protocol req.getProtocol();String msg lStrings.getString(http.method_post_not_supported);if (protocol.endsWith(1.1)) {resp.sendError(405, msg);} else {resp.sendError(400, msg);}}protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String protocol req.getProtocol();String msg lStrings.getString(http.method_put_not_supported);if (protocol.endsWith(1.1)) {resp.sendError(405, msg);} else {resp.sendError(400, msg);}}protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String protocol req.getProtocol();String msg lStrings.getString(http.method_delete_not_supported);if (protocol.endsWith(1.1)) {resp.sendError(405, msg);} else {resp.sendError(400, msg);}}private Method[] getAllDeclaredMethods(Class? extends HttpServlet c) {Class? clazz c;Method[] allMethods;for(allMethods null; !clazz.equals(HttpServlet.class); clazz clazz.getSuperclass()) {Method[] thisMethods clazz.getDeclaredMethods();if (allMethods ! null allMethods.length 0) {Method[] subClassMethods allMethods;allMethods new Method[thisMethods.length allMethods.length];System.arraycopy(thisMethods, 0, allMethods, 0, thisMethods.length);System.arraycopy(subClassMethods, 0, allMethods, thisMethods.length, subClassMethods.length);} else {allMethods thisMethods;}}return allMethods ! null ? allMethods : new Method[0];}protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Method[] methods this.getAllDeclaredMethods(this.getClass());boolean ALLOW_GET false;boolean ALLOW_HEAD false;boolean ALLOW_POST false;boolean ALLOW_PUT false;boolean ALLOW_DELETE false;boolean ALLOW_TRACE true;boolean ALLOW_OPTIONS true;for(int i 0; i methods.length; i) {String methodName methods[i].getName();if (methodName.equals(doGet)) {ALLOW_GET true;ALLOW_HEAD true;} else if (methodName.equals(doPost)) {ALLOW_POST true;} else if (methodName.equals(doPut)) {ALLOW_PUT true;} else if (methodName.equals(doDelete)) {ALLOW_DELETE true;}}StringBuilder allow new StringBuilder();if (ALLOW_GET) {allow.append(GET);}if (ALLOW_HEAD) {if (allow.length() 0) {allow.append(, );}allow.append(HEAD);}if (ALLOW_POST) {if (allow.length() 0) {allow.append(, );}allow.append(POST);}if (ALLOW_PUT) {if (allow.length() 0) {allow.append(, );}allow.append(PUT);}if (ALLOW_DELETE) {if (allow.length() 0) {allow.append(, );}allow.append(DELETE);}if (ALLOW_TRACE) {if (allow.length() 0) {allow.append(, );}allow.append(TRACE);}if (ALLOW_OPTIONS) {if (allow.length() 0) {allow.append(, );}allow.append(OPTIONS);}resp.setHeader(Allow, allow.toString());}protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String CRLF \r\n;StringBuilder buffer (new StringBuilder(TRACE )).append(req.getRequestURI()).append( ).append(req.getProtocol());Enumeration reqHeaderEnum req.getHeaderNames();while(reqHeaderEnum.hasMoreElements()) {String headerName (String)reqHeaderEnum.nextElement();buffer.append(CRLF).append(headerName).append(: ).append(req.getHeader(headerName));}buffer.append(CRLF);int responseLength buffer.length();resp.setContentType(message/http);resp.setContentLength(responseLength);ServletOutputStream out resp.getOutputStream();out.print(buffer.toString());}protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String method req.getMethod();long lastModified;if (method.equals(GET)) {lastModified this.getLastModified(req);if (lastModified -1L) {this.doGet(req, resp);} else {long ifModifiedSince req.getDateHeader(If-Modified-Since);if (ifModifiedSince lastModified) {this.maybeSetLastModified(resp, lastModified);this.doGet(req, resp);} else {resp.setStatus(304);}}} else if (method.equals(HEAD)) {lastModified this.getLastModified(req);this.maybeSetLastModified(resp, lastModified);this.doHead(req, resp);} else if (method.equals(POST)) {this.doPost(req, resp);} else if (method.equals(PUT)) {this.doPut(req, resp);} else if (method.equals(DELETE)) {this.doDelete(req, resp);} else if (method.equals(OPTIONS)) {this.doOptions(req, resp);} else if (method.equals(TRACE)) {this.doTrace(req, resp);} else {String errMsg lStrings.getString(http.method_not_implemented);Object[] errArgs new Object[]{method};errMsg MessageFormat.format(errMsg, errArgs);resp.sendError(501, errMsg);}}private void maybeSetLastModified(HttpServletResponse resp, long lastModified) {if (!resp.containsHeader(Last-Modified)) {if (lastModified 0L) {resp.setDateHeader(Last-Modified, lastModified);}}}public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {if (req instanceof HttpServletRequest res instanceof HttpServletResponse) {HttpServletRequest request (HttpServletRequest)req;HttpServletResponse response (HttpServletResponse)res;this.service(request, response);} else {throw new ServletException(non-HTTP request or response);}} } 可以看到这层的类实现了service方法的处理每次服务器接收到一个 Servlet 请求时服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型GET、POST、PUT、DELETE 等并在适当的时候调用 doGet、doPost、doPutdoDelete 等方法。 但是它默认处理并不是我们所需要的所以我们自己写的java类就是要重写这些方法。 现在这个简单的Servlet基础使用链就明了了 RMI RMI (Java Remote Method Invocation) Java 远程方法调用是一种允许一个 JVM 上的 object 调用另一个 JVM 上 object 方法的机制 ⼀个RMI Server分为三部分 ⼀个继承了 java.rmi.Remote 的接⼝其中定义我们要远程调⽤的函数⼀个实现了此接⼝的类⼀个主类⽤来创建Registry并将上⾯的类实例化后绑定到⼀个地址 来分析一下这个RMI设计的意图 一个RMI服务器的三个部分一个接口、两个类我理解的它们的作用如下 接口作为远程方法调用的调用目标实现接口的类用来承载接口方法 为什么要有这样一个类 有类就可以序列化序列化之后就可以把一个难以传输的目标变成一个便于传输的流 一个主类作为Registry存在。 打个比方它就像一个车站的售票处一样你来坐车你就要先去它哪里找他买票你有了对应的票才能找到、乘坐对应的车。 在RMI整体流程它也差不多扮演这个角色客户端去向Registry请求某个方法Registry返回一个stub给客户端客户端在通过stub种的信息找到对应的地址端口建立TCP连接 RMI简单流程 一个简单的demo 服务端 package rmilearn;import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject;public class Learn01 {public static void main(String[] args) throws RemoteException, MalformedURLException {HelloRmi rmi new HelloRmi();LocateRegistry.createRegistry(1099);Naming.rebind(rmi://127.0.0.1:1099/hello,rmi);} }class HelloRmi extends UnicastRemoteObject implements Hello {protected HelloRmi() throws RemoteException {super();}Overridepublic String HelloRm() throws RemoteException {return hello rmi;} } -------------------------------------------------------------------------- package rmilearn;import java.rmi.Remote; import java.rmi.RemoteException;public interface Hello extends Remote {String HelloRm() throws RemoteException; } 客户端 public class client {public static void main(String[] args) throws RemoteException, NotBoundException {Registry re LocateRegistry.getRegistry(localhost,1099);Hello h (Hello) re.lookup(hello);String s h.HelloRm();System.out.println(s);} }
http://www.tj-hxxt.cn/news/130514.html

相关文章:

  • dede网站百度统计怎么做wordpress如何改成中文
  • WordPress 文章 iframe长沙网络seo公司助企业突破
  • 顺通建设集团有限公司 网站wordpress评论头像问题
  • 域名备案 网站名称网页视频下载到电脑
  • 怎么做网站vip并且收费WordPress购物车纯代码
  • 10有免费建网站新公司网站建设方案
  • wordpress 知名站点主图模板
  • 惠州建网站服务苏州app定制开发
  • 企业做网站排名免费微网站哪个好用
  • wordpress建站流量外综服务平台哪里做网站
  • 网站推广策略和效果评价wordpress name增加链接
  • 南京网站建设学习沈阳网站优化
  • 网站是怎么做出来的阜新百姓网免费发布信息
  • 人力招聘网站建设目的腾讯云服务器备案
  • 做网站业务好干吗网站后台无法设置
  • wordpress 建企业网站朝阳区手机网站制作服务
  • 绍兴市建设银行网站网站建设公司需要具备什么
  • p网站建设seo优化包括
  • 在线注册网站深圳市龙华区大浪街道
  • 中英文网站 程序要建立网站怎么建立
  • 企业宣传网站案例旅游电子商务网站开发方案
  • 网页制作基础教程visual studio code北京seo公司网站
  • 网站建设服务器技术有哪些东莞网站优化中易
  • 注册网站费用西宁网站建设公司哪家好
  • 免费网站建设价格费用正规app开发价格表
  • 建设工程网站168施工企业会计核算流程
  • 北湖区网站建设公司无锡网站制作建设
  • 海南房地产网站移商网站建设
  • 建设网站的价格腐女喜欢做的网站
  • 营销型网站建设风格设定包括哪些方面如何统计网站访问量