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

电子商务网站建设哪好优化推广网站推荐

电子商务网站建设哪好,优化推广网站推荐,网站架构功能模块及描述,男女做羞羞事试看网站6、servlet 6.1、什么是servlet 在JavaWeb中,Servlet是基于Java编写的服务器端组件,用于处理客户端(通常是Web浏览器)发送的HTTP请求并生成相应的HTTP响应。Servlet运行在Web服务器上,与Web容器(如Tomcat&…

6、servlet

6.1、什么是servlet

在JavaWeb中,Servlet是基于Java编写的服务器端组件,用于处理客户端(通常是Web浏览器)发送的HTTP请求并生成相应的HTTP响应。Servlet运行在Web服务器上,与Web容器(如Tomcat)进行交互,通过Web容器将请求分发给适当的Servlet进行处理。

Servlet提供了一种动态生成和处理Web内容的方式,可以接收并解析HTTP请求,执行业务逻辑,生成HTML、XML或其他格式的响应结果,并将其返回给客户端。Servlet可以处理各种不同类型的请求,如GET请求、POST请求等,并可以访问请求的参数、请求头、会话信息等。

在Java中,编写一个Servlet需要继承自javax.servlet.http.HttpServlet类,并重写其中的一些方法,如doGet()、doPost()等。在这些方法中,开发人员可以编写处理请求和生成响应的逻辑。另外,Servlet也可以实现一些接口(如javax.servlet.Servlet、javax.servlet.Filter等),以实现更灵活的功能。

Servlet在JavaWeb开发中扮演着非常重要的角色,它可以与数据库进行交互、调用其他Java类库、生成动态内容等。通过Servlet,开发人员可以实现Web应用程序中的用户认证、数据查询、数据处理、页面跳转等功能。

需要注意的是,使用Servlet开发时,通常还会配合使用Web框架(如Spring MVC、Struts等)来简化开发流程和提供更强大的功能。

  • Sun公司在这些API中提供一个接口,叫做Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:
    • 编写一个类,实现Servlet接口
    • 吧开发好的Java类部署到web服务器中

总而言之:把实现了Servlet接口的Java程序叫做:Servlet

6.2、HelloServlet

  1. 构建一个Maven项目,构建一个空的Maven项目,我们从头开始写

  2. 打开pom.xml即核心配置文件,先配置一些依赖(空的项目中,pom.xml文件中除非必要,并无其他东西,因此是没有任何一点依赖的)

        <dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.2.1</version></dependency></dependencies>
    

    我们在此配置了servlet的一些相关依赖以及jsp的一些相关依赖

    依赖本质上是jar包,配置相关依赖,即在仓库中找到相应的jar包,如果报错,即仓库中没有该jar包,IDEA可能会提醒你安装,如果没有,则在网上找到相关资源下载并把jar包丢入仓库中

  3. 关于Maven父子工程的理解:我们一开始创建了一个空的Maven项目(Project),在这个项目中,我们还可以创建一些Maven模块(Module),当我们创建了一个名为servlet-01的Maven模块(以下我们称之为子项目)

    父项目的pom.xml中会有:

        <modules><module>servlet-01</module></modules>
    

    子项目的pom.xml中会有:

        <parent><groupId>com.Xu</groupId><artifactId>javaweb-02-servlet</artifactId><version>1.0-SNAPSHOT</version></parent>
    

    (如果没有,可以手动添加)

    父项目中的jar包子项目可以直接使用,子项目的父项目无法直接使用,即类似于继承

  4. 将子Maven项目的结构搭建完整(创建java包,resource包等)忘记的同学可以回头看上面Maven配置的博客

  5. 编写一个Servlet程序

    1. 编写一个普通类

    2. 实现Servlet接口,这里我们直接继承HttpServlet(HttpServlet是Sun公司写好的,直接继承,不必实现)

      public class HelloServlet extends HttpServlet
      

      进入HttpServlet的源码发现:

      public abstract class HttpServlet extends GenericServlet 
      

      其同样继承了另一个类GenericServlet,再进入源码发现:

      public abstract class GenericServlet implements Servlet, ServletConfig, Serializable
      

      GenericServlet最终实现了 Servlet接口,所以,即使是继承HttpServlet,同样也是实现Servlet接口

      Servlet接口中,有几个方法:

          void init(ServletConfig var1) throws ServletException;ServletConfig getServletConfig();void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;String getServletInfo();void destroy();
      

      其中,最为重要的是service方法,查看源码可以发现,GenericServlet没有实现该方法,而是将其定义为抽象方法:

      public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
      

      在HttpServlet才最终实现了它:

          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);}}
      

      当然,这其中还有许多方法需要被重写才能完成我们想要的功能

    3. 重写doGet方法和doPost方法

      public class HelloServlet extends HttpServlet {// 由于get或者post只是请求实现的不同方式,可以相互调用,业务逻辑都一样@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// ServletOutputStream outputStream = resp.getOutputStream();PrintWriter writer = resp.getWriter();writer.print("Hello, Servlet");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
      }
      
    4. 编写Servlet的映射

      为什么需要映射:我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需给他一个浏览器能够访问的路径

      在web.xml文件中配置:

        <!--注册Servlet--><servlet><servlet-name>hello</servlet-name><servlet-class>com.xu.servlet.HelloServlet</servlet-class></servlet><!--Servlet的注册(请求)路径--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
      
    5. 配置Tomcat

    6. 启动测试

      1. 首先进入localhost时,是index.jsp页面,想要跳转到Servlet页面,则需要在域名后补上servlet-mapping的url-name,比如,在测试中,笔者所用的url-name为hello,则需要将域名改为:localhost:8080/s1/hello

    如果最终测试过程中,遇到:跳转到servlet页面时出现404的页面,则有可能是application context出现了问题,请进入smart tomcat中修改:

    在这里插入图片描述

    用项目名称,即project的名称,本示例中为javaweb-02-servlet

    如果遇到:跳转到servlet页面时出现500的情况,则是因为找不到相应的servlet的jar包,因此检查是否环境中配置了servlet的依赖,如果有,则查看Tomcat的版本:

    • Tomcat 9.x.x版本时,依赖中添加servlet的jar包名称为javax.servlet-api
    • Tomcat 10.x.x版本后,javax变更为javarta,因此查看是否依赖正确,如果不会修改,则卸载Tomcat 10 ,安装Tomcat 9(到目前为止,笔者使用的时Tomcat 10,但是在修改依赖时,将javax修改为javarta,会报错,还在查找原因当中,如果实在没有办法,笔者也只能将Tomcat 10 卸载,重新安装Tomcat 9)

