1. 程式人生 > >spring學習過程中遇到的問題及解決,eclipse使用過程的問題

spring學習過程中遇到的問題及解決,eclipse使用過程的問題

這學期的課程安排是學習Spring+MyBatis,使用的教材是《Spring+MaBits企業應用實戰》作者:瘋狂軟體
spring方面的已經學完由一星期的,我把最近學習過程中出現的問題和解決方法的記錄,寫下來,也可以去我的資源裡面下載word版本。

1. 中文亂碼問題:

1.修改tomcat的server.xml檔案在埠後面加上language=”utf-8”,沒有解決問題
2.配置spring的編碼過濾器,為了防止spring中的post方法提交的時候中文亂碼
在web.xml檔案中,新增spring的編碼過濾器

<!-- 配置編碼方式過濾器,注意一點:要配置在所有過濾器的前面 -->
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

2. 完美解決中文亂碼問題


修改工程名和類名:
點選需要修改的工程或類(這一步相當於選中),點選file選擇Rename,最後確認修改
在這裡插入圖片描述在這裡插入圖片描述

3. springmvc引入css樣式無法顯示

原因:springmvc預設攔截所有的請求,包括html找css的請求,所以需要把靜態資源隔離出來。
解決方法:在springmvc-config.xml中新增:在這裡插入圖片描述
<mvc:resources location=”/css” mapping=”/css/**”></mvc:resources>
其中css資料夾放在WebContent資料夾下。
在css檔案中能夠新增外部檔案images中的照片出錯
background: url(images/button-bg.png) repeat-x;
原來url中的路徑是相對於.css檔案所在的位置,所以要返回上一目錄,再找到images資料夾。
background: url(…/images/button-bg.png) repeat-x;

4. jsp的的css樣式無法顯示:

檢查springmvc是否加了靜態資源載入,設定springmvc-config.xml

<mvc:annotation-driven /> 
	 <!-- 靜態資源訪問 --> <mvc:resources mapping="/DataTables/**" location="/DataTables/" /> 
	 <!--從根目錄開始找資源--> 
	 <!-- <mvc:resources location="/" mapping="/**/*.js"/> 
	 <mvc:resources location="/" mapping="/**/*.css"/> --> 
	 <mvc:default-servlet-handler /> 
	 <!-- 添加註解驅動 --> 
	 <!-- <mvc:annotation-driven /> --> 
	 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
		 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView">
		 </property> <property name="prefix" value="/WEB-INF/jsp/" /> 
		 <property name="suffix" value=".jsp" /> 
	 </bean>

終極解決方法在web.xml檔案中新增配置,注意這個配置要加在springmvc之前。

<servlet-mapping> 
  <servlet-name>default</servlet-name>
  <url-pattern>*.jpg</url-pattern> 
  </servlet-mapping> <servlet-mapping> 
  <servlet-name>default</servlet-name> 
  <url-pattern>*.js</url-pattern> 
  </servlet-mapping> <servlet-mapping> 
  <servlet-name>default</servlet-name> 
  <url-pattern>*.css</url-pattern> 
  </servlet-mapping>

還出現了一個錯誤,在eclipse中的css只至此.jpg圖片

5. 資料庫儲存照片報錯:

實際上並不是把所有的圖片存在資料庫,實際上儲存的是圖片的位置。
mysqlDataTruncation:Data truncationn:data too lon for column ‘image’ at r 1
很明顯說的是資料庫的長度不夠,將blob改為longblob就可以可

public class InputPhoto {
	private Connection conn;
	private PreparedStatement presta;
	private ResultSet res;
	private InputStream in;
	private OutputStream ou;
	
	private String path = "images/2.jpg";
	
	private String uri = "jdbc:mysql://localhost/learndb";
	public InputPhoto() {
		try {
			in = new FileInputStream(new File(path));
			ou = new FileOutputStream("C:\\Users\\lei02\\Desktop\\參考\\22.jpg");
			Class.forName("com.mysql.jdbc.Driver");
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (ClassNotFoundException ex) {
			ex.printStackTrace();
		}
	}
	
	public boolean input() {
		
		try {
			conn = DriverManager.getConnection(uri, "root", "021191");
			presta = conn.prepareStatement("INSERT INTO T_image(Image) value(?)");
			//三個引數,第一個表示是sql語句中的第幾個變數,第二個是輸入流inputstram第三個是大小,使用in.available()就可以了。
			//將圖片以二進位制的形式儲存,也就是獲取檔案的二進位制流
			presta.setBinaryStream(1, in, in.available());
			int end = presta.executeUpdate();
System.out.println(end);
		} catch (IOException ex) {
			ex.printStackTrace();
			return false;
		}catch (SQLException ex) {
			ex.printStackTrace();
			return false;
		}
		return true;
	}
	
	public void getPhoto() {
		try {
			conn = DriverManager.getConnection(uri, "root", "021191");
			presta = conn.prepareStatement("SELECT Image FROM T_Image where id = 1");
			res = presta.executeQuery();
			//將resultset獲取的二進位制流交到一個讀取流進行讀取
			res.next();//將游標指向第一行
			in = res.getBinaryStream("image");//將資料庫中名字為image的元素,按照資料流的方式讀取
			byte[] b=new byte[in.available()]; //新建儲存圖片資料的byte陣列,大小為可讀取大小
			in.read(b);
			
			ou.write(b);
			ou.flush();//重新整理
			ou.close();
		} catch(IOException ex) {
			ex.printStackTrace();
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
	}
	
	
	public void delete() {
		//刪除的檔案路徑中不能有中文,否則就會錯誤,無法刪除
		File f = new File("C:\\Users\\lei02\\Desktop\\22.jpg");
		System.out.println(f.canRead());
		System.out.println(f.canWrite());
		System.out.println(f.delete());
	}
	
	public static void main(String[] args) {
		InputPhoto photo = new InputPhoto();
		//System.out.println(photo.input());
		//phote.getPhoto();
		photo.delete();
	}
}

6. eclipse最基本的java.lang包都找不到。

原因:jre出錯
解決方法:需要修改為本機的jre
找到錯誤專案,右鍵。
在這裡插入圖片描述在這裡插入圖片描述點選edit,或者remove後重新新增
在這裡插入圖片描述點選environment,選擇相應的執行環境。在這裡插入圖片描述選中之後記得點選apply and close
再點選finish
在這裡插入圖片描述點選apply應用在這裡插入圖片描述最後關閉就好了。

7. eclipse恢復刪除內容

在這裡插入圖片描述選中要恢復的選項,點選右下角的restore就好了。在這裡插入圖片描述