- 狭义上的Servlet,指的就是Servlet接口
- 广义上的我们认为凡是实现Servlet接口的类,我们都称他是一个Servlet *****
2.在web.xml文件中对Servlet进行配置
<servlet-name>别名</servlet-name>
<servlet-class>全类名</servlet-class>
<servlet-name>别名</servlet-name>
<url-pattern>需要servlet处理的请求地址</url-pattern>
- Servlet的别名,程序员通过别名对Servlet进行配置
- Servlet的全类名,服务器通过全类名来创建Servlet的实例
- Servlet映射的请求地址,用户通过该地址访问Servlet
> Servlet的生命周期,指Servlet的对象从被创建到被销毁的过程。
- Servlet第一次处理请求时,会调用构造器,来创建Servlet实例。
- 只会调用一次,Servlet是单例模式,他是以多线程的方式调用service()方法.
- Servlet不是线程安全,所以尽量不要再service()方法中操作全局变量。
- 构造器调用之后马上被调用,用来初始化Servlet,只会调用一次。
- Servlet每次处理请求时都会调用service()方法,用来处理请求,会调用多次。
- Servlet对象销毁前(WEB项目卸载时)调用,用来做一些收尾工作,释放资源。
代表:当前Servlet的配置信息,每一个Servlet都有其唯一对应的ServletConfig。
<servlet-name>AServlet</servlet-name>
<servlet-class>com.atguigu.servlet.AServlet</servlet-class>
<param-name>user</param-name>
<param-value>root</param-value>
<param-name>password</param-name>
<param-value>123123</param-value>
获取:由Tomcat服务器创建,最终作为参数传递到init()方法中,我们可以在init()方法直接使用。
当我们通过继承HttpServlet创建Servlet时,由于父类已经实现ServletConfig接口,
所以我们可以在Servlet中直接调用ServletConfig的方法。
<param-name>user</param-name>
<param-value>root</param-value>
<param-name>password</param-name>
<param-value>123123</param-value>
【3】 获取当前WEB应用的ServletContext对象。
代表:当前的WEB应用,一个WEB应用对应一个唯一的ServletContext对象,
ServletContext对象在项目启动时创建,在项目卸载时销毁。
获取:通过ServletConfig的getServletContext()方法获取。
<param-name>phone</param-name>
<param-value>1388888888</param-value>
【2】 可以获取资源的真实路径(物理路径),主要在文件的上传和下载时使用。
【3】 可以作为一个域对象在不同的web资源之间共享数据。(下回分解)
- 相比Servlet接口GenericServlet更加简单一些,但是我们最终实际上使用的HttpServlet
- HttpServlet继承了GenericServlet,而GenericServlet实现Servlet接口
- 所以我们可以同构继承HttpServlet来创建一个Servlet。
- HttpServlet重写service()方法:
1.在该方法中先将ServletRequest和ServletResponse
强转为了HttpServletRequest和HttpServletResponse。
2.然调用重载的service()方法,并将刚刚强转得到对象传递到重载的方法中。
- 重载service(HttpServletRequest request , HttpServletResponse response)
如果是GET请求,则调用doGet(HttpServletRequest request , HttpServletResponse response)
如果是post请求,则调用doPost(HttpServletRequest request , HttpServletResponse response)
当通过继承HttpServlet来创建一个Servlet时,我们只需要根据要处理的请求的类型,来重写不同的方法。
获取:该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。
request.getParameter('username');
request.getContextPath();
【3】作为一个域对象,在不同的WEB资源之间共享数据。
request.getRequestDispatcher('target.html').forward(request, response);
获取:该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。
【1】响应给浏览器一个网页或者是网页片段(设置的是响应报文的响应体)
response.sendRedirect('target.html');
> 当用户通过表单向Servlet发送中文请求参数时,Servlet获取到内容会产生乱码,
当Servlet向浏览器响应中文内容时,也会产生乱码。
> 浏览器和服务器之间通信时,中文内容时不能直接发送的,需要对中文进行编码。
UTF-8的张三:%E5%BC%A0%E4%B8%89
> 所以我们只需要统一网页的字符集为UTF-8即可。
> request解码时默认字符集时iso8859-1,但是iso压根就不支持中文
> post请求在servlet中解码,所以我们只需要指定request的字符集即可。
> 我们可以通过如下方法,来设置request的字符集:
request.setCharacterEncoding('utf-8');
该方法要在request.getParameter()第一次调用之前调用
> get请求是通过url地址传递请求参数,url中的请求参数将会被Tomcat服务器自动解码。
> Tomcat的默认编码是iso8859-1,但是iso压根就不支持中文,所以必然乱码。
> 只需要修改Tomcat的解码的默认字符集,修改配置文件server.xml
> 在server.xml的Connector标签中(改端口号的那个标签)添加如下属性:
> 修改完配置文件以后,get请求的编码就不用再处理的,但是post请求还是老样子。
response.setCharacterEncoding('utf-8');
> 虽然我们已经指定了response的字符集为utf-8,但是浏览器并不是用utf-8解码。
浏览器默认使用gb2312解码的,所以依然乱码,只不过没有那么乱。
> 浏览器的解码字符集可以通过浏览器来设置(不靠谱)
> 我们可以通过服务器来告诉浏览器,我们的内容的编码格式为utf-8
> 我们可以通过一个响应头来告诉浏览器,内容的编码格式:
Content-Type:text/html;charset=utf-8
response.setHeader('Content-Type', 'text/html;charset=utf-8');
response.setHeader('Content-Type', 'text/html;charset=utf-8');
response.setCharacterEncoding('utf-8');
> 当我们设置Content-Type这个响应头时,服务器会自动使用响应头中的字符集为内容编码。
response.setContentType('text/html;charset=utf-8');
- 在request.getParameter()方法第一次调用之前,调用如下代码:
request.setCharacterEncoding('utf-8');
- <Connector URIEncoding='utf-8' connectionTimeout='20000' port='8080' protocol='HTTP/1.1' redirectPort='8443'/>
response.setContentType('text/html;charset=utf-8');
- URL是URI的一种实现,也是URI最常见的实现方式。
- URI有两种实现方式URL和URN,URN用的很少
http://主机名:端口号/项目名/资源路径/资源名
- 由于转发的出现,相对路径会经常发生变化,容易出现错误的链接
所以在开发中我们一般不使用相对路径,而是使用绝对路径。
- 由浏览器解析的绝对路径中的/代表的是服务器的根目录:
- 由服务器解析的绝对路径中的/代表的项目的根目录:
- 转发的路径由服务器解析,设置绝对路径时不需要加项目名
- 重定向的路径由浏览器解析,设置绝对路径时需要加上项目名
- url-pattern和转发中的路径都是由服务器解析的,
- 重定向和页面中的路径(HTML标签中的路径),由浏览器解析的,
http://www.cnblogs.com/libingbin/
感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。