欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的Struts框架中登陸功能的實(shí)現(xiàn)和表單處理器的使用

 更新時(shí)間:2015年12月11日 08:49:33   作者:永遠(yuǎn)的晴天  
這篇文章主要介紹了Java的Struts框架中登陸功能的實(shí)現(xiàn)和表單處理器的使用,Struts框架是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下

實(shí)現(xiàn)Struts登錄
1、jar包拷貝
首先是建立java web項(xiàng)目,之后打開(kāi)我們我們下載好strtus框架,Struts-1.2.9-bin文件夾和struts-1.2.9.src源文件文件夾。在bin文件夾中的lib文件中拷貝struts的jar包,拷貝到我們自己項(xiàng)目struts_login –>lib文件夾下。

2、web.xml文件配置
找到Struts-1.2.9-bin中Struts-1.2.9-bin-->webapps下的struts實(shí)例struts-blank中的struts-1.2.9-bin\webapps\struts-blank\WEB-INF下的web.xml文件,復(fù)制配置對(duì)ActionServlet的配置,粘貼到我們的項(xiàng)目struts_login的WEB-INF下的web.xml中,代碼如下所示。主要是對(duì)struts自帶的ActionServlet進(jìn)行配置。

<servlet> 
  <servlet-name>action</servlet-name> 
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
  <init-param> 
   <param-name>config</param-name> 
   <param-value>/WEB-INF/struts-config.xml</param-value> 
  </init-param> 
  <init-param> 
   <param-name>debug</param-name> 
   <param-value>2</param-value> 
  </init-param> 
  <init-param> 
   <param-name>detail</param-name> 
   <param-value>2</param-value> 
  </init-param> 
  <load-on-startup>2</load-on-startup> 
 </servlet> 
  
  
 <!--Standard Action Servlet Mapping --> 
 <servlet-mapping> 
  <servlet-name>action</servlet-name> 
  <url-pattern>*.do</url-pattern> 
 </servlet-mapping> 

3、在項(xiàng)目中建立自己的ActionForm
在項(xiàng)目中建立自己的ActionForm,繼承struts框架中已經(jīng)寫好的ActionForm,在ActionForm設(shè)置用到的數(shù)據(jù),并且要和我們界面上設(shè)置的名稱一致。因?yàn)槲覀冊(cè)谔峤槐韱蔚臅r(shí)候,所有的請(qǐng)求都會(huì)放到ActionForm中。建立登錄的ActionForm,LoginActionForm.java代碼如下所示。

package com.bjpowernode.struts; 
import org.apache.struts.action.ActionForm; 
  
/** 
 * 登錄ActionForm,負(fù)責(zé)表單收集數(shù)據(jù). 
 * 表單的屬性必須和ActionForm中的get和set的屬性一致. 
 * @author summer 
 * 
 */ 
public classLoginActionForm extends ActionForm { 
  
  //用戶名。 
  private Stringusername; 
  //密碼。 
  private String password; 
   
  //設(shè)置密碼。 
  public voidsetPassword(Stringpassword) { 
    this.password = password; 
  } 
  //得到用戶名。 
  public StringgetUsername() { 
    return username; 
  } 
  //設(shè)置用戶名。 
  public voidsetUsername(Stringusername) { 
    this.username = username; 
  } 
  //得到密碼。 
  public StringgetPassword() { 
   
    return password; 
  } 
   
} 

4、建立自己的Action
建立自己的Action,同時(shí)繼承struts框架中的org.apache.struts.action.Action,重載父類的execute方法。在這里完成取出表單中的數(shù)據(jù)。通過(guò)CalActionFormcalForm= (CalActionForm)(CalActionForm)form;(struts框架中已經(jīng)幫我們封裝好了,我們?nèi)ナ褂镁涂梢粤耍﹣?lái)取得表單中的值。經(jīng)過(guò)判斷后,進(jìn)行相應(yīng)的操作,跳轉(zhuǎn)到相應(yīng)的頁(yè)面。Action的功能是負(fù)責(zé)拿到表單數(shù)據(jù)和調(diào)用業(yè)務(wù)邏輯后進(jìn)行頁(yè)面跳轉(zhuǎn)。建立登陸的Action類,LoginAction.java類,調(diào)用業(yè)務(wù)邏輯類UserManager的login方法。代碼如下所示。

