Get:标记在地址栏中 放在请求行中显示get?Username=。。。Password=。。。
Post:使用的是二进制的上传下载 请求行不显示信息 传输数据量大数据隐蔽对文本没有 pst不能再浏览器中的记录中缓存
********************************************************************
发送大量的数据要用Post 密码用post
默认情况下数据传输方式是使用的Get
用method属性秀给传递方式。Servlet类进行请求处理
固定格式:
Protect void doxxx(HttpServletRequest request,HttpServletRespnse respnse)throw IOException,...{}
给参数起名字的时候不能以jsp开头
Servlet的使用:
Servlet 是一种基于java技术的web组件,是一种基于java的且与第三方平台无关的类。通常,它可以被Web 服务器编译、加载和运行,最后生成动态的资源内容。
为什么要使用Servlet?
Servlet是采用java语言编写,而由java 跨平台性的特点可知,servlet的移植性很好,且servlet API具有完善的标准,几乎所有的主流服务器都支持servlet.
Servlet与传统的CGI(Common Gateway Interface)相比,功能要强大,且处理的请求采用的是线程,而非进程,从而节省大量的资源开销,因此Servlet处理请求更轻量级、更高效
继承自Javax..servlet 和javax.servlet.http两个包
Servlet接口
Servlet API的核心是Servlet接口,所有Servlet类都必须实现该接口。它定义了五个方法,其中其中三个init、service和destroy是由Servlet容器来调用的。
在servlet容器或web server启动时, 对servlet进行实例化,此时调用servlet的构造方法;
servlet实例化后,调用该servlet实例的init方法,对servlet进行一些初始化处理,处理完成后,将该servlet注入到servlet容器中;
当client向web server或servlet容器请求servlet时,web server或servlet容器首先会根据请求的servlet名称去servlet容器中找对应的servlet,如果servlet不存在该名称对应的servlet,则向client响应请求不存在等信息;
如果请求的servlet存在于servlet容器,则调用servlet的service方法,生成动态资源,响应给client; (记住,整个过程该servlet只有一个实例,即单例);
当web server退出或servlet容器销毁时,调用servlet的destroy方法,最后唯一的sevlet实例将会被GC。
另外两个方法:
public ServletConfig getServletConfig()
-----该方法返回容器调用init()方法时传递给Servlet对象的ServletConfig对象
public String getServletInfo()
-----返回String,其中包括关于Servlet的信息,如作者、版本等,此方法很少用,返回null即可
HttpServlet类
增加了一个新的service()方法,格式如下:
protected void service (HttpServletRequest,
HttpServletResponse)
throws ServletException, IOException;
该方法是Servlet向客户请求提供服务的一个方法。
编写Servlet可以覆盖该方法。
HttpServletRequest接口
该接口扩展了ServletRequest接口;
提供了关于HTTP请求对象的视图;
定义了从请求对象中获取如HTTP请求头、cookies信息的方法。
HttpServletResponse接口
该接口扩展了ServletResponse接口;
提供了针对HTTP的发送响应的方式;
定义了为响应设置如HTTP响应头、设置cookies信息的方法;
该方法是Servlet向客户请求提供服务的一个方法。
Httpservlet是一个抽象类可以用来继承但是不可以生成对像 但是继承的类可以new对像
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Servlet容器处理请求的过程
1)用户点击一个链接,指向了一个servlet而不是一个静态页面。
2)容器“看出”这个请求是一个Servlet,所以它创建了两个对象HttpServletRequest和HttpServletResponse。
3)容器根据请求中的URL找到正确的Servlet,为这个请求创建或分配一个线程,并把请求和响应对象传递给这个Servlet线程。
4)容器调用Servlet的service()方法。根据请求的不同类型,service()方法会调用doGet()或doPost()方法。这里假设调用doGet()方法。
5)doGet()方法生成动态页面,并把这个页面“塞到”响应对象里,需要注意的是,容器还有响应对象的一个引用!
6)线程结束,容器把响应对象转换为一个HTTP响应,并把它发回给客户,然后删除请求和响应对象。
请求的方式是post那么就用Dopost方法
Get方式用DoGet方法(也就是对其进行重写)
Servlet 在服务器起来之后就已经被创建之后服务器调用service方法传递给servlet对像然后创建request,response
****************************** **********************************用Tomcat的管理平台管理Web应用的生命周期:
一般情况下,Web应用随着Servlet容器的启动而启动,随着Servlet容器的运行而运行,随着Servlet容器的终止而终止。
通常,在应用运行期间,对应用的web.xml文件进行修改后,不能立即生效,必须重新启动应用才会生效。
Tomcat作为Servlet容器的一种具体实现,提供了一个管理平台,用户可以在Tomcat运行时,手工管理单个Web应用的生命周期。
(演示)步骤:
1、修改<CATALINA_HOME>/conf/tomcat-user.xml,加入下面的用户:
<tomcat-users>
<role rolename=“manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
</tomcat-users>
2、启动Tomcat
3、http://localhost:8080/manager/html
Servlet初始化步骤:
1:servlet容器加载servlet 类
2:Servlet容器创建servletCnfig对像包含特定的servlet初始化配置信息,并和Web应用的ServletContext对像相关联、
3:servlet让其的创建Servlet对像。
4:servlet容器的调用Servlet对像的init()方法对其进行初始化
*************************************************************
Servlet工作原理
首相是客户端方请求,servlet调用service方法对其进响应
2:service方法中对请求的方式进行了匹配,选择调用doGet()还是调用doPost()方法进入相应的方法中调用逻辑层的方法,实现对客户端的响应
3:在servlet接口和GGenericServlet中乜有Doget()方法,doPost()方法,HttpServlet中定义了这些方法但是都返回的是error信息所以每次定义一个servlet方法时候,都必须实现doGet或者是doPost方法
Servlet的销毁阶段
1:档Web应用终止时servlet会先调用对象的Destroy()方法然后进行销毁
2:在destroy()方法中通常写关于文件传输流关闭数据库链接的语句释放所占用的所有资源
servletContext是一个公共的空间可以被所有的用户访问
**************************************************
上传文件:
通过HTML页面中表单进行上传利用文件进行上传
*************************************************************
RequestDispatcher
在Servlet中, 可以使用javax.servlet.RequestDispatcher来处理请求转发。
requestDispatcher对象由servlet容器创建,用于封装一个由路径所标识的服务器资源。转发的动作包括:
1) public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException;
该方法必须在响应被提交给客户端之前调用,否则抛出IllegalStateException异常。forward进入后,原先的Servlet将终止执行。
2) public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException;
include进入被调用的对象后,执行完相关操作后仍然会继续原先的servlet。
获得RequestDispatcher对象
从ServletRequest对象获取:
public RequestDispatcher getRequestDispatcher(String path);
//Path:目标组件的路径
从ServletContext对象获取:
public RequestDispatcher getRequestDispatcher(String path);
public RequestDispatcher getNamedDispatcher(String name);
servletRequest和servletContext有同样的方法:getRequestDispatcher,那么区别是什么?
区别:
servletRequest的getRequestDispatcher方法,参数path可以以斜杠(/)开头,代表当前上下文根的路径。如果不用斜杠开头,则相对于当前Servlet的路径。
servletContext的getRequestDispatcher方法,参数path必须要以斜杠(/)开头。