Jersey中的基于MVC模式的JSP跳转方式:Viewable与request转发。

本文介绍了一个基于Maven的Jersey项目,如何实现REST请求到JSP页面的跳转。通过引入jersey-mvc和jersey-mvc-jsp库,创建ResourceConfig配置类并注册相关组件,实现Viewable对象或request转发到JSP。项目结构包括一个jersey资源映射配置类和一个用于request转发的demo.jsp页面。在JSP中,通过getAttribute方法获取Viewable传递的对象内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


     由于是基于maven的项目,所以基础的spring与jersey包都可以从mavenrepository网站得到:http://mvnrepository.com/ 

     除此之外,要想实现基于JSP模板的MVC模式jersey结构,当然还需要jersey-mvc-x.jar 和jersey-mvc-jsp-x.jar。都可以在mavenrepository中得到。


    目的:通过一个小demo,来实现viewable或者request请求转发实现jersey的rest请求到JSP页面的跳转过程的说明。

    项目结构:

    

A:创建jersey资源映射配置类ResourceConfig

public class RestApplication extends ResourceConfig {
    public RestApplication() {  
      

        //服务类所在的包路径  
        packages("com.xiansky.action");  
        //注册JSON转换器  
        register(JacksonJsonProvider.class); 
        register(JspMvcFeature.class);                                  //注册MVC支持
        property(JspMvcFeature.TEMPLATE_BASE_PATH, "/");//jsp文件所在位置,当前JSP文件是在项目根目录下

       }  
}

B:配置jersey相关的web.xml

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath*:applicationContext.xml
		</param-value>
	</context-param>

	<servlet>
		<servlet-name>jerseyServlet1</servlet-name>
		<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>javax.ws.rs.Application</param-name>
			<param-value>com.xiansky.action.RestApplication</param-value>
		</init-param>
        <init-param>  
            <param-name>com.sun.jersey.config.feature.Redirect</param-name>  
            <param-value>true</param-value>  
        </init-param> 
		  <init-param>
            <param-name>jersey.config.servlet.filter.forwardOn404</param-name>
            <param-value>true</param-value>
        </init-param>
		<!-- <load-on-startup>1</load-on-startup> -->
	</servlet>
	<servlet-mapping>
		<servlet-name>jerseyServlet1</servlet-name>
		<url-pattern>/jsp/*</url-pattern>
	</servlet-mapping>
</web-app>


C:jersey控制器action的编写:

@Controller("viewJsp")
@Path("/view")
public class ViewJsp {

    Log log = LogFactory.getLog(ViewJsp.class);
   //通过request请求转发方式从rest风格的请求跳转到jsp页面-传递request域参数
    @GET
    @Path("/dispatcher")
    public void renderToJSP(@Context HttpServletRequest request,@Context HttpServletResponse response){
        log.info("request dispatcher...to jsp");
        try {
            request.setAttribute("demo", "I LOVE LIUZHOU");
            //请求转发
            request.getRequestDispatcher("/demo.jsp").forward(request, response);
        } catch (Exception e) {
            log.error(e+"request dispatcher fail");
        }
    }
    //通过viewable进行基于MVC模式的页面跳转,并可以封装参数到request域或者到viewable构造器第二个参数object(model)中
    @GET
    @Path("/template/{city}")
    @Produces(MediaType.TEXT_HTML)
    public Viewable loveCityName(@PathParam("city")String cityName,@Context HttpServletRequest request){
        log.info("use viewable tech render to jsp page >>>>>>>"+ cityName);
        //可以将属性设置到request域中,跳转后的jsp页面亦可从request域中取出
        request.setAttribute("demo", "TOJSP");
        //jersey viewable进行Jsp页面跳转
        return new Viewable("/index",cityName);
    }
    
}

D:跳转到的Jsp页面,获取参数并显示

demo.jsp ->request转发的页面。

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <%
      String info  = String.valueOf(request.getAttribute("demo"));
  %>
  <span><%=info %></span>
</body>
</html>

index.jsp -->viewable跳转到的jsp页面

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <%
     String city  = String.valueOf(request.getAttribute("model"));  //此处注意通过new Viewable("..",object);request只能通过指定'model'属性获取值
     String info =  String.valueOf(request.getAttribute("demo"));
  %>
  <span>I LOVE <%=city %>, <%=info %></span>
</body>
</html>
E:测试:


总结:

         重点是在A中的recourseConfig中对JSPMVC一些基础类进行注册和jsp基路径进行配置,以至于在后面通过viewable跳转jsp页面时候可以查找得到。还有通过viewable跳转到jsp中,在jsp中通过getAttribute方法只能获取指定的“model”属性,才能得到viewable传递过来的object内容。

该工程源代码:http://pan.baidu.com/s/1c2t7lg0

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值