1. 程式人生 > >最全面SSM三大框架之Spring MVC篇

最全面SSM三大框架之Spring MVC篇

Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動型別的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,Spring Web MVC也是要簡化我們日常Web開發的。

先看專案目錄,基於此目錄配置:
<code>這裡寫圖片描述</code>

    -

Spring MVC之使用配置:

Spring-MVC.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"
>
<!-- 自動掃描該包,使SpringMVC認為包下用了@controller註解的類是控制器 --> <context:component-scan base-package="com.ws.webp.controller" /> <!--避免IE執行AJAX時,返回JSON出現下載檔案 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
>
<property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 啟動SpringMVC的註解功能,完成請求和註解POJO的對映 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON轉換器 --> </list> </property> </bean> <!-- 定義跳轉的檔案的前後綴 ,檢視模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 這裡的配置我的理解是自動給後面action的方法return的字串加上字首和字尾,變成一個 可用的url地址 --> <!-- <property name="prefix" value="/WEB-INF/jsp/" /> --> <property name="prefix" value="/pages/" /> <property name="suffix" value=".jsp" /> <property name="order" value="1" /> </bean> <!-- 配置檔案上傳,如果沒有使用檔案上傳可以不用配置,當然如果不配,那麼配置檔案中也不必引入上傳元件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 預設編碼 --> <property name="defaultEncoding" value="utf-8" /> <!-- 檔案大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 記憶體中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> <!-- 擴充了註解驅動,可以將請求引數繫結到控制器引數 --> <mvc:annotation-driven/> <!-- 啟用基於Spring的註解 --> <context:annotation-config/> <!-- 靜態資源處理 --> <mvc:resources mapping="/script/**" location="/script/" /> <mvc:resources mapping="/app/**" location="/app/" /> <mvc:resources mapping="/css/**" location="/css/" /> <mvc:resources mapping="/images/**" location="/images/" /> <!-- 國際化配置 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename"> <value>message</value> </property> <property name="defaultEncoding"> <value>UTF-8</value> </property> </bean> <!-- 定義跳轉的檔案的前後綴 ,檢視模式配置 FreeMarker模板 --> <!-- <bean id="freemarkerViewResolver" class="com.lava.common.web.springmvc.SimpleFreeMarkerViewResolver" > <property name="prefix" value="/pages/" /> <property name="suffix" value=".jsp" /> <property name="contentType" value="text/html; charset=UTF-8"/> <property name="exposeRequestAttributes" value="true"/> <property name="exposeSessionAttributes" value="true"/> <property name="exposeSpringMacroHelpers" value="true"/> <property name="order" value="0" /> </bean> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value=""/> <property name="freemarkerSettings"> <props> <prop key="tag_syntax">auto_detect</prop> <prop key="template_update_delay">5</prop> <prop key="defaultEncoding">UTF-8</prop> <prop key="url_escaping_charset">UTF-8</prop> <prop key="locale">zh_CN</prop> <prop key="boolean_format">true,false</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <prop key="date_format">yyyy-MM-dd</prop> <prop key="time_format">HH:mm:ss</prop> <prop key="number_format">0.######</prop> <prop key="whitespace_stripping">true</prop> 空值處理<prop key="classic_compatible">true</prop> <prop key="auto_import">/WEB-INF/ftl/spring.ftl as s</prop> </props> </property> </bean> --> <!-- added by wangshuo end --> </beans>

註釋很清楚。

 <mvc:resources mapping="/script/**" location="/script/" />  
 <!-- 上面配置後,即可在JSP頁面中引入script檔案件下的js檔案 -->
<script type="text/javascript" src="<%=request.getContextPath() %>/script/jquery-1.9.1.js"></script>
注意:在使用SpringMVC框架的時候配置了靜態資源訪問<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" />後,發現訪問頁面出現404錯誤,注意是訪問頁面404,並不是靜態資源訪問404,後來發現我的spring-servlet.xml配置檔案中的啟用spring mvc 註解使用的是<context:annotation-config />,後來新增<mvc:annotation-driven/>後訪問成功!

web.xml 配置:

<!-- Spring MVC servlet -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <!-- 此處可以可以配置成*.do,對應struts的字尾習慣 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

最常用的檢視解析器:InternalResourceViewResolver