packagecom.bjpowernode.struts; 
  
importjavax.servlet.http.HttpServletRequest; 
importjavax.servlet.http.HttpServletResponse; 
  
importorg.apache.struts.action.Action; 
importorg.apache.struts.action.ActionForm; 
importorg.apache.struts.action.ActionForward; 
importorg.apache.struts.action.ActionMapping; 
  
/** 
 *登錄Action 
 *負(fù)責(zé)取得表單數(shù)據(jù),調(diào)用業(yè)務(wù)邏輯,返回轉(zhuǎn)向信息. 
 * 
 * @author summer 
 * 
 */ 
public classLoginAction extendsAction { 
  
   @Override 
   public ActionForward execute(ActionMappingmapping,ActionForm form, 
          HttpServletRequest request, HttpServletResponseresponse) 
          throws Exception { 
  
  
       LoginActionForm laf = (LoginActionForm)form; 
       Stringusername = laf.getUsername(); 
       Stringpassword = laf.getPassword(); 
        
       UserManager userManager = newUserManager(); 
       //傳遞用戶名和密碼 
       try 
       { 
          userManager.login(username, password); 
          request.setAttribute("username", username); 
          return mapping.findForward("success"); 
       }catch(UserNotFoundException e) 
       { 
          e.printStackTrace(); 
          request.setAttribute("msg","用戶不能找到,用戶名稱=[" +username +"+]"); 
       }catch(PasswordErrorException e) 
       { 
          e.printStackTrace(); 
          request.setAttribute("msg","密碼錯(cuò)誤"); 
       } 
        
       return mapping.findForward("error"); 
   } 
  
} 

5、  建立struts-config.xml
作為Struts框架的核心描述,struts-config.xml可以說(shuō)“一切盡在掌握”。它不但描述了MVC模型,定義所有視圖層和控制層之間的接口(ActionForm),與控制層和模型層的接口(Action)進(jìn)行結(jié)合,而且可以定義一些附加組件,如國(guó)際化信息資源排至文件,標(biāo)簽庫(kù)信息等。
仍然是站在巨人的肩膀上,將我們下載的struts  bin文件夾中的struts-config.xml文件復(fù)制到我們的項(xiàng)目的WEB-INF中,刪除struts-config.xml中的注釋部分。把Action和ActionForm配置起來(lái)。ActionForm放到<form-beans></form-beans>中,Action配置放到<action-mappings></action-mappings>中,struts-config.xml配置代碼如下所示。

 <?xml version="1.0" encoding="ISO-8859-1" ?> 
  
<!DOCTYPE struts-config PUBLIC 
     "-//Apache Software Foundation//DTD Struts Configuration1.2//EN" 
     "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> 
  
  
<struts-config> 
  <form-beans> 
    <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/> 
  </form-beans> 
   
  <action-mappings> 
    <action path="/login" 
       type="com.bjpowernode.struts.LoginAction" 
       name="loginForm" 
       scope="request" 
       > 
       <forward name="success" path="/login_success.jsp"/> 
       <forward name="error" path="/login_error.jsp"/> 
    </action> 
  </action-mappings>  
</struts-config> 

其中form-beans元素中可以定義0個(gè)或1個(gè)以上的form-bean元素,每個(gè)form-bean被認(rèn)為是一個(gè)ActionForm對(duì)象,name屬性表示form-bean元素的名稱,type屬性指定其類名和路徑。
Action-mappings元素用來(lái)包含零到多個(gè)action,其子元素action負(fù)責(zé)具體映射的詳細(xì)信息。在action-mapping元素中可以定義0個(gè)或1個(gè)以上的action元素。每個(gè)action元素接受path屬性定義的請(qǐng)求,并映射到type屬性所定義的具體action對(duì)象。在映射過(guò)程中,將name屬性定義的actionform一并傳過(guò)去,它有如下屬性:
Parameter,scope兩個(gè)屬性指定了傳送方式和范圍,scope常用的值有兩個(gè)“session”和“request”。
Validate屬性指定了是否需要actionform的驗(yàn)證。
Forward元素,將請(qǐng)求success轉(zhuǎn)發(fā)到”/login_success.jsp”頁(yè)面。
6、業(yè)務(wù)邏輯類UserManager和自定義異常類
代碼如下所示:

