基础-Servlet
Servlet是运行在web服务器上的一个java类。
它的作用是将http请求和http相应进行操作完成我们的业务逻辑。
servlet创建:
1.创建一个类extends HttpServlet
2.重写一个请求处理的方法 doGet
3.servlet配置 web.xml中进行配置 如下:
<servlet>
<servlet-name>HelloWorldExample</servlet-name>
<servlet-class>HelloWorldExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldExample</servlet-name>
<url-pattern>/servlets/servelt/HelloWorldExample</url-pattern>
</servlet-mapping>
servlet生命周期:
1.客户端请求该servlet;
2.加载servlet类到内存;
3.实例化、初始化该servlet;
4.init()初始化参数;
5.service()(doGet() 或者 doPost());
6.destory()。
当第一次访问时,服务器会根据请求的url,在web.xml文件中查找到对应的servlet,并将其实例化。
同时调用了init方法,这个方法只被调用一次。
开启一个线程,调用service方法。
当下一次再访问时,都是开启一个新线程来调用service方法
如果服务器关闭了,会调用servlet的destroy方法来销毁实例。
注意:
1.servlet实例是由服务器创建的,并且一般情况下只有一个,常驻内存。
2.servlet是线程不安全的,不建议在servlet中创建成员变量,如果创建了,需要考虑同步。
对于<url-pattern>我们在开发中它的写法有以下几种:
完全匹配 我们之前写的都是完全匹配方式 ,它要求必须以”/”开始
目录匹配 必须以”/”开始,以”*”结束
扩展名匹配 不能以”/”开始,以*.xxx结束 xxx代表的是后缀名
优先级 完全匹配>目录匹配>扩展名匹配
我们在html页面上怎样可以向服务器发送一个请求?
1.超连接 <a>
2.表单 <form action=”” method=””>
3.location.href=””
4.直接在地址栏上输入
对于超连接 location.href它们都是get请求方式.
唯一可以post请求方式的只有表单这一种方式
ServletConfig对象
它是servlet的一个配置对象
ServletConfig对象是由servlet容器创建的,在访问对应的servlet时将ServletConfig对象通过init方法传递到了Servlet中。每一个Servlet都有自己的ServletConfig对象。
在我们的servlet中要想获取ServletConfig对象:
ServletConfig config=this.getServletConfig();
ServletConfig对象作用:
获取Servlet 的name 获取的是<servlet-name>中的值
获取 Servlet的初始化参数
获取ServletContext对象。
ServletContext
ServletContext context=ServletConfig.getServletContext();
ServletContext是什么,它有什么作用?
每一个web应用被web容器加载时,就会产生一个ServletContext对象,
简单理解就是一个web应用对应一个ServletContext.
ServletContext对象是由web容器创建的。
web容器也就是tomcat服务器
要获取一个ServletContext对象可以通过 ServletConfig.getServletContext()
域对象 上下文
在web中如果听到域对象,就将其想像成Map
作用:
可以实现多个servlet之间的通信。
可以获取ServletContext的初始化参数
可以获取资源信息
String getRealPath() 可以获取服务器上的资源的绝对磁盘路径。
InputStream getResourceAsStream(String path) 可以获取一个指向指定资源的输入流
getResource()
其它功能
获取mime类型 String getMimeType(String )
分发请求
写入日志.
ServletContext可以实现Servlet之间的共享。
setAttribute(String name,Object value)
Object getAttribute(String name)
removeAttribute(String name);
classpath路径
Class在获取时,getResource() 参数建议从”/”开始写
ClassLoader在获取时,getResource(“”)它本身就是从根目录查找,所以不建议使用”/”
客户端访问servlet的路径问题
绝对 带协议 不带协议 /工程名/资源路径
相对 考虑当前页面与访问的servlet之间的关系
Request与response是代表请求与响应的两个对象,它是由web服务器创建的,传递给我们自己的Servlet的service方法.
通过request对象就可以获取http请求信息。
通过response对象就可以设置http响应信息。
解决响应操作乱码:
response.setCharacterEncoding(String charsetName) 设置响应信息编码
response.setContentType(“text/html;charset=utf-8”); 设置响应信息编码,还通知浏览器以什么编码来显示信息
获得浏览器类型
String agent=request.getHeader("user-agent");
常用状态码
200请求成功(其后是对GET和POST请求的应答文档。)
302所请求的页面已经临时转移至新的url。
304未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
404没有找到文件或目录。
405请求中指定的方法不被允许
500请求未完成。服务器遇到不可预知的情况
请求转发和重定向的区别:
1.请求转发是服务器内部跳转,地址栏不会发生改变
重定向地址栏会发生改变。
2.请求转发,只有一次请求,一次响应.
重定向,有两次请求,两次响应。
3.请求转发存在request域,可以共享数据.
重定向不存在request域。
4.请求转发只能在服务器的内部跳转,简单说,只能访问本站内资源。
重定向可以访问站外资源,也可以访问站内资源.
5.请求转发是由request 发起的 . request.getRequestDispatcher().forward()
重定向是由response 发起的 response.sendRedirect();
6.请求转发与重定向时路径写法不一样.
重定向要跳转的路径是从浏览器在次发起的,是浏览器端路径,这时必须写在 /工程名/资源
请求转发是服务器内部跳转,这时它与浏览器无关 写法 /资源
基础-Servlet的更多相关文章
- Java Web基础 --- Servlet 综述(理论篇)
摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Ser ...
- Java基础——Servlet(五)
哈哈哈...学习Servlet学了半个多月,因为中间有比较灰心的时候,有几天是啥都不学了的状态,看了好几部励志的电影.呃~还是得继续吧.本来计划是好好夯实这里的基础,结果在网找到了介绍比较全面的视频, ...
- Java基础——Servlet(一)
在学习Servlet之前,需要首先学习一些关联性的知识. 一.动态网页程序 动态网页:它是网页中的偏功能性的部分也是最重要的部分.它不是我们平时所看见的页面特效,展示的效果.而是,一种交互行为.比如, ...
- Java基础——Servlet
什么是Servlet Servlet是Java Web的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l ...
- JavaWeb基础-servlet
Servlet简介 Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现s ...
- Java基础——Servlet(八)文件上传下载
一.简单的文件上传常见的组件Smartupload , Apache 的 commons FileUploadSmartupload上传的步骤: 1.初始化上传上下文 2.准备上传 3.保存文件 &l ...
- Java基础——Servlet(七)过滤器&监听器 相关
一.过滤器简介 Filter 位于客户端和请求资源之间,请求的资源可以是 Servlet Jsp html (img,javascript,css)等.用于拦截浏览器发给服务器的请求(Request) ...
- Java基础——Servlet(六)分页相关
前面写了Servlet(一)到(五),主要是在网上搜罗的视频.对分页这块还是不太清楚.于是有找到一些视频,重新学习了一下.主要是对分页的认识和设计思路.也是为了方便我以后回忆一下.. 一.分页常识 p ...
- Java基础——Servlet(四)
最近一直在学习Servlet,真的有烦躁,一下子要创建好几个文件,服务端.客户端.html页面....学习进度蛮慢的,很容易失掉信心.当学习到cookie时,发现有好多实现是在我们日常生活中可以会遇得 ...
随机推荐
- 玩玩RMI
今天在看代理设计模式,java中远程代理的实现一定会用到RMI的,很久没有温习过RMI的知识了,今天就重新过一遍这个知识点来让自己加深印象,构建一个简单的RMI小程序需要用到一下几个类: java.r ...
- 一步一步学EF系列3【升级篇 实体与数据库的映射】
之前的三张为基础篇,如果不考虑架构问题,做一般的小程序,以足够用了.基本的增删改查也都有了.但是作为学习显然是不够的.通过之前三章的学习,有没有发现这样写有什么问题,有没有觉得繁琐的?可能有人会说,之 ...
- webapi中的路由约束
Route Constraints Route constraints let you restrict how the parameters in the route template are ma ...
- chapter 13_0 元方法
通常,Lua中的每个值都有一套预定义的操作集合. 例如:可以将数字相加.可以连接字符串.可以在table中插入一对key-value等. 但是无法将两个table相加,无法对函数作比较,或无法调用一个 ...
- chapter6 深入了解函数
Lua函数是具有特定词法域的第一类值,与其他传统类型的值(string and number)具有相同的权利. 它可以保存在变量和table中,也可以把它当参数传递,也可以作为返回值. 在Lua中有个 ...
- 使用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡出现的无法加载mod_jk.conf文件的问题
用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡的 如果出现了问题,可以用cmd cd到Apache安装文件的bin下,运行httpd文件,错误信息就会打印出来. ...
- 2015 Multi-University Training Contest 6
1001 Average 忍不住又补了一题. 只要枚举1与2之间1给2,2给1,什么都不做三种状态. 后面的情况都已经决定了. (估计只有我比赛的时候把a candy当成a个糖果了吧QAQ) # in ...
- F - 娜娜梦游仙境系列——多民族王国
F - 娜娜梦游仙境系列——多民族王国 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Othe ...
- python--tile函数
1.函数的定义与说明 tile函数位于python模块 numpy.lib.shape_base中,功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组. 2.函数操作 ...
- 利用pscp命令实现linux与windows文件互传
windows==>linux(单个文件) PrivateKey.ppk(私钥)可以是相对路径或者绝对路径pscp -i D:\PrivateKey.ppk D:\xxx.xx root@123 ...