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

重庆网站建设慕枫网站推广经验杂谈

重庆网站建设慕枫,网站推广经验杂谈,青岛提供网站建设哪家便宜,爱淘苗网站开发模式一、Servlet的工作过程 二、Tomcat的初始化 步骤1#xff1a;寻找到当前目录下面所有需要加载的Servlet(也就是类) 步骤2#xff1a;根据类加载的结果创建实例(通过反射)#xff0c;并且放入集合当中 步骤3#xff1a;实例创建好之后#xff0c;调用Servlet的init()方…  一、Servlet的工作过程 二、Tomcat的初始化 步骤1寻找到当前目录下面所有需要加载的Servlet(也就是类) 步骤2根据类加载的结果创建实例(通过反射)并且放入集合当中 步骤3实例创建好之后调用Servlet的init()方法初始化一些属性 步骤4创建TCP的socket并且监听8080端口等待客户端建立连接 步骤5关闭服务器的时候需要调用Servlet的destory()方法 三、Tomcat处理请求 步骤1根据socket构造请求的对象(req)以及响应的对象(resp) 步骤2判断请求的资源是否是一个静态的页面 步骤3根据请求的URL找到处理请求的Servlet 步骤4根据Servlet对象来调用service方法 最后简单概括一下Servlet的生命周期 doPost方法乱码问题: 四、Servlet的核心api HttpServletRequest类 String getRequestURI()和String getRequestURL() String getQueryString()  Enumeration getParameterNames() String getParameter(String name) String getHeader(name) InputStream getInputStream()  String getContextPath() 一、Servlet的工作过程 需要了解的是Sevlet是工作在应用层的是一个应用程序。它是一个运行在用户态的的java进程。 第一步客户端主机生产了http报文然后经过一次封装到达客户端的物理层。然后以光电信号的方式在网络当中传输。        第二步服务端主机在收到了对应的光电信号之后进行了一次数据从物理层到服务端的应用层的一次分用。        第三步服务端计算客户端的响应然后在把数据通过response对象回写给客户端。 二、Tomcat的初始化 步骤1寻找到当前目录下面所有需要加载的Servlet(也就是类) 在这一篇文章当中我们提到了如何把一个项目打包成一个war包。war包当中的文件都是.class为后缀名的。 然后把这一个war包放入到Tomcat的webapps目录下面。双击startup.bat就可以运行Tomcat了。 【Servlet篇2】创建一个web项目_革凡成圣211的博客-CSDN博客Tomcat的web项目https://blog.csdn.net/weixin_56738054/article/details/129265315?spm1001.2014.3001.5501         然后tomcat就会从webapps里找到那些.class对应的Servlet类进行加载。 可以看到经过编译的Servlet都变成了.class结尾的了。 伪代码实现 public void start(){//第一步:通过Tomcat加载所有的.class结尾的文件ClassServlet[] allServletClassesTomcat.load();} 步骤2根据类加载的结果创建实例(通过反射)并且放入集合当中 遍历上面的allServletClasses数组。并且在遍历的过程当中每遍历一个都通过反射创建一个Servlet的实例对象。创建完成之后再次把这些实例添加到Servlet实例的集合当中。 伪代码实现 /***这是一个存放Servlet实例的集合*/private final ListServlet instanceServletnew ArrayList();public void start() throws InstantiationException, IllegalAccessException {//第一步:通过Tomcat加载webapps下面所有的.class结尾的文件ClassServlet[] allServletClassesTomcat.load();//第二步根据类加载的结果创建Servlet的实例for(ClassServlet servletClass:allServletClasses){//根据class加载的结果创建servlet的实例对象Servlet servlet servletClass.newInstance();//把Servlet的实例对象存放到集合当中instanceServlet.add(servlet);}} 步骤3实例创建好之后调用Servlet的init()方法初始化一些属性 伪代码 for(Servlet servlet:instanceServlet){//init方法默认情况下面什么都不做//但是可以初始化一些属性servlet.init();} 前面的文章当中我们提到了如果一个普通的类想成为Servlet那就一定需要首先继承于HttpServlet。 当然也可以由当前的类初始化一些属性那就需要重写init()方法了。 每一个Servlet在启动的时候都仅仅只会调用一次init()方法。 步骤4创建TCP的socket并且监听8080端口等待客户端建立连接 在服务端使用线程池的的方式来处理每一个请求。 在下面的伪代码当中首先使用serverSocket监听8080端口。 然后服务端重复调用accept()方法等待客户端建立连接 并且使用往线程池当中提交任务的方式来处理请求。 伪代码实现 //这个socket是服务端TCP的socket创建的时候默认占用8080端口ServerSocket serverSocketnew ServerSocket(8080);//使用线程池添加任务ExecutorService service Executors.newFixedThreadPool(10);while (true){//每当有一个客户端与当前的服务端建立连接的时候就会监听8080端口//accept()一次Socket socketserverSocket.accept();//向线程池提交任务service.execute(new Runnable() {Overridepublic void run() {doHttpRequest(socket);}});} 其中doHttpRequest方法内部就是解析客户端发送请求的方法。也就是执行doGet被调用的过程。 步骤5关闭服务器的时候需要调用Servlet的destory()方法 伪代码实现 //关闭服务器销毁servletfor(Servlet servlet:instanceServlet){servlet.destroy();} 总览一下Tomcat初始化的过程 三、Tomcat处理请求 刚刚提到了在doHttpServletRequest方法当中是对于socket进行处理的过程。 下面继续通过伪代码的方式来解析一下具体是怎样处理请求的。 步骤1根据socket构造请求的对象(req)以及响应的对象(resp) 对于request首先读取socket当中的数据,然后再按照HTTP协议的格式来返回。  对于response仅仅只是构造了一个空的对象还没有填充响应的信息 伪代码  private void doHttpRequest(Socket socket) {//对于request,首先读取socket当中的数据,然后再按照HTTP协议的格式来返回HttpServletRequest requestHttpServletRequest.parse(socket);//构造一个没有填充数据是responseHttpServletResponse responseHttpServletResponse.build(socket);} 步骤2判断请求的资源是否是一个静态的页面 伪代码 如果请求的资源是一个静态的页面例如https:....../.html这样的页面。那么就读取文件的内容并且把文件的内容构造的resp对象当中。 【网络原理9】HTTP响应篇_革凡成圣211的博客-CSDN博客HTTP响应HTTP状态码https://blog.csdn.net/weixin_56738054/article/details/129208502?spm1001.2014.3001.5502         在HTTP响应篇这一篇文章当中提到了HTTP响应头当中有一个属性代表的是返回的资源的类型(content type属性)。如果是一个静态的html页面那么这个类型的值就是test/html //访问的资源是一个静态的页面if(file.exists()){//通过response返回这一个页面return;} 步骤3根据请求的URL找到处理请求的Servlet 伪代码 //通过请求的URL路径返回Tomcat加载的对应的那一个Servlet Servlet insfindInstance(request.getRequestURL()); 例如一个请求是localhost:8080/hello106/hello。 那么这个hello代表的就是一个Servlet。 步骤4根据Servlet对象来调用service方法 伪代码 try {//调用service方法ins.service(request,response);}catch (Exception e){} 其实在service方法内部就是根据request的请求来判断当前的请求的方法是属于get还是post 如果是get请求那么就交给doGet方法来进行处理。 如果是post请求那么就交给doPost方法来及逆行处理。 下面通过一张图来总览一下Tomcat处理请求的各个步骤 最后简单概括一下Servlet的生命周期 当被tomcat初始化的时候调用init方法完成一些属性的初始化操作 当执行具体逻辑的时候调用service方法然后在内部判断是doGet还是doPost方法 当执行完毕的时候调用destroy方法销毁。 doPost方法乱码问题: 在一个类当中首先让一个类继承于HttpServlet这一个类然后重写doPost方法。 并且通过resp.getWriter().write(字符串内容);来在页面上面输出一段话 /*** author 革凡成圣211*/ WebServlet(/method) public class Servlet2 extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write(POST响应);} }然后在前端页面当中通过post来提交请求注意不可以直接在url地址栏当中输入否则默认是get) 但是看到此处的中文出现了乱码 首先分析一下在当前的场景当中字符串生成的两个环节 环节1生成(idea里面通过硬编码的方式把这个字符串写进去)   环节2展示(浏览器把这个字符串显示到控制台当中) 如果以上的两个操作不一致那么就比较容易出现乱码。 对于环节2浏览器展示的时候一般都是默认使用windows简体的中文版默认是gbk。 对于环节1idea编码的方式一般都是使用utf-8。 为了统一idea和浏览器的编码方式可以改变浏览器的读取的编码规则让浏览器按照utf-8来读取。 /*** author 革凡成圣211*/ WebServlet(/hello) public class HelloServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应头的响应格式以及字符集编码方式resp.setContentType(text/html; charsetutf8);resp.getWriter().write(POST响应);} } 也就是把HTTP响应头当中的两个键值对一个是content-type另外一个是charset。 不过也有更简单的方式来发送post请求那就是使用postman。 HttpServletRequest类 每一个HttpServletRequest代表一个HTTP请求。也就是一个HTTP请求当中包含什么内容那么一个HttpServletRequest就封装了什么内容。 在这一篇文章当中我们提到了使用Fiddler抓包的时候提到了一个HTTP请求是由三部分组成的【网络原理7】认识HTTP_革凡成圣211的博客-CSDN博客HTTP抓包Fiddler的使用https://blog.csdn.net/weixin_56738054/article/details/129148515?spm1001.2014.3001.5502 第一部分请求行(URL)    第二部分请求头(多组键值对)    第三部分请求的body 那么通过一个HttpServletRequest同样也可以获取到一个HTTP请求当中的各类信息。 下面介绍几个HttpServletRequest的几个常用方法: String getRequestURI()和String getRequestURL() 假如我想访问的资源是http://localhost:8080/ServletLearning_war_exploded/hello 方法名称返回含义String getRequestURI()/ServletLearning_war_exploded/hello除了域名端口号往后的内容也就是需要访问的具体是哪一个文件String getRequestURL()http://localhost:8080/ServletLearning_war_exploded/hello一个完整的请求路径需要注意的是无论是URI还是URL请求路径当中如果包含了queryString(查询字符串) 那么都无法在上述两个方法当中返回。 String getQueryString()  这个方法仅仅在URL地址栏当中包含queryString的时候才会生效。 假如我想访问呢的URL地址为 http://localhost:8080/ServletLearning_war_exploded/hello?key666 可以看到在上述的URL当中携带了一个queryString那就是key666。 所以上述方法返回的就是 key666这一个字符串 Enumeration getParameterNames() 也是在请求栏当中存在queryString的时候生效。得到的所有key都是以枚举的方式来列举的 String getParameter(String name) 根据根据queryString的key来获取到value。 String getHeader(name) 这一个方法是获取HTTP请求头当中多组键值对中其中以name为key的value。 例如 req.getHeader(Content-Type) 那么这个方法就是返回Content-Type的值是什么 例如在上述的方法当中返回的内容就是:application/x-www-form-urlencoded InputStream getInputStream()  可以通过这个输入流对象读取到HTTP请求的body部分的内容。 String getContextPath() 这一个方法返回的是一个项目的名称 例如一个URL请求为:http://localhost:8080/ServletLearning_war_exploded/hello 那么返回的内容就是/ServletLearning_war_exploded
http://www.hkea.cn/news/14374003/