<!-- 定義跳轉的檔案的前後綴 ,檢視模式配置-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 這裡的配置我的理解是自動給後面action的方法return的字串加上字首和字尾,變成一個 可用的url地址 -->
        <property name="prefix" value="/WEB-INF/jsp/" />    
        <property name="suffix" value=".jsp" />
        <property name="order" value="1" />
    </bean>

當處理器返回“index”時,InternalResourceViewResolver解析器會自動新增字首和字尾:/WEB-INF/jsp/index.jsp

注意:這裡的order表示檢視解析的優先順序,數目越小優先順序越大(即:0為優先順序最高,所以優先進行處理檢視),

InternalResourceViewResolver在專案中的優先順序必須設定為最低,也就是order要最大。不然它會阻礙其他
檢視解析器。為什麼呢?

解釋如下:
我們知道,當處理器返回邏輯檢視時(也就是return “string”),要經過檢視解析器鏈,前面的解析器能處理的,就不會繼續往下傳播。
如果不能處理就要沿著解析器鏈繼續尋找,直到找到合適的檢視解析器

但是對於解析器InternalResourceViewResolver來說,不管能不能解析它都不會返回null,也就是說它攔截了所有的邏輯檢視,讓後續的解析器得不到執行,所以InternalResourceViewResolver必須放在最後。

SpringMVC常用註解

程式碼示例:

@Controller  
@RequestMapping("/login")  
public class LoginController {
    private static Logger logger = Logger.getLogger(LoginController.class); 
    @Resource
    private IPersonService personService;

    @RequestMapping("/person")
    @ResponseBody
    private Object register(Person person){

       logger.debug("ws--register-------"); 
       person.setState(0);
       return ResponseUtils.sendSuccess(this.personService.registerPerson(person));      
    }

1、@Controller
@Controller 用於標記在一個類上,使用它標記的類就是一個SpringMVC Controller 物件。分發處理器將會掃描使用了該註解的類的方法,並檢測該方法是否使用了@RequestMapping 註解。@Controller 只是定義了一個控制器類,而使用@RequestMapping 註解的方法才是真正處理請求的處理器。

2、@RequestMapping

RequestMapping是一個用來處理請求地址對映的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

RequestMapping註解有六個屬性,下面我們把她分成三類進行說明(下面有相應示例)。

1、 value, method;

value: 指定請求的實際地址,指定的地址可以是URI Template 模式(後面將會說明);

method: 指定請求的method型別, GET、POST、PUT、DELETE等;

2、consumes,produces

consumes: 指定處理請求的提交內容型別(Content-Type),例如application/json, text/html;

produces: 指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回;

3、params,headers

params: 指定request中必須包含某些引數值是,才讓該方法處理。

headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。

3、@Resource和@Autowired

@Resource和@Autowired都是做bean的注入時使用,其實@Resource並不是Spring的註解,它的包是javax.annotation.Resource,需要匯入,但是Spring支援該註解的注入。

1、共同點

兩者都可以寫在欄位和setter方法上。兩者如果都寫在欄位上,那麼就不需要再寫setter方法。

2、不同點

(1)@Autowired

@Autowired為Spring提供的註解,需要匯入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
@Autowired註解是按照型別(byType)裝配依賴物件,預設情況下它要求依賴物件必須存在,如果允許null值,可以設定它的required屬性為false。如果我們想使用按照名稱(byName)來裝配,可以結合@Qualifier註解一起使用。
2)@Resource

@Resource預設按照ByName自動注入,由J2EE提供,需要匯入包javax.annotation.Resource。@Resource有兩個重要的屬性:name和type,而Spring將@Resource註解的name屬性解析為bean的名字,而type屬性則解析為bean的型別。所以,如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不制定name也不制定type屬性,這時將通過反射機制使用byName自動注入策略。

4、@ModelAttribute和 @SessionAttributes

代表的是:該Controller的所有方法在呼叫前,先執行此@ModelAttribute方法,可用於註解和方法引數中,可以把這個@ModelAttribute特性,應用在BaseController當中,所有的Controller繼承BaseController,即可實現在呼叫Controller時,先執行@ModelAttribute方法。

@SessionAttributes即將值放到session作用域中,寫在class上面。

5、@PathVariable

用於將請求URL中的模板變數對映到功能處理方法的引數上,即取出uri模板中的變數作為引數。

