JSP非空判断之后跳转到jsp和servlet的区别

想要判断一个方法的请求是forward过来的还是直接响应用户的某个操作
采纳的答案
转发请求时会有如
javax.servlet.forward.request_uri& 等属性
已解决问题
未解决问题1375人阅读
&jsp有一个指令可以定义jsp的错误页面,并在此jsp页面出错时跳转到该页面输出出错日志。如下的例子:&%@ page errorPage="errorPage.jsp" %&errorPage.jsp的代码如下所示:.....&%@ page isErrorPage="true" %&....//输出出错日志&%= exception.getMessage() %&&&&&但是,这只能在jsp页面层控制。在J2EE的实现中,很多的情况是jsp往往只作为页面显示,与业务相关的数据库操作都是在后台的servlet执行,处理完毕之后再跳转某个jsp显示页面。这种设置框架,实现了MVC结构,使得整个系统的维护难度大大降低。&&&&实际的工作中,尽管系统采用了以上的设置框架,但由J2EE开发人员水平以及编程的习惯都有可能不通,经常会遇到开发人员在servlet中对有可能报错的地方处理不恰当。最常见的一种情况是,catch一个Exception e,然后仅仅调用e.printStackTrace()。这样造成的后果非常严重。一旦有Exception发生,web页面会出现白屏,我们可以从两方面来看:(1)如果是使用的用户。他往往会不知所措,并且有可能还不知道有错误发生,继续使用系统,但这时候的系统已经出错了,在错误的基础上继续业务流程,往往会造成更多系统级别的错误。(2)如果是开发人员。用户反映了这个出错,但是不知道出错原因。只能说出现要白屏。开发人员需要调试抓错的话,非得到应用服务器的输入端查看出错日志,定位可能出错的原因,再进行排错。&&&&在此,我介绍一种有效的servlet出错处理机制,这种机制将所有Exception的出错内容抛出到web页面,让使用用户立即有错误发生,并可以及时将该出错内容提交给开发人员定位出错原因。&&&&其实,这种机制非常简单。思路是定义一个抽象的BaseServlet基类,它继承HttpServlet。并增加一个抽象的 abstract public void doWorkFlow(HttpServletRequest request,HttpServletResponse response)的方法,这个方法是所有BaseServlet子类都必须且仅需实现的方法。BaseServlet基类当然要实现service方法 -- public final void service(HttpServletRequest request,HttpServletResponse response)。它的代码片断如下:public final void service(HttpServletRequest request,HttpServletResponse response)&&&&&&&&&&&&&&&&&&&&&&&&throws ServletException, IOException {&&&&try{&&&&&&&&//在执行doWorkFlow()之前,你可以在此处理是否有权限处理等问题&&&&&&&&.......&&&&&&&&doWorkFlow();&&&&}catch(Exception e){&&&&&&&&StringWriter out = new StringWriter();&&&&&&&&e.printStackTrace(new PrintWriter(out));&&&&&&&&request.setAttribute("err_msg", out.toString());&&&&&&&&RequestDispatcher rd = this.getServletContext().getRequestDispatcher("errorServlet.jsp");&&&&&&&&rd.forward(request,response);&&&&}}&&errorServlet.jsp非常简单。代码片断如下:....//输出出错日志&%= request.getAttribute("err_msg") %&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:113458次
积分:1864
积分:1864
排名:第8453名
原创:71篇
评论:44条
(1)(1)(1)(4)(3)(6)(1)(3)(27)(11)(18)(3)servlet 跳转后 的jsp 页面 样式,图片 JS 全部失效,怎么办?_百度知道
&%String path = request.getContextPath();String basePath = request.getScheme()+&://&+request.getServerName()+&:&+request.getServerPort()+path+&/&;%& &base href=&&%=basePath%&&&在jsp页面中加入这两句,以后只用写图片的名字就行了
其他类似问题
按默认排序
其他3条回答
1.JS中获取到的是“”js针对当前页面的元素,取得是控件的值。input中什么值,就会显示什么值。如果不输入,默认值就会为“”。2.在servlet中获取的是NULL如果你正确(用form或url)向servlet发送请求,input中不输入。servlet默认值会为“”,而不会为null.3.当前页面获取到的会是null当前jsp页面并没有发送请求,所以直接用request.getParameter(“入框name”)会是Null。当然你当前页面再次请求当前页面会得到“”。 如还有疑问可以在线联系我
&%String path = request.getContextPath();String basePath = request.getScheme()+&://&+request.getServerName()+&:&+request.getServerPort()+path+&/&;%& &base href=&&%=basePath%&&& 可以解决
他支持就是项目的根目录
你直接加上你想要的东西的相对跟路径就好了
这是服务端的跳转,out对象首先生成中间的JS字符,打到页面,然后执行跳转,这个时候,内嵌的JSP代码在这段JS代码被IE解析之前就已经实现了页面的条状,自然alert没有机会执行,所以不会有提示的。alert方法是HTML中的元素,servlet是服务端的元素,它可以生成html的元素,但是,也需要IE解析到之后才会执行的,所以,如果你想这样做的话,可以通过使用promot的js函数,然后在确定之后调用js的跳转函数来实现页面跳转。
servlet的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁我在servlet中输出javascript弹出消息框后,跳转到原来的jsp页面,可是消息弹不出来。请教高手该怎么做?
我在servlet中输出javascript弹出消息框后,跳转到原来的jsp页面,可是消息弹不出来。请教高手该怎么做?
代码如下:
if(o.getStatus()==0)&&&{&&&&request.getRequestDispatcher("/UpdateOrder.jsp?id="+id).forward(request, response);&&&}&&&else if(o.getStatus()==1)&&&{&&&&//String msg="该记录已审核,不能修改!";&&&&//request.setAttribute("msg", msg);&&&&out.write("&script language='javascript'&alert('该记录已审核,不能修改!');&/script&");&&&&request.getRequestDispatcher("/OrderOperate.jsp").forward(request, response);&&&}&&&else&&&{&&&&//String msg="该记录已进入下一流程,不能修改!";&&&&//request.setAttribute("msg", msg);&&&&out.write("&script language='javascript'&alert('该记录已进入下一流程,不能修改!');&/script&");&&&&request.getRequestDispatcher("/OrderOperate.jsp").forward(request, response);&&&&//request.getRequestDispatcher("/UpdateOrder.jsp?id="+id).forward(request, response);&&&}
有试过在这里用字符串保存弹出消息,但是跳到另外一个jsp页面后就跳不回来。
不区分大小写匿名
跳转以后就是新的页面了,所以你的页面不能直接弹出来,但是你可以在UpdateOrder.jsp的页面上写,使用body的load事件,判断msg是否为空,不为空就显示并跳转,为空就不管,把servlet里面的判断放在jsp页面中
你好像没懂我的意思哦,当状态不等于0的时候都不能跳到修改页面去的,而且还得弹出消息。照你的意思在UpdateOrder.jsp的页面去判断msg是否为空的方法我也试过,问题是它就是跳不回去啊,而且在UpdateOrder.jsp中写的load事件,既是java代码,又是JavaScript,我都不知道它到底是怎样执行的,反正就是跳不回去。&function load(){&&&& &%&&&& String msg=(String)request.getAttribute("msg");&&&& if(msg==null)&&&& {%&&&&&& alert(msg);&&&&& location.href="OrderOperate.jsp";&&&& &%&&&& }&&&& %&}
你的意思就是如果状态为0就转到UpdateOrder.jsp,如果不为0就到OrderOperate.jsp,到OrderOperate的时候还要弹出来一个框,是这个意思吧?
这样的话你在OrderOperate.jsp页面里面直接输出msg就可以了
&% String msg=(String)request.getAttribute("msg");if(msg!=null){&out.println("alert("+msg+");");&}%&
汗,这样也根本就弹不出。。。 郁闷
if(o.getStatus()==0)&&&{&&&&request.getRequestDispatcher("/UpdateOrder.jsp?id="+id).forward(request, response);&&&}&&&else if(o.getStatus()==1)&&&{&&&&String msg="该记录已审核,不能修改!";&&&&request.setAttribute("msg", msg);&&&&request.getRequestDispatcher("/OrderOperate.jsp").forward(request, response);&&&}&&&else&&&{&&&&String msg="该记录已进入下一流程,不能修改!";&&&&request.setAttribute("msg", msg);&&&&request.getRequestDispatcher("/OrderOperate.jsp").forward(request, response);&&&&//request.getRequestDispatcher("/UpdateOrder.jsp?id="+id).forward(request, response);&&&}
&
&
jsp页面
&
&%
& if(null != request.getAttribute("msg"))
{
&%&
&&&& &script language="javascript"&
&&&&&&&&& alert('${msg }');
&&& &/script&
&%
}%&
out.write(&&script language='javascript'&alert('该记录已审核,不能修改!');&/script&&);你这里用out.print();输出,然后在script里加上一个type=&text/javascript&,在alert('..!');加上window.location.href='/OrderOperate.jsp'这样就行了呗 。既然有了输出script干嘛还要用request.getRequestDispatcher
等待您来回答
编程领域专家jsp和servlet的关系,有点蒙蒙的感觉!_百度知道
jsp和servlet的关系,有点蒙蒙的感觉!
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的文件吗,然后我才能在页面看到效果吗?
提问者采纳
楼上也说了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服务器端进行编译。
那问下,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类里写html,不是说servlet也有显示功能吗,那我要做个测试,输出到页面该怎么弄?在dopost方法里写out.print,然后在去配置web.xml文件,然后在网页地址栏输入地址吗?
提问者评价
非常好 很耐心指导我,辛苦啦
其他类似问题
按默认排序
其他5条回答
jsp就是提供一个可视化的编程,就例如一些拖拽的控件,最后生成的还是底层代码jsp被转成servlet类,整个页面都将会被编译继承HttpServlet,out.println(&html&),直接在url地址请求此servlet就会打印到当前页面,最后生成是html页面
在没jsp前,我们用servlet时,非常难美化页面,可是苦可美工人员,后来发展出了jsp,美化就不是那么难了。他们本质上就是一个原理的,我们执行jsp页面时,总是把jsp页面先转化成servlet文件,最后编译成class文件,运行在servlet容器中。
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技术
把tomcat servlet jsp等关系分层次说一下,还有些没听明白比如tomcat包括servlet组件?是tomcat还是servlet组件负责把jsp翻译成class?还有如果我在eclipse里用out.println等方式来写的话,怎么输出到页面?是不是先创建一个空的text.html文件,然后在eclipse里的代码里写上个参数test.html就行了?
推荐一本书《head first servlet
JSP》,绝对比上面几位讲的都清楚
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的流,流的应用!
servlet的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 jsp servlet 的文章

 

随机推荐