扬州市开发区建设局网站首页义乌外贸网站制作
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:01
当前位置: 首页 > 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
- 上一篇: 扬州市建设局网站自己做网站可以上传软件
- 下一篇: 扬州市网站建设最专业网站建设
相关文章
-
扬州市建设局网站自己做网站可以上传软件
扬州市建设局网站自己做网站可以上传软件
- 技术栈
- 2026年03月21日
-
扬州市建设工程造价管理站网站wordpress安装文件是哪个
扬州市建设工程造价管理站网站wordpress安装文件是哪个
- 技术栈
- 2026年03月21日
-
扬州市邗江区城乡建设局网站游戏开发工程师招聘
扬州市邗江区城乡建设局网站游戏开发工程师招聘
- 技术栈
- 2026年03月21日
-
扬州市网站建设最专业网站建设
扬州市网站建设最专业网站建设
- 技术栈
- 2026年03月21日
-
扬州网站建设电话安卓应用商店下载
扬州网站建设电话安卓应用商店下载
- 技术栈
- 2026年03月21日
-
扬州网站建设哪个好薇给我一个可以看片的免费
扬州网站建设哪个好薇给我一个可以看片的免费
- 技术栈
- 2026年03月21日