6、@requestParam

@requestParam主要用於在SpringMVC後臺控制層獲取引數,類似一種是request.getParameter(“name”),它有三個常用引數:defaultValue = “0”, required = false, value = “isApp”;defaultValue 表示設定預設值,required 銅過boolean設定是否是必須要傳入的引數,value 值表示接受的傳入的引數型別。
7、@ResponseBody

作用: 該註解用於將Controller的方法返回的物件,通過適當的HttpMessageConverter轉換為指定格式後,寫入到Response物件的body資料區。

使用時機:返回的資料不是html標籤的頁面,而是其他某種格式的資料時(如json、xml等)使用;
8、@Component

相當於通用的註解,當不知道一些類歸到哪個層時使用,但是不建議。
9、@Repository

用於註解dao層,在daoImpl類上面註解。

Spring MVC 向頁面傳值-Map、Model和ModelMap

 @RequestMapping("/test")
 public String test(Map<String,Object> map,Model model,ModelMap modelMap){

     map.put("names", Arrays.asList("caoyc","zhh","cjx"));
     model.addAttribute("time", new Date());
     modelMap.addAttribute("city", "ChengDu");
     modelMap.put("gender", "male");
     return "hello";
 }

jsp頁面

time:${param.time}
names:${param.names }
city:${param.city }
gender:${requestScope.gender }

spring mvc 請求轉發和重定向

重定向和轉發有一個重要的不同:當使用轉發時,JSP容器將使用一個內部的方法來呼叫目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器傳送一個新的頁面請求。因為,當你使用重定向時,瀏覽器中所顯示的URL會變成新頁面的URL, 而當使用轉發時,該URL會保持不變。重定向的速度比轉發慢,因為瀏覽器還得發出一個新的請求。同時,由於重定向方式產生了一個新的請求,所以經過一次重 定向後,request內的物件將無法使用。

怎麼選擇是重定向還是轉發呢?通常情況下轉發更快,而且能保持request內的物件,所以他是第一選擇。但是由於在轉發之後,瀏覽器中URL仍然指向開始頁面,此時如果過載當前頁面,開始頁面將會被重新呼叫。如果你不想看到這樣的情況,則選擇轉發。

轉發和重定向的區別

不要僅僅為了把變數傳到下一個頁面而使用session作用域,那會無故增大變數的作用域,轉發也許可以幫助你解決這個問題。

重定向:以前的request中存放的變數全部失效,並進入一個新的request作用域。

