2014年12月8日 星期一

建立一個SpringMVC Annotation Project 2-2 (判斷Mobile Tablet Desktop) - Hello World


本文使用 Spring Web model-view-controller (MVC) framework
建立一個簡單的一個Hello World 程式 且可判斷Mobile Tablet Desktop進入這頁面
有三種方式:
 方式二:網站首選項管理
                    使用者可以透過網站偏好管理指出他現在的網址是透過移動式設備或者是電腦桌面進入這網頁

1、請參考建立一個SpringMVC Annotation Project - Hello World此篇文章,以下是以此作為延伸

2、加入 spring-mobile-device.jar
   加入在Maven專案中的pom.xml
請參考建立一個SpringMVC Annotation Project 2-1 (判斷Mobile Tablet Desktop) - Hello World

3. 更改Controller 部分

package com.sample.web.controller;

import org.springframework.mobile.device.site.SitePreference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {

 @RequestMapping(value = { "/", "/welcome**" }, method = RequestMethod.GET)
 public ModelAndView welcomePage(SitePreference sitePreference) {
  ModelAndView model = new ModelAndView();
        if (sitePreference == SitePreference.NORMAL) {
            model.setViewName("home");
        } else if (sitePreference == SitePreference.MOBILE) {
            model.setViewName("home-mobile");
        } else if (sitePreference == SitePreference.TABLET) {
         model.setViewName("home-tablet");
        } else {
         model.setViewName("home");
        }
  return model;

 }

}


4. 更改AppConfig 部分(Spring 設定) - 需繼承 WebMvcConfigurerAdapter 
目錄 : src/main/java/com/sample/config
 
檔名 : AppConfig.java

package com.sample.config;

import java.util.List;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.mobile.device.DeviceResolverHandlerInterceptor;
import org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor;
import org.springframework.mobile.device.site.SitePreferenceHandlerMethodArgumentResolver;
import org.springframework.mobile.device.view.LiteDeviceDelegatingViewResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;


@EnableWebMvc
@Configuration
@ComponentScan({ "com.sample.web.*" })
public class AppConfig extends WebMvcConfigurerAdapter{
 
 /**
  * 設備攔截器
  * @return DeviceResolverHandlerInterceptor
  */
 @Bean
 public DeviceResolverHandlerInterceptor deviceResolverHandlerInterceptor() {
     return new DeviceResolverHandlerInterceptor();
 }
 
 /**
  * 網站偏好攔截器
  * @return SitePreferenceHandlerInterceptor
  */
 @Bean
 public SitePreferenceHandlerInterceptor sitePreferenceHandlerInterceptor() {
     return new SitePreferenceHandlerInterceptor();
 }
 
 /**
  * 網站偏好處理程序
  * @return SitePreferenceHandlerMethodArgumentResolver
  */
 @Bean
 public SitePreferenceHandlerMethodArgumentResolver 
                   sitePreferenceHandlerMethodArgumentResolver() {
     return new SitePreferenceHandlerMethodArgumentResolver();
 }

 /**
  * 加入SPRING攔截器
  */
 @Override
 public void addInterceptors(InterceptorRegistry registry) {
     registry.addInterceptor(deviceResolverHandlerInterceptor());
     registry.addInterceptor(sitePreferenceHandlerInterceptor());
 }

 /**
  * 加入參數解析器
  */
 @Override
 public void addArgumentResolvers(List argumentResolvers) {
   argumentResolvers.add(sitePreferenceHandlerMethodArgumentResolver());
 }

 /**
  * 頁面導向
  * @return LiteDeviceDelegatingViewResolver
  */
 @Bean
 public LiteDeviceDelegatingViewResolver liteDeviceAwareViewResolver() {
     InternalResourceViewResolver delegate = new InternalResourceViewResolver();
     delegate.setPrefix("/WEB-INF/pages/");
     delegate.setSuffix(".jsp");
     LiteDeviceDelegatingViewResolver resolver 
                                         = new LiteDeviceDelegatingViewResolver(delegate);
     resolver.setMobilePrefix("mobile/");
     resolver.setTabletPrefix("tablet/");
     return resolver;
 }
 
}

5.建立 SpringMvcInitializer.java(增加CharacterEncodingFilter)
請參考建立一個SpringMVC Annotation Project 2-1 (判斷Mobile Tablet Desktop) - Hello World

6.JSP部分:

        (A). 放置結構:

     (B). home.jsp :

<html>
<body>
<h1>SpringMVC - Annotation :  Hello World Deskop</h1>
</body>
</html>

    (C).home-mobile.jsp

<html>
<body>
<h1>SpringMVC - Annotation : Hello World Mobile</h1>
</body>
</html>

    (D).home-tablet.jsp

<html>
<body>
<h1>SpringMVC - Annotation :  Hello World Tablet</h1>
</body>
</html>


呈現結果:

結果-電腦
結果-手機

另外如果你想從電腦轉URL轉址到mobile頁面,請在url後面接 ?site_preference=mobile
他會將值存進cookie裡,如圖













其它文章

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...