packagecom.bjpowernode.struts; 
  
publicclassUserManager { 
    
   publicvoid login(Stringusername,Stringpassword) 
   { 
       if(!"admin".equals(username)) 
       { 
          thrownewUserNotFoundException(); 
       } 
        
        
       if(!"admin".equals(password)) 
       { 
          thrownewPasswordErrorException(); 
       } 
   } 
  
} 

自定義異常類UserNotFoundException和PasswordErrorException代碼如下所示。

packagecom.bjpowernode.struts; 
  
public class UserNotFoundExceptionextends RuntimeException { 
  
   public UserNotFoundException() { 
   } 
  
   public UserNotFoundException(Stringmessage) { 
       super(message); 
   } 
  
   public UserNotFoundException(Throwable cause) { 
       super(cause); 
   } 
  
   public UserNotFoundException(Stringmessage,Throwable cause) { 
       super(message, cause); 
   } 
  
} 
  
packagecom.bjpowernode.struts; 
  
public class PasswordErrorExceptionextends RuntimeException { 
  
   public PasswordErrorException() { 
   } 
  
   public PasswordErrorException(Stringmessage) { 
       super(message); 
   } 
  
   public PasswordErrorException(Throwable cause) { 
       super(cause); 
   } 
  
   public PasswordErrorException(Stringmessage,Throwable cause) { 
       super(message, cause); 
   } 
  
} 

7、視圖jsp頁(yè)面調(diào)用。
登錄界面login.jsp,錯(cuò)誤顯示界面login_error.jsp,登錄成功界面login_success.jsp。代碼如下所示。

<%@pagelanguage="java" contentType="text/html; charset=GB18030" 
  pageEncoding="GB18030"%> 
<!DOCTYPEhtml PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
<title>Inserttitle here</title> 
</head> 
<body> 
<form action="login.do" method="post"> 
  用戶:<inputtypeinputtype="text" name="username"><Br> 
  密碼:<inputtypeinputtype="password" name="password"></br> 
  <input type="submit" value="登錄"> 
</form> 
</body> 
</html> 

Login_success.jsp.

<%@page language="java"contentType="text/html;charset=GB18030" 
  pageEncoding="GB18030"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
<title>Insert title here</title> 
</head> 
<body> 
 ${username},登錄成功! 
</body> 
</html> 

Login_error.jsp界面。

<%@page language="java" contentType="text/html; charset=GB18030" 
  pageEncoding="GB18030"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
<title>Insert title here</title> 
</head> 
<body> 
 <%-- 
 <%=request.getAttribute("msg") %> 
 --%> 
  
 ${msg } 
</body> 
</html> 

就這樣我們實(shí)現(xiàn)了運(yùn)用struts框架完成用戶登錄。就這樣從初步學(xué)習(xí)到簡(jiǎn)單應(yīng)用,隨著應(yīng)用的次數(shù)增多,我們會(huì)對(duì)struts理解越來(lái)越深刻,并且感受struts框架給我們帶來(lái)的便捷。