轉發:以前的request中存放的變數不會失效,就像把兩個頁面拼到了一起。

        //1、請求重定向:// 重定向到toList請求


        //<1> 不帶引數的重定向
        //方式一:使用ModelAndView
                    return new ModelAndView("redirect:/toList");
        //方式二:返回String
                    return "redirect:/ toList"; 

         //<2> 帶引數的重定向
         //方式一:自己手動拼接url

                    return new ModelAndView("redirect:/toList?param1="+value1+"&param2="+value2);

                   // 弊端:傳中文可能亂碼

        // 方式二:用RedirectAttributes類
                      //使用addAttribute方法,自動給你拼接url

                     // 使用方法:

                      public String save(@ModelAttribute("form") Bean form,RedirectAttributes attr){

                          ...

                          attr.addAttribute("param", value);
                          return "redirect:/toList";
                      }

                      //在toList方法中可以通過獲得引數的方式獲取引數




         //2、請求轉發:// 轉發到toList請求

        //<1> 不帶引數的轉發
        //方式一:使用ModelAndView
                    return new ModelAndView("forward:/toList");
        // 方式二:返回String
                    return "forward:/toList"; 

        //<2> 帶引數的轉發
        //方式一:使用ModelAndView
                    return new ModelAndView("forward:/toList?param1="+value1+"&param2="+value2");
       // 方式二:返回String
          return "forward:/ toList?param1="+value1+"&param2="+value2"; 

SpringMVC存取Session的兩種方法

//一
    @Controller  
    public class ManagerController {  

        @Resource  
        private ManagerService managerServiceImpl;  

        @RequestMapping(value = "manager/login.do",method = RequestMethod.GET)    
        public ModelAndView login(ManagerModel managerModel,HttpSession httpSession){  

            ManagerModel manager = managerServiceImpl.getManager(managerModel);  
            if(manager!=null){  
                manager.setPassword("");  
                httpSession.setAttribute("manager", manager);  
                return new ModelAndView(new RedirectView("../admin/main.jsp"));  
            }else{  
                return new ModelAndView(new RedirectView("../admin/login.jsp"));  
            }  
        }  

        @RequestMapping(value = "manager/logout.do",method = RequestMethod.GET)  
        public String logout(HttpSession httpSession){  
            httpSession.getAttribute("manager");  
            return "success";  
        }  
    }  

//二
    @Controller  
    @SessionAttributes("manager")  
    public class ManagerController {  

        @Resource  
        private ManagerService managerServiceImpl;  

        @RequestMapping(value = "manager/login.do",method = RequestMethod.GET)    
        public ModelAndView login(ManagerModel managerModel,ModelMap model){  

            ManagerModel manager = managerServiceImpl.getManager(managerModel);  
            if(manager!=null){  
                manager.setPassword("");  
                model.addAttribute("manager", manager);  
                return new ModelAndView(new RedirectView("../admin/main.jsp"));  
            }else{  
                return new ModelAndView(new RedirectView("../admin/login.jsp"));  
            }  
        }  

        @RequestMapping(value = "manager/logout.do",method = RequestMethod.GET)  
        public String logout(@ModelAttribute("manager")ManagerModel managerModel){  
            return "success";  
        }  
    }  

SpringMVC配置攔截器示例

springmvc.xml:

 <!--攔截 -->
    <mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/login/**" />
        <bean class="com.lava.lavafaq.springmvc.LoginInterceptor">
         <property name="excludeUrls">
                <list>
                   <value>/login/loginHtml</value>
                    <value>/login/login</value>                 
                </list>
            </property>   
        </bean>
    </mvc:interceptor>
 </mvc:interceptors> 
package com.lava.lavafaq.springmvc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.UrlPathHelper;


public class LoginInterceptor implements HandlerInterceptor {

    private static Logger logger = Logger.getLogger(LoginInterceptor.class); 
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        // TODO Auto-generated method stub
             // 不在驗證的範圍內
          String uri = getURI(request);             
           if (exclude(uri)) {        
             return true;
           }

        HttpSession session = request.getSession();
        String username = (String) session.getAttribute("username");
        logger.info("Pedirect to login page session username="+username);
        if (username == null|| username.length()==0 ) {          
            logger.info("Pedirect to login page");
            response.sendRedirect(getLoginUrl(request,"/login/loginHtml"));
            return false;
        }
        return true;

    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub

    }


    /**
     * 獲得第三個路徑分隔符的位置
     * 
     * @param request
     * @throws IllegalStateException
     *             訪問路徑錯誤,沒有三(四)個'/'
     *    http://localhost:8080/lavaFAQ/login/loginHtml       
     *    getURI=/login/loginHtml uri=/lavaFAQ/login/loginHtml ctxPath=/lavaFAQ
     */
    private static String getURI(HttpServletRequest request)
            throws IllegalStateException {
        UrlPathHelper helper = new UrlPathHelper();
        String uri = helper.getOriginatingRequestUri(request);
        String ctxPath = helper.getOriginatingContextPath(request);
        int start = 0;
        if (!StringUtils.isBlank(ctxPath)) {
            start = ctxPath.length();
        }
        logger.info("getURI="+uri.substring(start)+" uri="+uri+" ctxPath="+ctxPath);
        return uri.substring(start);
    }

    private boolean exclude(String uri) {
        if (excludeUrls != null) {
            for (String exc : excludeUrls) {
                if (uri.startsWith(exc)) {
                    return true;
                }
            }
        }
        return false;
    }
    //lavaFAQ---request.getContextPath()    
    private String getLoginUrl(HttpServletRequest request,String loginUrl) {
        StringBuilder buff = new StringBuilder();
        if (loginUrl.startsWith("/")) {
            String ctx = request.getContextPath();
            if (!StringUtils.isBlank(ctx)) {
                buff.append(ctx).append(loginUrl);
            }
        }
        logger.info("getLoginUrl="+buff.toString());
        return buff.toString();
    }

    private String[] excludeUrls;

    public void setExcludeUrls(String[] excludeUrls) {
        this.excludeUrls = excludeUrls;
    }

}
//登入請求   
    @RequestMapping("/login")   
    private String login(Person person,ModelMap modelMap,HttpSession httpSession){      
        String result = this.personService.loginPerson(person);
        if(result.equals(Canstants.loginSuccess)){
            //登入成功儲存Session         
             httpSession.setAttribute("username", person.getMail()); 
             return "homepage"; 
        }
         modelMap.addAttribute("result",result);        
       return "redirect:/login/loginHtml";   
    }

