加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

[Java拾遗三]JavaWeb基础之Servlet

发布时间:2020-12-14 06:16:00 所属栏目:Java 来源:网络整理
导读:1,servlet介绍 ??????? servlet是一项动态web资源开发技术.??????? 运行在服务器端.??????? 作用:处理业务逻辑,生成动态的内容,返回给浏览器.??????? 本质就是一个类???? servlet的入门??????? 1.编写servlet(类)--- 继承HttpServlet??????? 2.编写关系--- w

1,servlet介绍??????? servlet是一项动态web资源开发技术.??????? 运行在服务器端.??????? 作用:处理业务逻辑,生成动态的内容,返回给浏览器.??????? 本质就是一个类???? servlet的入门??????? 1.编写servlet(类)--- 继承HttpServlet??????? 2.编写关系--- web.xml(在WEB-INF下)??????? 3.访问:??????????? 路径:??? servlet的体系结构及其常见api??????? Servlet-- 接口??????????? |??????????? |??????? GenericServlet---(抽象类)??????????? |??????????? |??????? HttpServlet--(抽象类)??????? ??????? 常用的方法:??????????? servlet的常用方法:??????????????? void init(ServletConfig):初始化方法??????????????? void service(ServletRequest,ServletResponse):服务--处理业务逻辑??????????????? void destroy():销毁方法??????????????? ??????????????? ServletConfig getServletConfig():返回一个servlet的配置对象??????????????? String getServletInfo() :返回是servlet一些信息,比如作者 版本??????????? ??????????? GenericServlet的常用方法:??????????????? 实现了除了service方法之外的所有方法??????????????? init():自己重写init方法??????????? HttpServlet的常用方法:??????????????? service(HttpServletRequest,HttpServletResponse):服务--处理业务逻辑??????????????? doGet(HttpServletRequest,HttpServletResponse):处理get请求的??????????????? doPost(HttpServletRequest,HttpServletResponse):处理post请求的? ? 代码示例:

HelloWorldServlet System.out.println("hello world servlet" }
HelloWroldServlet /helloWorld

<span style="color: #0000ff;"><<span style="color: #800000;">servlet<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">servlet-name<span style="color: #0000ff;">>LifeServlet<span style="color: #0000ff;"></<span style="color: #800000;">servlet-name<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">servlet-class<span style="color: #0000ff;">>cn.augmentum.b_life.LifeServlet<span style="color: #0000ff;"></<span style="color: #800000;">servlet-class<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">servlet<span style="color: #0000ff;">>? ? ?

