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就好了。