表單處理器ActionForm(靜態(tài)動(dòng)態(tài))
上面講解了struts配置,實(shí)現(xiàn)了使用struts框架進(jìn)行登錄的示例。一些名詞已經(jīng)在腦海中飄蕩了。
ActionServlet:struts的控制器,負(fù)責(zé)截取URL或分發(fā)。提供Model(模型層)和View(視圖層)使用,因此可將它看作是模型和視圖之間的中介。
ActionForm:用于封裝用戶的請(qǐng)求參數(shù),而請(qǐng)求參數(shù)是通過(guò)JSP頁(yè)面的表單域傳遞過(guò)來(lái)的。
Action:用戶請(qǐng)求和和業(yè)務(wù)邏輯的橋梁,每個(gè)Action作為業(yè)務(wù)邏輯的代理,可以調(diào)用業(yè)務(wù)邏輯。
一些問(wèn)題是有必要再次提起的。
使用基本的MVC和使用struts框架區(qū)別,使用struts好處在哪里?
我們知道我們不適用框架的時(shí)候,在MVC中典型的控制器是servlet,servlet可以獲取參數(shù)和邏輯模型的調(diào)用和轉(zhuǎn)向功能。而struts對(duì)它做了封裝,為什么要進(jìn)行封裝?當(dāng)我們請(qǐng)求到一個(gè)servlet,我們?cè)谶@個(gè)servlet中取得參數(shù)、調(diào)用業(yè)務(wù)邏輯、轉(zhuǎn)向,我們?cè)趕ervlet中寫死了轉(zhuǎn)向頁(yè)面,當(dāng)我們想要換一個(gè)轉(zhuǎn)向頁(yè)面的時(shí)候就需要改動(dòng)代碼了,改動(dòng)代碼后還要重新進(jìn)行編譯。
而且從表單中傳遞過(guò)來(lái)的數(shù)據(jù)全是字符串形式,我們還需要根據(jù)實(shí)際的需求把字符串轉(zhuǎn)換為我們需要的類型,如果很多地方需要轉(zhuǎn)換,并且每次使用每次都要進(jìn)行轉(zhuǎn)換,有沒(méi)有一種機(jī)制,把表單中的字符串拿過(guò)來(lái)自動(dòng)轉(zhuǎn)換為相應(yīng)的類型呢?不需要我們?cè)龠M(jìn)行手動(dòng)轉(zhuǎn)換呢?
基于上述的不便,轉(zhuǎn)向不靈活,表單中的字符串每次都要進(jìn)行轉(zhuǎn)換等一系列的原因,struts把這些做了封裝。提取出重復(fù)的操作,轉(zhuǎn)向信息放到了配置文件中,這樣更加靈活了。
在上述問(wèn)題中,闡述了struts對(duì)表單的封裝,在web應(yīng)用程序開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員需要大量的時(shí)間來(lái)處理表單問(wèn)題,有的時(shí)候是通過(guò)表單提交一些新的問(wèn)題,有的是通過(guò)表單修改數(shù)據(jù),所有這些表單在處的處理在傳統(tǒng)web開(kāi)發(fā)中是非常復(fù)雜的。本篇重點(diǎn)說(shuō)說(shuō)struts中的表單處理器ActionForm。
ActionForm
問(wèn)題的提出
在傳統(tǒng)的web應(yīng)用程序開(kāi)發(fā)中,繁雜的表單處理給開(kāi)發(fā)工作人員帶來(lái)了巨大的困難,在傳統(tǒng)的開(kāi)發(fā)語(yǔ)言中,沒(méi)有組建可以自動(dòng)收集用戶輸入的表單內(nèi)容,開(kāi)發(fā)人員不得不在程序中手動(dòng)提取表單的值。例如在表單中有這樣的一個(gè)文本輸入域:<inputtype=”text” name=”password”> 要在程序中取得這個(gè)文本輸入域的值,只能用這樣的方法:request.getParameter(“password”);這樣的處理方法在表單比較小的時(shí)候是可以使用的,但是當(dāng)表單輸入項(xiàng)較多的時(shí)候就不得不大量重復(fù)類似上面的處理。
問(wèn)題的解決
在Struts中就是使用ActionForm來(lái)解決這個(gè)問(wèn)題,對(duì)于每一個(gè)用戶的表單,需要提供一個(gè)ActionForm,這個(gè)ActionForm自動(dòng)把客戶提交的表單保存在這個(gè)ActionForm中,然后把這個(gè)ActionForm傳遞給Action,從而在Action中可以通過(guò)這個(gè)ActionForm取出用戶信息,然后根據(jù)這些信息完成對(duì)應(yīng)的業(yè)務(wù)邏輯處理。
例如在Struts中用struts的html標(biāo)簽表述成下述形式:

