servlet总结
1.Servlet的主要作用
(1)接收请求
(2)处理请求
(3)完成响应
2.Servlet定义
狭义上的Servlet:仅仅指的是这个servlet接口
广义的Servlet:不仅包含该Servlet接口,还包含该Servlet的接口的子类!
Servlet是JavaWeb部分的三大组件之一:
JavaWeb部分三大组件:Servlet、Filter、Listener,这三个组件都需要交给web服务器管理!
自定义一个Servlet:
1).自定义一个类实现Servlet接口,实现接口中的方法
2).将自定义的servlet类在web.xml文件中配置一下!
3.Servlet生命周期
含义:Servlet生命周期:就是Servlet对象由产生到销毁的过程
涉及到的几个方法:
1)构造器:servlet对象不是在tomcat服务器启动的时候创建的,而是在我们第一次
访问该servlet的时候调用,该构造器只会被执行一次,说明该Servlet是单例的!
但是是多线程的!
2)init方法:在我们第一次访问该Servlet时候调用【在构造器被调用之后紧接着被调用】
该方法只会被调用一次
3)service方法:每次我们访问该Servlet的时候,这个service方法都会被调用一次!
所以我们写的业务逻辑代码,主要就写在这个方法中!
4)destroy方法:该方法会在项目被卸载的时候【服务器关闭】会被调用一次!
4.Servlet相关接口
①ServletConfig
代表:代表当前servet的配置信息,每个servlet对应唯一的一个ServletConfig对象
<servlet>
<servlet-name>BServlet</servlet-name>
<servlet-class>com.neuedu.servlet.BServlet</servlet-class>
</servlet>
获取:该是由Tomcat服务器创建,然后通过参数的形式传递给init方法,
我们只需要在init方法中使用就可以!
功能:
1)获取当前servlet的名称[getServletName()]
2)获取当前servlet的初始化参数[getInitParameter("username")]
3)获取Servletcontext[getServletContext()]
②ServletContext
ServletContext:
代表:ServletContext代表的是当前web应用!
获取 :通过ServletConfig对象获取[getServletContext()]
功能:
1)获取整个web应用的初始化参数【getServletContext()】
2)可以做为javaweb部分的四大域对象之一使用
3)可以获取当前项目的名称【getContextPath()】
4)可以获取文件的真实路径[getRealPath("/index.html")]
5.常见异常
Throwable
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组下标越界异常:ArrayIndexOutOfBoundsException
文件未找到异常:FileNotFoundException
操作数据库异常:SQLException
6.GenericServlet
GenericServlet是个抽象类,必须给出子类才能实例化。它给出了设计servlet的一些骨架,
定义了servlet生命周期,还有一些得到名字、配置、初始化参数的方法。
7.HttpServlet
HttpServlet是子类,当然就具有GenericServlet的一切特性,还添加了doGet, doPost,
doDelete, doPut, doTrace等方法对应处理http协议里的命令的请求响应过程。
8.HttpServletRequest
1)代表:代表浏览器向服务器发送的请求报文
2) 获取:由tomcat服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法!
3) 功能:
getParameter()获取请求参数
getContextPath():获取当前项目名
setAttribute/getAttribute:本身就是一个域对象!
request.getRequestDispatcher("1.html").forward(request,response);可以实现转发功能
9.HttpServletResponse
1)代表:服务器响应给浏览器的响应报文
2)获取:由服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法!
3)功能:
response.getWriter().println("<h3>helloworld!</h3>");可以返回给浏览器一个页面或者一个页面片段!
response.sendRedirect("/servlet1/1.html"); :可以做请求的重定向
10.转发与重定向的比较
11.乱码原因分析以及解决方案
Http协议进行通信的时候是基于请求和响应的,传输的内容我们称之为报文!
Http协议会按照一定的规则将报文编码,然后在读取的时候再使用响应的解码格式进行解码!
这个一定的规则指的就是字符集:ASCII,iso8859-1, gbk, gb2312, utf-8
编码:将字符按照字符集转化为二进制格式
解码:将二进制代码按照响应的字符集转化为字符!
乱码的根本原因:就是编码和解码指定的字符集不一致造成的!
解决方案:统一编码和解码的字符集,统一成utf-8字符集!
请求报文:
1).浏览器编码---------->服务器解码
浏览器是按照给定页面的编码格式进行编码的,所以只需要设置网页的编码格式为utf-8就可以了!
get请求:
解码:使用的是tomcat默认的解码格式,默认是iso8859-1;
我们在server.xml文件中设置:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
post请求:
解码:使用的是tomcat默认的解码格式,默认是iso8859-1;
在服务器端我们使用的是:req.setCharacterEncoding("utf-8");来设置解码格式
注意:req.setCharacterEncoding("utf-8")一定要设置在第一次获取请求参数之前!
2).响应编码
服务器编码------------->浏览器解码
第一种解决方案:
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type", "text/html;charset=utf-8");
第二种解决方案:
resp.setHeader("Content-Type", "text/html;charset=utf-8");
第三种方案:
resp.setContentType("text/html;charset=utf-8");
12.路径问题
路径:
虚拟路径:http://localhost:8080/servlet01/BServlet
真实路径:是指的在本地磁盘上的具体路径
相对路径:相对路径指的是相对于当前文件所在目录的路径!(具有一定的局限性)
http://localhost:8080/servlet01/
http://localhost:8080/servlet01/html/a.html
html/a.html
绝对路径:绝对路径是以/开头表示的
浏览器解析,/代表http://localhost:8080/【服务器的根目录】<a>
服务器解析时,/代表 http://localhost:8080/项目名/ [项目的根目录]
常见的路径:
① url-pattern:
②转发的路径:
总结:这两个路径都是由服务器端解析,/代表项目的根目录
③重定向的路径
④页面中的路径
总结: 这两个路径都是由浏览器端解析,/代表服务器的根目录
<base>标签
<!-- base标签由一个href属性,这个属性可以做为我们在页面中相对路径的前缀
也就是说:我们在当前页面中写的相对路径,它会默认以base标签中的href
属性值做为前缀,
所以base标签可以让我们以使用相对路径的方式来使用绝对路径!
base标签仅仅对相对路径起作用,对绝对路径不起作用!
-->
posted on 2017-11-15 20:07 ALWAYS☆REMIND 阅读(192) 评论(0) 编辑 收藏 举报