spring-mvc的Conveter和Formatter

Spring的Converter可以將一種型別轉換成另一種型別。在使用時,必須編寫一個實現org.springframework.core.convert.converter.Converter介面的java類。這個介面的宣告如下

public interface Converter<S, T> {
    T convert(S var1);
}

//這裡的S表示源型別,T表示目標型別。下面展示了一個將String型別轉換成Date型別的Converter
public class DateConverter implements Converter<String, Date> {

    public static final DateFormat DF_LONG = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss");
    public static final DateFormat DF_SHORT = new SimpleDateFormat("yyyy-MM-dd");
    public static final DateFormat DF_YEAR = new SimpleDateFormat("yyyy");
    public static final DateFormat DF_MONTH = new SimpleDateFormat("yyyy-MM");
    /**
     * 短型別日期長度
     */
    public static final int SHORT_DATE = 10;

    public static final int YEAR_DATE = 4;

    public static final int MONTH_DATE = 7;

    @Override
    public Date convert(String text) {
        text = text.trim();
        if (!StringUtils.hasText(text)) {
            return null;
        }

        try {
            if (text.length() <= YEAR_DATE) {
                return DF_YEAR.parse(text);
            } else if (text.length() <= MONTH_DATE) {
                return DF_MONTH.parse(text);
            } else if (text.length() <= SHORT_DATE) {
                return DF_SHORT.parse(text);
            } else {
                return DF_LONG.parse(text);
            }
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        return null;
    }
}

為了使用Spring MVC應用程式定製的Converter,需要在配置檔案中新增一個conversionService bean。Bean的類名稱必須為org.springframework.context.support.ConversionServiceFactoryBean。這個bean必須包含一個converters屬性,它列出要在應用程式中使用的所有定製Converter。

  <!-- 日期全域性轉換配置 -->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">    
         <property name="converters">    
             <list>    
                 <bean class="com.lava.lavafaq.springmvc.DateConverter" />    
             </list>    
         </property>    
     </bean>  

之後,還需要給annotation-driven元素的conversion-service屬性賦上bean名稱,如下