<html:text property=”password”/>

在這種情況下表單提交后,struts框架會(huì)自動(dòng)把表單中的這個(gè)輸入項(xiàng)賦值到ActionForm中的password屬性中,從而把表單中的內(nèi)容保存在ActionForm中,整個(gè)過(guò)程由struts自動(dòng)完成,不需要開(kāi)發(fā)人員干涉。我們?cè)趧?chuàng)建ActionForm時(shí)要遵循以下規(guī)范:
(1)每個(gè)ActionForm都要繼承org.apache.struts.action.ActionForm類,而且需要為每一個(gè)表單提供一個(gè)ActionForm。
(2)ActionForm中每個(gè)屬性要與表單中的輸入項(xiàng)一一對(duì)應(yīng)。
(3)AcitonForm每個(gè)屬性都要提供的getter方法和setter方法。Struts框架就是通過(guò)這些方法來(lái)保存表單的值,然后在Action中通過(guò)這些方法取得表單的值。
(4)如果表單需要驗(yàn)證,就需要在ActionForm中提供validate方法,這個(gè)方法中提供對(duì)表單的具體驗(yàn)證邏輯。這個(gè)方法不僅實(shí)現(xiàn)了數(shù)據(jù)驗(yàn)證同時(shí)實(shí)現(xiàn)了數(shù)據(jù)緩沖的作用,在validate方法中驗(yàn)證用戶提交表單的有效性,當(dāng)表單驗(yàn)證失敗時(shí)會(huì)自動(dòng)返回用戶輸入頁(yè)面,這時(shí)候用戶輸入的值都保存在ActionForm中,返回頁(yè)面時(shí)struts框架會(huì)取出AcitonForm中的數(shù)據(jù)并輸出到對(duì)應(yīng)的用戶輸入項(xiàng)中,保證了用戶開(kāi)始輸入的表單信息。

問(wèn)題的提出
以上所說(shuō)的是靜態(tài)ActionForm,當(dāng)我們?yōu)槊總€(gè)表單都創(chuàng)建一個(gè)AcitonForm的時(shí)候,會(huì)導(dǎo)致ActionForm數(shù)量過(guò)多。每個(gè)ActionForm過(guò)強(qiáng)的聚合性也會(huì)使代碼難以維護(hù)和重用。怎么樣不用去創(chuàng)建過(guò)多的ActionForm?而且當(dāng)提交表單的屬性名字相同時(shí),不用再重復(fù)創(chuàng)建AcitonForm(例如登錄和注冊(cè))?
問(wèn)題的解決
Struts中可以使用動(dòng)態(tài)ActionForm來(lái)解決上述問(wèn)題。動(dòng)態(tài)ActionForm不需要?jiǎng)?chuàng)建自己的ActionForm,需要在創(chuàng)建自己Action的時(shí)候直接把execute方法中傳遞過(guò)來(lái)的form對(duì)象轉(zhuǎn)化為DynaActionForm。
我們需要更改struts-config.xml中form-beans配置:

<form-beans> 
      <form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm"> 
         <form-property name="username" type="java.lang.String" /> 
         <form-property name="age" type="java.lang.Integer"/> 
      </form-bean> 
  </form-beans> 

Action中使用get方法取得表單中的值。

/** 
 * 測(cè)試動(dòng)態(tài)ActionForm. 
 * @author summer 
 * 
 */ 
public classDynaActionFormTestAction extends Action { 
  
  @Override 
  publicActionForward execute(ActionMapping mapping, ActionForm form, 
         HttpServletRequestrequest, HttpServletResponse response) 
         throwsException { 
      
      DynaActionFormdaf = (DynaActionForm)form; 
      
      //取出map中key值為name,value為類名. 
      Stringusername = (String)daf.get("username"); 
      Integerage = (Integer)daf.get("age"); 
      
      System.out.println("username"+username); 
      System.out.println("username"+age); 
      
      returnmapping.findForward("success"); 
  } 
  
} 

