SpringMVC 返回 html 视图页面,SpringMVC与Servlet,Servlet重定向与转发
1. SpringMVC与Servlet的关系
SpringMVC框架是建立在Servlet之上的,提供各种功能,各种封装,各种方便的同时,它一点儿也没有限制Servlet,我们完全可以在SpringMVC的controller中,完全按照Servlet的方式来写代码,同时还享受SpringMVC提供的方便。所以我们完全没有理由再使用Servlet了。
2. SpringMVC 返回 html 视图页面
SpringMVC的controller一般我们可以配置返回:jsp, json, Velocity, FreeMarker, XML, PDF, Excel等等视图。那么如何返回到 html 视图呢?当然一般我们没有这种必要,但是有一些奇葩场景还是存在的。
上面我们知道SpringMVC没有限制对Servlet有任何的限制,我们完全可以在controller中写servlet形式的代码,而我们知道,我们在Servlet中可以通过 转发和重定向到 html 类型的页面,所以我们也可以在SpringMVC的controller中利用request的转发和response的重定向到html页面,也可以利用PrintWriter直接输出html字符流。这些Servlet中的用法,我们完全可以在SpringMVC中使用。
@RequestMapping(value="/htmlView")
public void htmlView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
// ...
// request.getRequestDispatcher("index.html").forward(request, response);
response.sendRedirect("http://www.baidu.com");
}
@RequestMapping(value="/getPage")
public void writeSubmitHtml(Reader reader, Writer writer, HttpSession session) throws IOException {
User user = (User) session.getAttribute(ConstantConfig.LONGIN_USER);
StringBuffer sbHtml = new StringBuffer();
sbHtml.append("<!doctype html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
sbHtml.append("<title>支付宝即时到账交易接口</title></head><body>"+ user.getNo() +"</body></html>");
writer.write(sbHtml.toString());
}
上面分别使用 request的转发和response的重定向,以及PrintWriter直接输出html字符流,到达springMVC返回 html 类型视图的目的。
3. Servlet重定向与转发
下面的文字,转自:http://blog.sina.com.cn/s/blog_7ffb8dd501013tbg.html
一、请求转发与响应重定向的种类
有两种方式获得Servlet 转发对象(RequestDispatcher):
一种是通过HttpServletRequest的getRequestDispatcher()方法获得,
一种是通过ServletContext的getRequestDispatcher()方法获得。
Servlet 重定向的方法只有一种:HttpServletResponse的sendRedirect()方法。
这三个方法的参数都是一个URL形式的字符串,但在使用相对路径或绝对路径上有所区别。
二、请求转发与响应重定向中路径参数区别
假设通过http://localhost/myApp/cool/bar.do
请求到达该方法所属的Servlet。
1、响应重定向
◆ HttpServletResponse.sendRedirect(String)
参数可以指定为相对路径、绝对路径或其它Web应用。
i:相对路径:response.sendRedirect("foo/stuff.do"),容器相对于原来请求URL的目录加参数来生成完整的URL——http://localhost/myApp/cool/foo/stuff.do。
ii:绝对路径:response.sendRedirect("/foo/stuff.do"),容器相对于Web应用本身加参数建立完整的URL,这是因为重定向response.sendRedirect("")是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器,请求是在服务器外进行的,
所以完整的url是——http://localhost/foo/stuff.do。
iii:其它Web应用:response.sendRedirect("http://www.xxx.com
")容器直接定向到该URL。
2、请求转发
◆HttpServletRequest.getRequestDispatcher(String)
参数可以指定为相对路径或绝对路径。
i:相对路径情况下生成的完整URL与重定向方法相同。
ii:绝对路径与Servlet重定向不同,容器将相对于Web应用的根目录加参数生成完整的URL(即“/”根路径就是相对于虚拟路径)这是因为转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序。即:
request.getRequestDispatcher("/foo/stuff.do")生成的URL是http://localhost/myApp/foo/stuff.do
。
3、 ◆
ServletContext.getRequestDispatcher(String)
参数只能指定为绝对路径,生成的完整URL与HttpServletRequest.getRequestDispatcher(String)相同。
##################################
同理:
JSP 提交表单给 Servlet 路径问题
例如在web.xml中注册如下的servlet:
<servlet>
<servlet-name>addStudent</servlet-name>
<servlet-class>org.mytest.addStudent</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addStudent</servlet-name>
<url-pattern>/servlet/addStudent</url-pattern>
</servlet-mapping>
假如说,你工程名字为HibernateApp3,JSP页面提交表单给servlet时有两种写法:
1.相对路径: <form
action=servlet/addStudent
method=post>...</form>
2. 绝对路径: <form
action="/HibernateApp3/servlet/addStudent"
method=post>...</form>
或者 <form
action="<%=request.getContextPath()
%>/servlet/addStudent"
method=post>...</form>
注意:/代表根目录,如果路径是使用/开头,Tomcat就是webApp那个目录,如果你不是/开头代表你从当前工程的目录开始,例如:webApp/HibernateApp3/
这一点非常重要,很多提交表单时发生的错误都是因为提交路径出错造成的。
附、<a
href>的路径如果是"/"开头,则表示相对于主机,如果不是则表示相对于当前请求
综上所述:
这里最最关键的要能清楚发出请求目的资源的请求是在服务器内部还是服务器外部:内部时,“/”就是项目的虚拟目录;外部时,“/”就是代表主机的根目录
注意:response.sendRedirect 是先返回浏览器,再由浏览器重新定向到某个页面,所以他可以重定向到任何页面,包括其它站点的页面,比如从我们自己的网站,重定向到http://www.baidu.com 都是可以的,这是有其原理决定的。
SpringMVC 返回 html 视图页面,SpringMVC与Servlet,Servlet重定向与转发的更多相关文章
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/03 ...
- spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModelAn ...
- 关于servlet中重定向、转发的地址问题
先写一个正斜杠"/",再判断是服务器使用该地址还是网站使用该地址. 访问网络资源用/,访问硬盘资源用\. 例如: 转发: request.getRequestDispat ...
- @RestController注解下返回到jsp视图页面
spring4.1中添加了@RestController注解很方便,集成了@ResponseBody注解,无需再在每个方法前添加了..但是却发现个问题..之前用@Controller注解的时候经常会如 ...
- @RestController注解下返回到jsp视图页面(转)(转)
这个问题我也遇到过,下面的方法可以试试 蓝萝卜blu @RestController注解下返回到jsp视图页面 spring4.1中添加了@RestController注解很方便,集成了@Respon ...
- RestController注解下返回到jsp视图页面(转)
这个问题我也遇到过,下面的方法可以试试 蓝萝卜blu @RestController注解下返回到jsp视图页面 spring4.1中添加了@RestController注解很方便,集成了@Respon ...
- SpringMVC 的 Controller 返回各种视图的处理方式
SpringMVC 的 Controller 可以返回各种各样的视图.比如 JSP, JSON, Velocity, FreeMarker, XML, PDF, Excel, 还有Html字符流 等等 ...
- springmvc中的视图模型的返回方式
way1:略过; way2:(神似way1)通过在方法的参数中添加一个Model类型的参数,,该参数由spring自动生成传入, 然后在方法内部使用addAttribute()方式添加模型数据, 最后 ...
- springmvc返回视图(解析)
1.什么是视图? 视图就是展示给用户看的结果.可以是很多形式,例如:html.JSP.excel表单.Word文档.PDF文档.JSON数据.freemarker模板视图等等. 2.传统JSP和JST ...
随机推荐
- 说说Web API数据格式化——Json
题外话 一同事离职了,我去上厕所的路上正巧碰到他办完离职手续出来,抱着他的全部家当,最值钱的可能就是那个两块钱的蓝色杯子和手中的雨伞了.在一块儿走向厕所的长长楼道里,我对他说:丫的,你是不是找到别的发 ...
- 浅谈Mysql的MyIsam存储类型
前两年的工作,用NoSql多一些!最近进入了传统的软件开发公司,开始使用Mysql多了!不过对于我这种ABC级别的人来说,还是好好看书吧! 我常常觉得,如果我们不是明白原理,而只是知道一些概念,或者说 ...
- “康园圈--互联网+校园平台“项目之Sprint3
sprint3任务列表 1.部署项目内测版上线,并绑定相应域名. 2.添加测试用的模拟数据. 3.写已实现功能及效果汇报文档. 4.写项目总结博客. 5.记录并分析用户反馈. 看板动态 第一次 第二次 ...
- Sprint 3计划
一.计划目标: 1.完成基本的首页面的信息查询功能 2.学生家教用户注册和登录,将信息存储到数据库 3.完成家教的资格评定设定和个人教学内容备份信息 二.燃尽图 三.项目具体工作细则 待明天工作会议分 ...
- js页面跳转参考代码大全
整理一下JS页面跳转参考代码 第一种: <script language=/"javascript/" type=/"text/javascript/&qu ...
- CSS布局 -- 左右定宽,中间自适应
左右定宽,中间自适应 有几种方法可以实现 改变窗口大小看看? 方案一: 左右设置绝对定位,定宽,中间设置margin-left margin-right 查看 demo <!DOCTYPE h ...
- 解决IIS Web部署 svg/woff/woff2字体 404错误
最近在IIS上部署web项目的时候,发现浏览器总是报找不到woff.woff2字体的错误.导致浏览器加载字体报404错误,白白消耗了几百毫秒的加载时间. 一开始以为是路径的问题,检查发现路径也没错. ...
- csharp: DataTable Rename ColumnName and remove Column
enum ChangeNume { /// <summary> /// 简体 /// </summary> gbk=1, /// <summary> /// 英文 ...
- 才知道百度也提供了智能DNS服务 - 加速乐
http://jiasule.baidu.com/ 智能DNS 依托百度多年积累的高精度DNS识别库,平均只需5秒全球DNS服务器全部生效,百度蜘蛛1秒生效.抗攻击.无限解析记录,免费支持电信.联通. ...
- 【图解】Eclipse下JRebel6.2.0热部署插件安装、破解及配置【转】
标签: 这两天在做后台管理系统,前端框架用Bootstrap,后端用SpringMVC+Velocity.在开发过程中,经常需要对界面进行微调,调整传参等,每次更改一次java代码,就得重新部署一次, ...