 <mvc:annotation-driven conversion-service="conversionService" />  

Formatter和Converter一樣,也是將一種型別轉換成另一種型別。但是,Formatter的源型別必須是一個String。不在追述。

相關推薦

全面SSM三大框架Spring MVC

Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動型別的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,Spring Web MV

Java框架Spring MVC是如何實現MVC模式的?

Spring MVC是如何實現MVC模式的? SpringMVC 中並沒有涉及有關於 Controller 介面規範的實現,SpringMVC 是通過呼叫 Handler 來實現 Controller 這一層的。 SpringMVC 使用了介面卡模式,前端控制器使用 Handle

Java框架Spring MVC的訊息處理流程是怎麼樣的?

訊息處理流程圖 訊息處理流程 使用者傳送請求至前端控制器 DispatcherServlet DispatcherServlet 收到請求呼叫 HandlerMapping 處理器對映器,處理器對映器根據請求 url 找到具體的處理器,生成處理器物件及處

三大框架Spring (初級學習 2)

1. AOP * AOP:Aspect Oriented Programming,面向切面程式設計 * * 在日誌和異常處理方面很常用 * *

java三大框架spring事務傳播行為

<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre code_snippet_id=

三大框架Spring(1)

什麼是框架? 框架就是一個重複程式碼的集合。可以使用框架來解決程式中集中、重複和通用的模組程式碼,提高程式設計師的開發效率,縮短專案週期。 Spring Spring是一個輕量級的框架,並且是開源的,主要作用是能夠整合現階段所有的主流框架,負責所有框架的排

dotNet程序員的Java爬坑旅(三)spring MVC

www. let ref ide filter ESS pro enc require 使用maven構建springMVC項目,開發工具為IDEA 一、構建Maven項目,模板為WebApp 二、在pom文件中配置SpringMvc配置(springMvc需要以來serv

SSM三大框架環境搭建Spring

前言:本文是在SSM三大框架環境搭建之mybatis基礎上寫的,如果有什麼疑問請點選前面的超連結參考之前的帖子。 上文我們已經寫好了mybatis的所有配置。 接下來我們來整體結合SSM三大框架的基礎上測試我們縮寫的這個小demo。 1.寫Service介面 p

SSM三大框架整合詳細教程(Spring+SpringMVC+MyBatis)

json轉換 需要 acc log4 err ppi junit測試 日誌 enc 使用 SSM ( Spring 、 SpringMVC 和 Mybatis )已經有三個多月了,項目在技術上已經沒有什麽難點了,基於現有的技術就可以實現想要的功能,當然肯定有很多可以改進的地

搭建SSM框架Spring

管理 com 銷毀 系列 try 要去 nco cati 慢慢 作為一枚大四準備畢業的學生,最重要的事便是畢業設計,前些日子剛剛拿到畢設題目:“3D網絡圖:面向網絡結構數據的可視化軟件設計”,(⊙o⊙)…,怎麽說哪,看到題目就是一頭霧水(前幾屆不都是學生選課系統,學生教

SSM三大框架整合配置(Spring+SpringMVC+MyBatis)

lean source reat ati quest req 繼續 時間 per web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2

SSM三大框架環境搭建SpringMVC

第一步:基於瀏覽器傳送請求給伺服器之後,伺服器啟動訪問的web.xml配置前端控制器(DispatcherServlet) <!-- 配置Spring MVC 前端控制器 --> <!-- 註冊前端控制器 --> <servlet&

SSM框架Spring的常用註解超級簡潔版

1.註冊物件 @Component("user") @Service("user") //service層 @Controller("user") //web層 @Repository("user") //dao層 2.修改物件的作用範圍 @Scope(scopeName="protot

JavaWeb學習路——SSM框架Spring(四)

SSM框架學習-Spring01 1,.Spring介紹 Spring 是一個開源框架,是為了解決企業應用程式開發複雜性而建立的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個元件,同時為 J2EE 應用程式開發提供整合的框架。 2.功能 1)

SSM框架 Spring-AOP(面向切面程式設計)

1AOP概述 AOP(Aspect-Oriented Programming,面向切面程式設計):是一種新的方法論,是對傳統 OOP(Object-Oriented Programming,面向物件程式設計)的補充。兩種程式設計思想。是對面向物件程式設計的一種補充。 面向切

SSM框架Spring-AOP的理解與基本使用

logger SSM 框架學習 (Spring篇) 一、我對AOP的理解 什麼是切面程式設計:我們把一段程式執行流程比喻成一條水果大小分揀流水線,而AOP的思想就是可以在這個流水線的某個點設定一個檢查點,或者說大小過濾器,不同的過濾器能過濾不同大小的

Eclipse Maven建web專案 與SSM三大框架整合教程(Spring+SpringMVC+MyBatis)

Eclipse Maven建web專案 地址:http://dead-knight.iteye.com/blog/1841675 1.建立Maven專案: 點選“File”選單,或者通過工具欄的“New”建立Project,如下圖所示: 選擇Ma

一步步教你整合SSM框架Spring MVC+Spring+MyBatis)詳細教程

SSM(Spring+SpringMVC+Mybatis)是目前較為主流的企業級架構方案,不知道大家有沒有留意,在我們看招聘資訊的時候,經常會看到這一點,需要具備SSH框架的技能;而且在大部分教學課堂中,也會把SSH作為最核心的教學內容。 但是,我們在實際應用中發現,Spr

JavaWeb學習路——SSM框架Spring(六)

AOP:面向切面程式設計 1.介紹——AOP:面向切面程式設計。正常程式都是從上到下執行相關程式碼,aop是在縱向執行流程中新增橫切面, 從左到右的關係。不需要修改成語原有程式碼,它將程式碼動態的切入到類的指定方法、指定位置上的程式設計思想就是面向切面的程式設計。 特點:

SSM三大框架整合詳細教程(Spring+SpringMVC+MyBatis)

Spring Springmvc Mybatis--ssm的整合 一、搭建環境sts工具:   根據上圖建立springproject   上圖為專案結構 在此基礎上進行搭建ssm專案