靜態(tài)ActionForm方式,使用get/set方法,而動(dòng)態(tài)ActionForm方式,使用map的getkey方式,其中key就是標(biāo)簽name的值。
使用動(dòng)態(tài)ActionForm優(yōu)點(diǎn):若更改表單和ActionForm時(shí)不需要重新編譯,而靜態(tài)的需要更改靜態(tài)的ActionForm.java文件,必須重新編譯。缺點(diǎn):靜態(tài)返回的是對(duì)應(yīng)的值,動(dòng)態(tài)ActionForm返回的是對(duì)象,我們還要把這個(gè)對(duì)象進(jìn)行強(qiáng)制轉(zhuǎn)換。

相關(guān)文章

  • Java Socket編程實(shí)例(三)- TCP服務(wù)端線程池

    Java Socket編程實(shí)例(三)- TCP服務(wù)端線程池

    這篇文章主要講解Java Socket編程中TCP服務(wù)端線程池的實(shí)例,希望能給大家做一個(gè)參考。
    2016-06-06
  • java正則表達(dá)式校驗(yàn)日期格式實(shí)例代碼

    java正則表達(dá)式校驗(yàn)日期格式實(shí)例代碼

    如果使用得當(dāng),正則表達(dá)式是匹配各種模式的強(qiáng)大工具,下面這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式校驗(yàn)日期格式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Java 獲取兩個(gè)List的交集和差集,以及應(yīng)用場(chǎng)景操作

    Java 獲取兩個(gè)List的交集和差集,以及應(yīng)用場(chǎng)景操作

    這篇文章主要介紹了Java 獲取兩個(gè)List的交集和差集,以及應(yīng)用場(chǎng)景操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Java技巧:快速獲取圖片拍攝時(shí)間

    Java技巧:快速獲取圖片拍攝時(shí)間

    想知道如何用Java讀取圖片的拍攝時(shí)間嗎?在這篇指南中,我將向你展示如何利用Java編程語(yǔ)言輕松獲取圖像的拍攝時(shí)間信息,不要錯(cuò)過(guò)這個(gè)簡(jiǎn)單而有用的技巧!
    2023-12-12
  • SpringBoot通過(guò)自定義注解與異步來(lái)管理日志流程

    SpringBoot通過(guò)自定義注解與異步來(lái)管理日志流程

    實(shí)現(xiàn)日志管理說(shuō)實(shí)話方式還挺多,個(gè)人使用過(guò)直接在Controller代碼里面寫、AOP+自定義注解、ConstraintValidator。本文主要和大家講的是自定義注解與異步來(lái)管理日志流程,感興趣的可以了解一下
    2023-03-03
  • Java文件與IO流操作原理詳細(xì)分析

    Java文件與IO流操作原理詳細(xì)分析

    在java中提供有對(duì)于文件操作系統(tǒng)的支持,這個(gè)支持在java.io.File類中進(jìn)行了定義,也就是說(shuō)在整個(gè)java.io包中File類是唯一一個(gè)與文件本身操作有關(guān)的類(創(chuàng)建,刪除,重命名)有關(guān)的類,而如果想要進(jìn)行File類的操作,我們需要提供有完整的路徑支持,而后可以調(diào)用相應(yīng)的方法進(jìn)行處理
    2022-09-09
  • java實(shí)現(xiàn)帶有背景圖片的窗體

    java實(shí)現(xiàn)帶有背景圖片的窗體

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)帶有背景圖片的窗體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Springboot 2.x中server.servlet.context-path的運(yùn)用詳解

    Springboot 2.x中server.servlet.context-path的運(yùn)用詳解

    這篇文章主要介紹了Springboot 2.x中server.servlet.context-path的運(yùn)用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字

    基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字

    這篇文章主要介紹了基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • idea sql的xml文件出現(xiàn)紅色警告符的處理方式

    idea sql的xml文件出現(xiàn)紅色警告符的處理方式

    這篇文章主要介紹了idea sql的xml文件出現(xiàn)紅色警告符處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論