JSP和Struts2之间跳转总结
- 格式:docx
- 大小:75.24 KB
- 文档页数:3
servlet跳转页面的几种方法一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。
跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。
Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。
1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。
sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("");跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
2) forward方式RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher .forward(request, response);页面的路径是相对路径。
forward方式只能跳转到本web应用中的页面上。
跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttributeJSP:1) response.sendRedirect();和servlet的response.sendRedirect()方式一样。
此语句前不允许有out.flush(),如果有,会有异常:ng.IllegalStateException: Can't sendRedirect() after data has committed to the client.atcom.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpRes ponse.java:558)...跳转后浏览器地址栏变化如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;2) response.setHeader("Location","");此语句前不允许有out.flush(),如果有,页面不会跳转。
struts2中默认跳转action在⼀个ssh项⽬⾥⾯进⼊⾸页前需要跳转到后台查询数据,但是在web.xml中的:<welcome-file>index.jsp</welcome-file>⼜不能直接跳转action。
上⽹查了查,有2个⽅法可以解决这个问题。
⽅法⼀:在⼀个空页⾯⽤js跳转web.xml⾥:<welcome-file>index.jsp</welcome-file>index.jsp为⼀个空页⾯:<head><base href="<%=basePath%>"><script type="text/javascript">function tologin(){window.location.href = "aaaa.action";}</script></head><body onload="tologin();"></body>⽅法⼆:在⼀个空页⾯⽤META重定向。
web.xml⾥:<welcome-file>index.jsp</welcome-file>index.jsp为⼀个空页⾯,在页⾯加上这句:<META HTTP-EQUIV="Refresh" CONTENT="0;URL=index.action">这句代码的意思是打开该页⾯后⽴即跳转执⾏url中的路径。
content="0 表⽰打开该页后⽴即跳转。
如果content="1 则表⽰1秒后⾃动跳转到要跳转的页⾯.我这两种⽅法都试过的,感觉第⼆种⽐第⼀种⽅法跳转要快⼀些。
从action1直接跳转到action2,有两种方法:1. 需要保存前一个action的属性信息时使用,保存住action1的request对象:<result type= "chain " name="a2">action2</result>2. 不保存前一个action的参数可以用这种方法:<result type= "redirectAction "> action2</result>Struts.xmlJava代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD StrutsConfiguration 2.1//EN""/dtds/struts-2.1.dtd">3.<struts>4.5.<!--一个action跳转到另一个action 跳转方式为chain 会保留request对象redirectAction 则不能保留-->6.<package name="limin"extends="struts-default">7.<action name="sa1_*"class="com.Action.StrAction1" method="{1}">8.<!--<result type="chain" name="sa2">sa2_sa2</result> -->9.<result type="redirectAction" name="sa2">sa2_sa2</result>10.</action>11.12.<action name="sa2_*"class="com.Action.StrAction2" method="{1}">13.<result>/index.jsp</result>14.</action>15.</package>16.17.</struts>[java]view plain copyprint?1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://stru /dtds/struts-2.1.dtd">3.<struts>4.5.<!--一个action跳转到另一个action 跳转方式为chain 会保留request对象 redirectAction 则不能保留-->6.<package name="limin"extends="struts-default">7.<action name="sa1_*"class="com.Action.StrAction1" method="{1}">8.<!--<result type="chain" name="sa2">sa2_sa2</result> -->9.<result type="redirectAction" name="sa2">sa2_sa2</result>10.</action>11.12.<action name="sa2_*"class="com.Action.StrAction2" method="{1}">13.<result>/index.jsp</result>14.</action>15.</package>16.17.</struts>action1Java代码1.public class StrAction1 {2. String a ="liminhappygirl";3.public String getA() {4.return a;5. }6.public void setA(String a) {7.this.a = a;8. }9.public String sa1() {10. HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);11. request.setAttribute("limin", "happygirl");12. System.out.println("sal已经执行");13.return"sa2";14. }15.16.}[java]view plain copyprint?1.public class StrAction1 {2. String a ="liminhappygirl";3.public String getA() {4.return a;5. }6.public void setA(String a) {7.this.a = a;8. }9.public String sa1() {10. HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);11. request.setAttribute("limin", "happygirl");12. System.out.println("sal已经执行");13.return"sa2";14. }15.16.}action2Java代码1.public class StrAction2 {2.public String sa2() {3. HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);4.//当type="chain" 时能保存住request对象5. System.out.println(request.getAttribute("limin"));6.return Action.SUCCESS;7. }8.}[java]view plain copyprint?1.public class StrAction2 {2.public String sa2() {3. HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);4.//当type="chain" 时能保存住request对象5. System.out.println(request.getAttribute("limin"));6.return Action.SUCCESS;7. }8.}。
Struts2在WebWork基础上发展起来的,可扩展的JAVA EE web框架。
框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。
Action类:Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。
Struts2提供一个ActionSupport基类去实现常用的接口。
Action接口不是必须的,任何有execute标识的POJO 对象都可以用作Struts2的Action对象。
线程模式:Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。
Servlet依赖:Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。
如果需要,Struts2 Action仍然可以访问初始的request和response。
但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
可测试性:Struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
Action属性能够通过web页面上的taglibs访问。
表达式语言:Struts 2 使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
Struts2不仅支持JSTL,Struts2 还可使用OGNL进行类型转换。
提供基本和常用对象的转换器。
校验:Struts2支持通过validate方法和XWork校验框架来进行校验。
XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。
JSP页⾯跳转的⼏种实现⽅法使⽤href超链接标记客户端跳转使⽤客户端跳转提交表单客户端跳转使⽤response对象客户端跳转使⽤forward总做标记服务器跳转使⽤requestDispatcher类服务器跳转1、<form name="form1" method="POST" action="login02.jsp"><input type="text" name="name"><input type="text" name="psd"><input type="submit" value="提交"><input type="reset" value="重置">2、<%response.setCharacterEncoding("utf-8");response.setHeader("iso-8859-1","utf-8");request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String psd = request.getParameter("psd");if(name.equals("admin")&&psd.equals("123")){%><script type="text/javascript">window.location="login03.jsp";</script><% }else{ %><script type="text/javascript">window.location="";alert(window.location.href);</script><% }%>页⾯1提交到页⾯2之后代码负责判断然后通过js代码进⾏跳转3、<%response.setCharacterEncoding("utf-8");response.setHeader("iso-8859-1","utf-8");request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String psd = request.getParameter("psd");if(name.equals("admin")&&psd.equals("123")){response.sendRedirect("");//路径001return;}else{response.sendRedirect("login01.jsp");return;}%>页⾯1提交到页⾯3之后通过 response对象的sendredirect()⽅法重定向在上段代码的路径001中说明⼀点 sendredirect()中的URL是可以带参数 eg sendredirect("url?name="+name);重定向顺便传递参数 sendredirect注意的第⼆点:⼀般此句之后紧跟⼀句 return;(原因:通过sendredirect⽅法做重定向是在页⾯处理完之后才会有实际动作的,譬如上个例⼦⾥页⾯的⽤户名密码输⼊完毕点击提交然后后⼀个页⾯判断判断完即处理完页⾯3是不需要输出的也是输不出来东西的没有return再有别的输出是没有意义的⽽且有的时候芳⼉因为⽆意义的输出⽽报错)使⽤ response对象实现页⾯的跳转有2中⽅法上⾯是⼀种下⾯这种是是利⽤ setHeader()⽅法还是页⾯1提交把页⾯3的代码修改⼀下就可以了:<%response.setCharacterEncoding("utf-8");response.setHeader("iso-8859-1","utf-8");request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String psd = request.getParameter("psd");if(name.equals("admin")&&psd.equals("123")){// response.sendRedirect("");// return;response.setHeader("Refresh","1;url=");}else{// response.sendRedirect("login01.jsp");// return;response.setHeader("Refresh","1;url=login01.jsp");}%>response.setHeader("Refresh","等待的秒数;url=绝对路径或者相对路径"); 路径问题sendredirect也⼀样绝对路径相对路径都没意见上例都是等待1秒之后跳转response重定向和forward跳转的区别response:1执⾏完所有的代码再跳转到⽬标页 2跳转到⽬标页后浏览器的URL会改变 3在浏览器中重定向 4可以跳转到其他服务器上的页⾯eg:百度。
Struts2基础知识Struts2概述1.Struts2框架应用javaee三层结构中的web层框架。
2.Struts2框架在struts1和webwork基础之上发展的全新框架。
3.Struts2所解决的问题:在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。
图解:4.现在比较稳定的Struts2版本struts-2.3.24-all.zip5.web层常见框架1.struts2.springMVCStruts2框架入门1.导入jar包1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring包,是不能使用的,导入会导致程序不能运行。
2.到app目录里面复制案例的jar包是最好的方法。
2.创建action3.配置action类的访问路径1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的,位置必须在src下面,名称为struts.xml 。
2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即可。
3.action的配置*注意访问路径:http://域名/端口号/项目名/action名.action注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。
4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴即可。
Struts2执行过程图解:Struts2配置1.是一种常量标签2.修改Struts2的默认常量值1.常用方式在struts.xml中进行配置。
2.其它两种方式1.在src下面创建struts.properties文件并修改。
2.在web.xml文件中进行修改。
3.Struts2最常用的常量struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。
Struts2笔记(一)可使用全局页面。
1、配置方法:在package标签下配置2、注意:该标签只能在一个package标签中使用,如果有多个标签,需要重新定义。
JSP 项目答辩问题1.什么是B/S、C/S答案: C/S 结构:Client/Server(客户端/服务器),桌面安装应用程序(QQ、斗地主、MSN)。
B/S结构:Browser/Server(浏览器/服务器), Web应用程序(WebQQ、OA、网页游戏)。
2.HTTP常见状态码?答案:200 成功401 客户端没有访问权限404 路径错误500 服务器产生内部错误3.传值方式get/post答案:客户端向服务器传递数据有两种方式(通过form表单实现):get 和 postGet: 有长度限制(数据量小),浏览器地址栏可以看见传递的参数。
默认使用get方式传值。
Post:无长度限制(数据量大),地址栏不可见(相对安全)。
4.Servlet的生命周期?答案:1. 实例化(执行构造方法)--->2. 初始化(执行init()方法)--->3.服务(根据get 或post请求执行相应的doGet()或doPost()方法) --->4. 销毁(执行destroy()方法)5.页面跳转的两种方式?答案:内部跳转和外部跳转。
内部跳转使用:request. getRequestDispatcher (“跳转的路径”).forward(request,response);“跳转的路径”);注意:两者之间的区别,内部跳转请求在服务器内部完成,相当于一次请求;而外部跳转客户端会发送两次请求;6.内部跳转和外部跳转区别?答案:内部跳转与外部跳转区别:1.内部跳转:浏览器的地址栏不会发生改变。
request中的参数值,会被保留到新的页面。
2.外部跳转:浏览器地址发生改变(相当于二次请求)。
第一次request中的参数值,不会被保留。
7.Post提交如何处理中文?答案:注意:这种中文处理方式只能用来处理post提交必须写在方法的第一行。
8.Get提交如何处理中文?答案:注意:这种方式只能用来处理get提交9.JSP页面元素的构成?10.JSP页面常用的内置对象?答案:11.Session对象的作用已经常用方法?答案:Session作用:用于存放、记录每一个客户端的相关信息。
js跳转页面的几种方法在JavaScript中,跳转页面是常见的操作之一,主要用于实现页面间的导航和重定向。
以下是一些常用的JavaScript跳转页面的方法:1. 使用window.location对象`window.location`对象是浏览器窗口中当前加载的文档的地址信息,我们可以通过修改它的属性或方法来实现页面跳转。
a) 使用window.location.href`window.location.href`属性用于获取或设置当前页面的URL。
要跳转到新的页面,我们可以直接给它赋值一个新的URL。
javascriptwindow.location.href = "这段代码将会使浏览器跳转到"b) 使用window.location.assign()`window.location.assign()`方法也可以用来加载新的URL。
使用方法如下:javascriptwindow.location.assign("这段代码的效果和上一段代码相同,也会使浏览器跳转到"2. 使用document.location对象`document.location`对象与`window.location`对象功能相同,也可以用来获取或设置当前页面的URL。
使用方法如下:javascriptdocument.location.href = "或者javascriptdocument.location.assign("这两段代码同样可以实现页面跳转。
3. 使用location.reload()方法`location.reload()`方法用于重新加载当前页面。
如果想强制从服务器重新加载(而不是从缓存中加载),可以传递一个true参数:javascriptlocation.reload(true);这种方法并不真正实现页面跳转,但有时候我们需要刷新页面以获取最新的数据或状态,这时就可以使用这个方法。
JSP和Struts2之间跳转实验报告:
Struts2的处理步骤
Struts2框架对Wed请求处理的具体步骤如下所述。
1.客户端浏览器发送一个请求,
2.这个请求经过核心控制器FilterDispatcher过滤处理,FilterDispatcher将请求转交给相应
的Action代理。
3.Action代理通过配置文件中的信息找到对应的Action类,创建Action对象并调用其
execute()方法。
4.在调用Action的过程前后,涉及相关拦截器的调用,拦截器自动对请求应用通过功能,
5.一旦Action执行完毕,Action代理根据Struts.xml中的配置信息找到execute()方法返
回值对应的结果。
返回结果通常是视图资源或另一个Action。
在Wed应用中加入Struts2的核心类库后,还要修改wed.xml配置文件,在wed.xml文件中配置Struts2的核心控制器FilterDispatcher。
配置文件代码如下。
上述代码中配置了Struts2的核心过滤器,指明过滤器类是FilterDispatcher,过滤器URL模式是匹配所有请求。
如此,该Wed应用就具备了Struts2框架的功能支持。
配置业务控制器
Struts.xml位置
上述代码配置了一个名为add的Action,并指明对应的Action类,在<result>元素中指明返回值为“cal”时对应的跳转页面时add_result.jsp。
运行结果。