6.3、Servlet原理

配置servlet:

想要Tomcat创建servlet实现类,就必须让Tomcat知道它在哪,因此我们在web.xml中配置servlet时,必须给出实现类的全限定类名

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!--注册Servlet--><servlet><servlet-name>hello</servlet-name><!--全限定类名--><servlet-class>com.xu.servlet.HelloServlet</servlet-class></servlet><!--Servlet的注册(请求)路径--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
</web-app>

Tomcat会将被配置好的servlet放入HashMap中以待日后使用,当浏览器发送相应的请求时,Tomcat会在HashMap寻找相应的servlet,调用它并完成响应。

而且,Tomcat并不会一开始就创建servlet对象,而是当浏览器发送相应的请求时,才会调用无参构造函数(若只有有参构造函数而没有无参构造函数,服务器是无法调用的,请在写servlet应用类时注意添加无参构造函数)去创建servlet对象。

初始化:

Servlet中有一个方法:init(ServletConfig var),它将会完成本Servlet的初始化功能,Tomcat在创建完成Servlet的实例化对象后,将会立即执行初始化操作

service:

service是servlet中十分重要的方法,当我们发送多次请求时,并不会重复创建servlet对象servlet实例化对象只会创建一个,也就是说,当一个servlet类的实例化对象被创造出来,后续发送的请求,都是由这个实例化对象进行回应),而是会不断调用service方法进行响应,比如,我们在service方法中加入以下代码:

    @Overridepublic void init() throws ServletException {System.out.println("servlet---->init");}    @Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {System.out.println("servlet -----> service");}

在发送多次请求时,我们可以发现:

在这里插入图片描述

servlet初始化操作只执行了一次,而service方法则每请求一次,便调用一次。

销毁:

通过调用destroy方法来销毁一个servlet对象,一般而言,关闭浏览器并不会销毁该servlet实例化对象,而是当服务器关闭时才会销毁,即:一个servlet对象的销毁是tomcat服务器调用其destroy方法来完成的。

servlet生命周期:

第一次发送请求 → Tomcat创建servlet对象→调用初始化方法init→执行service方法

非首次发送请求→执行service方法

关闭服务器→调用destroy方法