? ? 2,servlet生命周期:?????? 生命周期:什么时候来的,什么时候走的.??????????? void init(ServletConfig):初始化方法???????????????? * 执行时间:默认情况来说,第一次的请求的时候执行???????????????? * 执行次数:一次???????????????? * 执行者:tomcat??????????? void service(ServletRequest,ServletResponse):服务--处理业务逻辑??????????????? * 执行时间:有请求就执行??????????????? * 执行次数:请求一次,执行一次??????????????? * 执行者:tomcat??????????? void destroy():销毁方法??? ??????????????? * 执行时间:服务器正常关闭的时候执行??????????????? * 执行次数:一次??????????????? * 执行者:tomcat??????? servlet是单实例多线程的??????????? 默认的情况下是第一次访问的时候创建(有服务器创建),每出现一次请求,创建一个线程,用来处理请求,??????????? 直到服务器正常关闭或者项目移除的时候servlet销毁?? url-pattern编写??????? 1.完全匹配,----(servlet最常用的)以"/"开头??????????? 例如:/a/b/c/hello??????? 2.目录匹配 以"/"开头,以"*"结尾(filter常用的)??????????? 例如:/a/*??????? 3.后缀名匹配 以"*"开头? ??????????? 例如:? *.do?? *.jsp??????? ??????? 优先级:??????????? 目录匹配>后缀名匹配??????? ??????? 有如下的一些映射关系:??????????? Servlet1 映射到 /abc/* ??????????? Servlet2 映射到 /*??????????? Servlet3 映射到 /abc ??????????? Servlet4 映射到 *.do ??????? 问题:??????????? 当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应??????????????? Servlet引擎将调用Servlet1。??????????? 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应??????????????? Servlet引擎将调用Servlet3。??????????? 当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应??????????????? Servlet引擎将调用Servlet1。??????????? 当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应??????????????? Servlet引擎将调用Servlet2.??????????? 当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应??????????????? Servlet引擎将调用Servlet2。???????? tomcat的defalutservlet处理别的servlet处理不了的请求. load-on-startup??????? 在servlet标签下??????? 改变servlet初始化时机.??????? 若值>=0的时候,servlet会随着服务器的启动而创建.??????? 值越小,优先级越高??? 浏览器的路径编写:??????? 1.浏览器直接输入??????? 2.a标签??????? 3.location.href??????? 4.表单提交??????? ??????? 路径的写法:??????????? 1.绝对路径??????????????? 带协议的绝对路径--一般访问站外资源的时候用不带协议的绝对路径--站内资源??????????????????? /servletDemo/helloWorld??????????? 2.相对路径??????????????? ./(路径) 和 ../??????????????? 八字方针??????????????????? 当前路径? ??? index.html??????????????????? 访问路径? ??? demoa??????????????????? ??????????????????? 当前路径? ?? a/b/c??? ../../demoa??????????????????? 访问路径? ?? demoa??????? 以后使用的是绝对路径(一般使用的是不带协议的绝对路径)3,ServletConfig??? 他是当前servlet的配置对象.??? 获取方式:??????? ServletConfig config=this.getServletConfig();??? 作用:??????? ??? 常用方法:??????? String getServletName():获取当前servlet的名称 --指的是web.xml中servlet名字??????? String getInitParameter(name):获取指定的参数??????? Enumeration getInitParameterNames():获取全部初始化参数名称??????? ??????? ServletContext getServletContext():获取全局管理者??? 当servlet初始化的时候,执行了init(ServletConfig config),就把创建好的servletConfig传给了servlet??????? 由tomcat创建

示例代码:

doGet(HttpServletRequest request,HttpServletResponse response) ServletConfig conf= String name= String value = conf.getInitParameter("姓名" Enumeration names= String name_= System.out.println(name_+":"+ }

? ? ?4,ServletContext??? 全局管理者.??? ??? 作用:??????? ??? 怎么获取:??????? this.getServletConfig().getServletContext():??????? getServletContext()也可以获取??? 常见的方法:??????? String getInitparameter(name);获取指定的参数??????? Enumeration getInitParameterNames():获取全部的参数名称??????????? 参数??? ??????????????? ??????????????????? ??????????????????? ??????????????????? ??????? String getRealPath(path):返回相应文件在tomcat的实际路径??????????? 例如:D:JavaToolsapache-tomcat-7.0.53webappsservletDemo??????? InputStream getResourceAsStream(String path) :以流的形式返回对应的文件.??????? ??????? String getMimeType(String file)?? 可以获取一个文件的mimeType类型. 例如 text/html??????? URL getResource(String path) 它返回的是一个资源的URL??????? 例如:? localhost/day09/a.html??? 域对象:??????? 把他看成一个map,??????? xxxAttribute()??????????? setAttribute(String,Object):添加??????????? Object getAttribute(string):获取??????????? removeAttribute(string):移除示例代码:

doGet(HttpServletRequest request,IOException { ServletContext context= String url=context.getInitParameter("url" Enumeration paramNames= String name= String type = context.getMimeType("/a.html" URL url_ = context.getResource("/a.html" }

5,classpath??? 获取字节码文件的路径.??? 通过字节码文件获取??????? 当前类.class.getResource("/").getPath():返回classes的目录??????????? D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/??????? 当前类.class.getResource("").getPath():返回当前类的字节码文件所在的目录??????????? D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/cn/itcast/h_classpath/??????????? ??? 通过类加载器获取文件路径??????? 当前类.class.getClassLoader().getResource("/").getPath():返回classes的目录??????????? D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/??????? 当前类.class.getClassLoader().getResource().getPath():返回classes的目录??????????? D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/示例代码:

doGet(HttpServletRequest request,IOException { ServletContext context= String path1 = PathServlet..getResource("/1.txt" String path2 = context.getRealPath("/2.txt" String path3 = context.getRealPath("/WEB-INF/3.txt" String path4 = PathServlet..getResource("4.txt" }

小demo: 当访问index.html中的 链接则通过CountServlet计数,每访问一次则count加1,然后通过ShowServlet展示到控制台:

CountServlet doGet(HttpServletRequest request,IOException { ServletContext context= Integer count=(Integer) context.getAttribute("count" (count== context.setAttribute("count",1 } context.setAttribute("count",++ doPost(HttpServletRequest request,IOException { }
ShowServlet doGet(HttpServletRequest request,IOException { ServletContext context= Integer count=(Integer) context.getAttribute("count" System.out.println("访问的次数为:"+(count==?0 doPost(HttpServletRequest request,IOException { }
显示次数< 展示结果<
CountServlet cn.augmentum.showcount.CountServlet ShowServlet cn.augmentum.showcount.ShowServlet CountServlet /count ShowServlet /show

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读