jsp和servlet的关系,有点蒙蒙的感觉!
1jsp页面是不是通过tomcat服务器先转成servlet类?2那我项目比如是mvc模式,就是有servletmodeljsp这三个,那我项目里创建的一个类也叫serv...
1jsp页面是不是通过tomcat服务器先转成servlet类?
2那我项目比如是mvc模式,就是有servlet model jsp这三个,那我项目里创建的一个类也叫servlet,这个和jsp页面有什么关联?不是说jsp本身会被转成一个servlet吗?那这样的话我创建的servlet这个类和前面的一模一样了那不是重复了吗?(关于这个问题,我下面自己做了一下回答,不知道对不对,不对请纠正)
首先说下我这个自己创建的servlet类是继承了HttpServlet的。
我个人理解是这样,我创建的这个servlet类是不是类名可以自己改,但是它本质不是servlet类,也就是说我随便创建一个类只要继承了HttpServlet,就可以获得前面jsp页面被转成的servlet类的信息什么的?我创建的这个类就相当于控制层,连同了jsp,和model层?
我感觉我搞混的原因就是,我用eclipse创建servlet类时候,把它跟jsp被tomcat编译成servlet类搞混了。其实前面创建的servlet类名字可以随便改,只不过用servlet名更好理解,知道这是控制层的意思。并且我这个类只要继承了HttpServlet就可以调用jsp页面被tomcat编译后的所有servlet类的信息(感觉这个类好像是httpServlet的子类)?然后就可以和数据库什么的连接了吗
不知道是不是这样理解?
============================
还一个问题,如果说jsp被转成servlet类,那请问是整个页面都被编译,还是只是jsp页面里的java那部分被编译成servlet类?
听说以前没有jsp,都是直接在servlet里写out.println("html"),这样很麻烦,所以才有了jsp技术。
那我想问下,如果我直接在一个类里这么写out.println("html")如何能输出到页面呢?我就是想体验一下,
对了这个类前提是不是也必须要继承HttpServlet才行?因为这里有把类转成html的方法?
那这样最后是生产一个jsp或html的文件吗,然后我才能在页面看到效果吗? 展开
2那我项目比如是mvc模式,就是有servlet model jsp这三个,那我项目里创建的一个类也叫servlet,这个和jsp页面有什么关联?不是说jsp本身会被转成一个servlet吗?那这样的话我创建的servlet这个类和前面的一模一样了那不是重复了吗?(关于这个问题,我下面自己做了一下回答,不知道对不对,不对请纠正)
首先说下我这个自己创建的servlet类是继承了HttpServlet的。
我个人理解是这样,我创建的这个servlet类是不是类名可以自己改,但是它本质不是servlet类,也就是说我随便创建一个类只要继承了HttpServlet,就可以获得前面jsp页面被转成的servlet类的信息什么的?我创建的这个类就相当于控制层,连同了jsp,和model层?
我感觉我搞混的原因就是,我用eclipse创建servlet类时候,把它跟jsp被tomcat编译成servlet类搞混了。其实前面创建的servlet类名字可以随便改,只不过用servlet名更好理解,知道这是控制层的意思。并且我这个类只要继承了HttpServlet就可以调用jsp页面被tomcat编译后的所有servlet类的信息(感觉这个类好像是httpServlet的子类)?然后就可以和数据库什么的连接了吗
不知道是不是这样理解?
============================
还一个问题,如果说jsp被转成servlet类,那请问是整个页面都被编译,还是只是jsp页面里的java那部分被编译成servlet类?
听说以前没有jsp,都是直接在servlet里写out.println("html"),这样很麻烦,所以才有了jsp技术。
那我想问下,如果我直接在一个类里这么写out.println("html")如何能输出到页面呢?我就是想体验一下,
对了这个类前提是不是也必须要继承HttpServlet才行?因为这里有把类转成html的方法?
那这样最后是生产一个jsp或html的文件吗,然后我才能在页面看到效果吗? 展开
展开全部
楼上也说了JSP是一个特殊的Servlet类,但这不是重点,重点是你没明白他们之间的运作关系。
一个完整的HTTP请求是:
1、页面通过地址发送请求get或者post,不管这个页面是什么静态HTML,动态的PHP也好,JSP也好,aspx也好,What ever!
2、然后后台接受数据,java里面是通过servlet的request接受请求数据,当然这个JAVA类要继承HttpServlet,才能处理HTTP请求。
3、接受到数据后的JAVA Servlet类
(1)通过response的write或print方法发送数据到页面,这个通常适用于ajax,不做跳转
(2)request.getRequestDispatcher("/index.jsp").forward(request, response);这里可以传递保存请求数据request.setAttribute(name, value),并转向另一个JSP
(3)response.sendRedirect("/index.jsp");这个纯粹跳转,重定义地址栏,不能传递数据。
(4)也可以直接输出页面out.print("html"); 这个就相当于直接跳转到HTML只不过这HTML是你现写出来的。
下面来看我们常用的访问方式:
1、访问HTML,这个要与后台交互只能表单提交,或者URL跳转地址,或者AJAX请求数据
2、访问Servlet,*.do之后跳转到一个JSP页面,或者其他静态页面
3、访问JSP页面,这里本身就是一个Servlet,所以页面上可以进行Servlet里的一切操作,你也可以把表单提交的地址写成xxxx.jsp
注:第2步这里访问了.do之后,数据如何到JSP页面呢?request.getRequestDispatcher("/index.jsp").forward(request, response);这里其实是把我得到的数据作为请求数据,去请求index.jsp,JSP拥有能够接受数据的功能,所以能够显示上一个Servlet得到的数据。
如果你搞明白了上面的,那么JSP与Servlet区别你应该多少了解了:
1、他们都可以被作为请求地址直接访问,你表单提交到一个jsp也是没有问题的。
2、Servlet在编写好了之后,需要eclipse编译成class文件,需要重启服务器后才能生效,这样修改不方便
3、JSP页面可以随时修改,直接在TOMCAT服务器端进行编译。
一个完整的HTTP请求是:
1、页面通过地址发送请求get或者post,不管这个页面是什么静态HTML,动态的PHP也好,JSP也好,aspx也好,What ever!
2、然后后台接受数据,java里面是通过servlet的request接受请求数据,当然这个JAVA类要继承HttpServlet,才能处理HTTP请求。
3、接受到数据后的JAVA Servlet类
(1)通过response的write或print方法发送数据到页面,这个通常适用于ajax,不做跳转
(2)request.getRequestDispatcher("/index.jsp").forward(request, response);这里可以传递保存请求数据request.setAttribute(name, value),并转向另一个JSP
(3)response.sendRedirect("/index.jsp");这个纯粹跳转,重定义地址栏,不能传递数据。
(4)也可以直接输出页面out.print("html"); 这个就相当于直接跳转到HTML只不过这HTML是你现写出来的。
下面来看我们常用的访问方式:
1、访问HTML,这个要与后台交互只能表单提交,或者URL跳转地址,或者AJAX请求数据
2、访问Servlet,*.do之后跳转到一个JSP页面,或者其他静态页面
3、访问JSP页面,这里本身就是一个Servlet,所以页面上可以进行Servlet里的一切操作,你也可以把表单提交的地址写成xxxx.jsp
注:第2步这里访问了.do之后,数据如何到JSP页面呢?request.getRequestDispatcher("/index.jsp").forward(request, response);这里其实是把我得到的数据作为请求数据,去请求index.jsp,JSP拥有能够接受数据的功能,所以能够显示上一个Servlet得到的数据。
如果你搞明白了上面的,那么JSP与Servlet区别你应该多少了解了:
1、他们都可以被作为请求地址直接访问,你表单提交到一个jsp也是没有问题的。
2、Servlet在编写好了之后,需要eclipse编译成class文件,需要重启服务器后才能生效,这样修改不方便
3、JSP页面可以随时修改,直接在TOMCAT服务器端进行编译。
更多追问追答
追问
那问下,jsp本身会被编译成servlet对吧,那我自己又创建一个servlet去继承httpservlet,这俩之间有什么联系吗?感觉有了2个servlet类,是不是说我要分层次的话,就必须去创建一个servlet类去继承httpservlet,这样才能接收到jsp这个servlet类传递的消息,然后在用我创建的servlet类里面的request接收到jsp的消息,是这样吗?
追答
是的,你的Servlet必须继承HttpServlet类,JSP是默认继承HttpServlet的,2个Servlet是可以进行相互通信的(Serlvet跳转JSP实际上是一种通信行为),当然也可以独立运行(直接访问Servlet或者JSP)。最大的不同就是JSP是在你第一访问的时候,要在TOMCAT端进行预编译。
展开全部
JSP在本质上就是SERVLET,但是两者的创建方式不一样.
Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.
在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP是Java和HTML组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.
在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP是Java和HTML组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
JSP是特殊的servlet,MVC框架的JSP和servlet是前台和后台的关系,有任务职责分配,你servlet能充当view的角色吗?不能吧,JSP能作展示层,上面也说了JSP也是一种特别的servlet,JSP里面可以写java代码,在TOMCAT容器里面可以编译运行,所以JSP可以做servlet做的事,包括业务逻辑各种操作,跳转传参,可以不通过servlet处理达到层的关系,但是这样会很混乱,因为所有的职责都被JSP充当了,写代码的时候也会相当混乱,很不易维护,JSP是功能实质和servlet一样的,变相理解就是把java代码嵌入到了html页面。纯手打,望采纳。
out
就是继承了httpservlet类之后有一个
覆盖
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws IOException,ServletException方法在这里面处理响应请求,对应还有其他很多功能方法HttpServletResponse 接口的out对象可以将信息输出到浏览器上,
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
有关这个,你有必要去看一下java的流,流的应用!
out
就是继承了httpservlet类之后有一个
覆盖
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws IOException,ServletException方法在这里面处理响应请求,对应还有其他很多功能方法HttpServletResponse 接口的out对象可以将信息输出到浏览器上,
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
有关这个,你有必要去看一下java的流,流的应用!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
jsp就是提供一个可视化的编程,就例如一些拖拽的控件,最后生成的还是底层代码
jsp被转成servlet类,整个页面都将会被编译
继承HttpServlet,out.println("html"),直接在url地址请求此servlet就会打印到当前页面,最后生成是html页面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Java提供一系列接口类(所谓接口类就是类中所有方法只提供方法声明,不提供任何的方法实现,这些类的实现就留给后继者去做。):Servlet、ServletConfig、Serializable,然后通过多重继承产生一个最通用的Servlet实现类(图中Gerneric Servlet类),接下来,通过一个多重继承与实现,产生一个新的实现类HttpServlet,用户在开发Servlet程序时只需继承这个类,从而产生一个自己的类(图中Hello_Servlet类),然后根据实际开发功能与信息处理需要,去实现该类中的相关方法即可。这就是前面提到的按照Servlet规范编写一个Java类,从而编写一个Servlet。
至于JSP(JavaServlet Page),实际上它也是从Servlet继承而来。只不过它在Servlet当中又添加/修改了一些方法,作了新的封装。具体到Tomcat Web应用服务器中,它通过一个多重继承,分别从Java的HttpJspPage和HttpServlet两个类那里继承和实现一些方法,然后封装一个叫做HttpJspBase的类从而实现了一个通用化的JSP类,用户在开发自己的JSP时,只需要从HttpJspBase继承一个自己的类(如图中Hello_jsp类),然后根据需要去实现相应的方法即可。
因此这也是为什么JSP的代码中总是闪现Servlet代码框架影子的原因,其实它们只是为实现同样的功能而进行了不同封装的组件而已,血脉里留着的是一样的血。
“既生瑜何生亮?”呵呵,因为JSP确实比Servlet要更胜一筹,所谓“青出于蓝胜于蓝”,既然Sun公司要在Servlet基础上推出JSP技术,那肯定是因为JSP有它更高明的地方。
使用Servlet产生动态网页,需要在代码中打印输出很多HTML的标签,此外,在Servlet中,我们不得不将静态现实的内容和动态产生内容的代码混合在一起。使用Servlet开发动态网页,程序员和网页编辑人员将无法一起工作,因为网页编辑人员不了解Java语言,无法修改Servlet代码,而Java程序员可能也不是很了解网页编辑人员的意图,以至于无法修改和实现网页功能。为了解决这些问题,Sun公司就推出了JSP技术
至于JSP(JavaServlet Page),实际上它也是从Servlet继承而来。只不过它在Servlet当中又添加/修改了一些方法,作了新的封装。具体到Tomcat Web应用服务器中,它通过一个多重继承,分别从Java的HttpJspPage和HttpServlet两个类那里继承和实现一些方法,然后封装一个叫做HttpJspBase的类从而实现了一个通用化的JSP类,用户在开发自己的JSP时,只需要从HttpJspBase继承一个自己的类(如图中Hello_jsp类),然后根据需要去实现相应的方法即可。
因此这也是为什么JSP的代码中总是闪现Servlet代码框架影子的原因,其实它们只是为实现同样的功能而进行了不同封装的组件而已,血脉里留着的是一样的血。
“既生瑜何生亮?”呵呵,因为JSP确实比Servlet要更胜一筹,所谓“青出于蓝胜于蓝”,既然Sun公司要在Servlet基础上推出JSP技术,那肯定是因为JSP有它更高明的地方。
使用Servlet产生动态网页,需要在代码中打印输出很多HTML的标签,此外,在Servlet中,我们不得不将静态现实的内容和动态产生内容的代码混合在一起。使用Servlet开发动态网页,程序员和网页编辑人员将无法一起工作,因为网页编辑人员不了解Java语言,无法修改Servlet代码,而Java程序员可能也不是很了解网页编辑人员的意图,以至于无法修改和实现网页功能。为了解决这些问题,Sun公司就推出了JSP技术
追问
把tomcat servlet jsp等关系分层次说一下,还有些没听明白
比如tomcat包括servlet组件?是tomcat还是servlet组件负责把jsp翻译成class?还有如果我在eclipse里用out.println等方式来写的话,怎么输出到页面?是不是先创建一个空的text.html文件,然后在eclipse里的代码里写上个参数test.html就行了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询