get和post方法提交,mvc三层模式介绍和servlet的生命周期
servlet是一个比较重要的内容,我们以后学习的很多框架技术就是对servlet的封装的,所有有很多理论基础需要在servlet时候讲解,这节课我们有几个比较重要的概念要简单先介绍一下,大家不要理解很深,只需要先初步认识这个概念就可以了,以后在练习过程中会不对加深对这写概念的理解的。
一、mvc三层框架思想
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码:
模型(Model)层实现系统中的业务逻辑,就是一个个的实体javaBean构成的,里面包括属性,以及属性的get和set方法,还有一些对用户操作的处理的方法。
视图(View)层是呈现给客户以及浏览者看的页面,其功能仅仅只是用户获得用户的输入和展示给用户。
控制(Controller)层是Model与View之间沟通的桥梁,在控制(Controller)层可调用模型(Model)层中的方法,也可以为视图(View)层传值是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据,视图层不能直接访问模型层。
这样分层的好处是使得系统每层的功能清晰,减低依赖性,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
二、get和post提交的区别
HTTP 协议使用以下方法发送请求信息:GET方法POST 方法
GET 方法:用于检索信息(如文档、图表或数据库请求结果),请求的页面可以被设置为书签和使用电子邮件发送,请求信息作为查询字符串发送。
POST 方法:用于发送敏感信息(如信用卡号)或要保存到数据库中的信息,请求的页面不能设置为书签或不能通过电子邮件发送,发送的数据没有大小限制。
get方法提交和post方法提交的区别是:
1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。
示例如下:
asdf
3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,这主要是因为受URL长度限制;HTTP协议规范其实没有对URL长度进行限制。IE对URL长度的限制是2083字节(2K+35) n而Post可以传输大量的数据,所以在上传文件只能使用Post。
5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
6、提交复杂数据尽量使用POST方法。注意FORM不写method属性时默认是使用GET方法。
总结一下:默认访问服务器采用的都是GET的方法,比如一般的超链接,POST表达就是安全性比较好,一般在在表单提交时候会修改表单的method方法设置提交方式,代码如下:
(2)输入servlet的名称和访问的URL路径。
这样你就可以看到MyEclipse自动帮你建立的Servlet的代码了。
(3)注意web.xml中生存的代码。
除了帮你建立了一个Servlet类之外,还会修改web.xml的配置文件,打开web.xml,会看到添加了以下的代码:
LifeServlet
com.servlet.LifeServlet
LifeServlet
/lifeServlet
(4)尝试访问这个servlet,输入Servlet的访问路径即可。
2、servlet的生命周期
servlet的生命周期有其容器管理,也就是说,我们不需要new一个servlet的实例,也不用我们手动去销毁它,因为这些都是有servlet容器管理的。重写它的构造方法,初始化方法和销毁方法。看看servlet是什么时候初始化的。代码如下:
//servlet 生命周期 单例
public class LifeServlet extends HttpServlet {
public LifeServlet(){
System.out.println("servlet的构造方法");
}
@Override
public void init() throws ServletException {
System.out.println("servlet的init初始化方法");
super.init();
}
// 接受get提交的方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
// 接受post提交的方法
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
@Override
public void destroy() {
System.out.println("servlet的destroy销毁化方法");
super.destroy();
}
}
安装下面的测试这个Servlet的生命周期
(1)启动tomcat,打开浏览器访问这个Servlet的时候就会实例化。可见一个servlet只会构造一次。
(2)doget和dopost两个处理业务逻辑的方法在每一次用户访问时候都会执行。
(3)只有在servlet容器关闭时,servlet才会销毁
小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243 这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料!