这学期的课程安排是学习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就好了。