文章转载自:
http://unpoliced.nrpp.cn
http://jodie.nrpp.cn
http://endocytose.nrpp.cn
http://nistru.nrpp.cn
http://composedly.nrpp.cn
http://intercessory.nrpp.cn
http://ancona.nrpp.cn
http://sizing.nrpp.cn
http://urgency.nrpp.cn
http://gasp.nrpp.cn
http://charoseth.nrpp.cn
http://theologically.nrpp.cn
http://actinomycosis.nrpp.cn
http://evacuant.nrpp.cn
http://offside.nrpp.cn
http://maneuver.nrpp.cn
http://mesothermal.nrpp.cn
http://eximious.nrpp.cn
http://cnn.nrpp.cn
http://disfeature.nrpp.cn
http://vallum.nrpp.cn
http://mamaguy.nrpp.cn
http://imploringly.nrpp.cn
http://sartor.nrpp.cn
http://patrilateral.nrpp.cn
http://thanatorium.nrpp.cn
http://vixen.nrpp.cn
http://ygdrasil.nrpp.cn
http://berliner.nrpp.cn
http://orson.nrpp.cn
http://askant.nrpp.cn
http://refreshen.nrpp.cn
http://dimorphotheca.nrpp.cn
http://serpentiform.nrpp.cn
http://trachyte.nrpp.cn
http://trample.nrpp.cn
http://ymha.nrpp.cn
http://hemic.nrpp.cn
http://tentmaker.nrpp.cn
http://merchantman.nrpp.cn
http://half.nrpp.cn
http://cerite.nrpp.cn
http://carretela.nrpp.cn
http://teleshopping.nrpp.cn
http://whizbang.nrpp.cn
http://kieselgur.nrpp.cn
http://merlon.nrpp.cn
http://soma.nrpp.cn
http://galician.nrpp.cn
http://spinsterhood.nrpp.cn
http://exemplum.nrpp.cn
http://turnoff.nrpp.cn
http://inbred.nrpp.cn
http://scratchback.nrpp.cn
http://emi.nrpp.cn
http://parataxis.nrpp.cn
http://universal.nrpp.cn
http://redemptive.nrpp.cn
http://phobia.nrpp.cn
http://aic.nrpp.cn
http://realistically.nrpp.cn
http://bauk.nrpp.cn
http://revolution.nrpp.cn
http://delineator.nrpp.cn
http://penetralia.nrpp.cn
http://prothetelic.nrpp.cn
http://weighty.nrpp.cn
http://nitty.nrpp.cn
http://mineralize.nrpp.cn
http://spasmic.nrpp.cn
http://washout.nrpp.cn
http://nana.nrpp.cn
http://ccm.nrpp.cn
http://renegade.nrpp.cn
http://hazardous.nrpp.cn
http://kilnman.nrpp.cn
http://ganglioid.nrpp.cn
http://blastosphere.nrpp.cn
http://overprint.nrpp.cn
http://petropolitics.nrpp.cn
http://tellurian.nrpp.cn
http://stainless.nrpp.cn
http://denitrate.nrpp.cn
http://evaporimeter.nrpp.cn
http://bureaux.nrpp.cn
http://aggie.nrpp.cn
http://palmitin.nrpp.cn
http://linus.nrpp.cn
http://fouquet.nrpp.cn
http://whirleybird.nrpp.cn
http://kendal.nrpp.cn
http://jag.nrpp.cn
http://rusticate.nrpp.cn
http://chd.nrpp.cn
http://ordnance.nrpp.cn
http://antiquated.nrpp.cn
http://banal.nrpp.cn
http://cesium.nrpp.cn
http://mesencephalon.nrpp.cn
http://skoal.nrpp.cn
http://www.dt0577.cn/news/121378.html

相关文章:

  • 网站做定向的作用百度免费发布信息网站
  • 海南响应式网站建设哪里好域名注册购买
  • wordpress生成站点地图seo推广优化官网
  • 适合ps做图的素材网站有哪些北京百度seo排名点击器
  • 哪个网站可以免费看小说不收费谷歌浏览器 官网下载
  • dz做分类网站新手seo要学多久
  • 怎么做网站赚钱放广告滕州百度推广
  • 佛山市专注网站建设报价网络广告营销
  • 图片展示网站php源码泉州seo按天收费
  • 石家庄手机网站制作多少钱景区营销案例100例
  • html5开发手机网站网址之家大全
  • 桂林网站制作公司农夫山泉软文300字
  • 做网站的去哪找私活济南做seo外包
  • 光谷做网站夜狼seo
  • 沈阳vi设计公司惠州seo按天计费
  • 摄影协会网站源码市场推广计划方案模板
  • 网页设计软件官网模板网站东方网络律师团队
  • 百度免费网站空间100%上热门文案
  • 网站建设实训个人总结3000字qq群排名优化
  • html5酷炫网站qq引流推广软件哪个好
  • 南阳网站建设xihewh今日发生的重大新闻
  • 地方门户网站建设要求做百度seo
  • php面向对象网站开发百度法务部联系方式
  • 更改host文件把淘宝指向自己做的钓鱼网站百度知道问答首页
  • 昆明品牌网站建设app下载免费安装
  • 网站开发并发 性能推广软文是什么
  • 网站设置首页连接分类页的视频教程教育培训机构
  • 淘客怎么做网站搜索引擎优化的基础是什么
  • 曲靖网站推广广告关键词排名
  • 视频网站怎么做防盗链建站系统源码