相关文章:

  • 管理系统开发网站权重优化
  • 做网站能传电影网站多少钱广东建设厅官网证件查询
  • 做教育培训网站公司郑州的网站建设公司哪家好
  • 电子商务网站开发教程课后答案网站空间免费吗
  • 网站建设移动端建站cms
  • 淘宝网站建设那么便宜韶关市住房和城乡建设部网站
  • 沭阳网站建设方案网站建立方案
  • 聊城网站建设策划建设公司电商快速开发平台
  • 宜宾网站建设08keji多用户商城数据库设计
  • 网站空间和数据库如何做自己的小说网站
  • 网站主持深圳网页制作推广排名
  • 上传电影网站源码wordpress淘宝值得买
  • 网站发布北京手机网站建设公司
  • 网站开发案例中国新闻军事报道
  • 西安网站建设维护做汽车导航仪在什么网站找客户
  • 手机网站seo怎么做完全备份wordpress
  • 正规的手游代理平台湖南关键词优化排名推广
  • 金华网站制作案例企业管理考研院校推荐
  • 网站建站网站怎么样计算机办公软件培训班
  • 360网站名片怎么做的天华建筑设计有限公司
  • 深圳团购网站设计搭建网站的六个基本步骤流程
  • 大学生作业代做网站淘宝运营课程
  • 阿里巴巴国际站工作怎么样海关数据查询平台官网
  • 东莞网站建设推广哪家好上海比较好的公司排名
  • 如何加快门户网站建设方案wordpress默认后台密码
  • 目前做汽配的网站有哪些郑州哪家网站建设好
  • 建筑工程网官方网站wordpress 虚拟流量
  • 建设工程规范在哪个网站发布浙江网
  • 电商网站建设公司哪家好重庆市建设工程信息网质量监督
  • 马克 扎克伯格大学做的网站全运会网站建设方案