这一天

先上笔记:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
2017.07.06

get post

上午:通过get方法设置了一个id参数,可以通过id动态访问不同图片文件夹,从而动态显示出不同文件夹下的图文信息,其实也就是通过id访问遍历不同的文件夹下的图片,从而达到动态显示的效果,没有多少坑。
设置id的方法:single.jsp?id=<%=flag %> (flag为设置的索引参数)
single.jsp页面获取id的方法:<% int id = Integer.parseInt(request.getParameter("id"))%>


下午:
上午设置好了图片的动态显示,下午准备设置相应图片的文字信息,但是一下就入坑了。。。。整个类是这样写的
package com;

import java.io.*;
import java.util.*;

public class ImgPage {
public List<Img> imgArray = new ArrayList();
public String Title;
public String Content;

public String getTitle(){
return this.Title;
}
public String getContent(){
return this.Content;
}
public void setTile(String title){
this.Title=title;
}
public void setContent(String content){
this.Content=content;
}
public List<ImgPage> init() throws IOException{
List<ImgPage> imgPageArray = new ArrayList();
String path = "E:\\MyEclipse workplace\\LoginJsp\\WebRoot\\picdemo\\img\\";
File f = new File(path);
File [] fileArray = f.listFiles();
for(File fs:fileArray){
if(fs.isDirectory()){
ImgPage page = new ImgPage();
String [] msg = null;
//int flag = 2;
File [] disFileArray = fs.listFiles();
//System.out.println("这是文件夹" + fs.getName() + "下的文件:");
for(File dis:disFileArray){
//System.out.println(dis.getName());
if(dis.getName().indexOf("txt") > -1){//过滤掉文件夹中的content.txt文件,并对content.txt文件进行处理,content.txt文件中存储的是关于图片文件夹中每张图片的描述
msg = getPageMsg(path+fs.getName()+"\\"+"content.txt");
System.out.println("msg.lenth:" + msg.length);
for(int i = 0;i < msg.length;i++){
System.out.println("msg[" + i + "]:" + msg[i]);
}
continue;
}
//System.out.println(msg);

Img img = new Img();
img.setPath( fs.getName() + "/" + dis.getName());
/*if(flag<msg.length){
img.setContent(msg[flag]);
}

flag++;*/
page.imgArray.add(img);
//System.out.println(msg[flag]);
}
page.setTile(msg[0]);
page.setContent(msg[1]);
for(int i = 2;i<msg.length;i++){
page.imgArray.get(i-2).setContent(msg[i]);
}
imgPageArray.add(page);
}

}
return imgPageArray;
}
public String[] getPageMsg(String path){
try{
BufferedReader in = null;
String value = "";
FileReader r = new FileReader(path);//
in = new BufferedReader(r);
String ss;
while((ss = in.readLine())!=null){
value+=ss;
}

String [] s = value.split("---");

r.close();
in.close();

return s;
}catch (Exception ex){
ex.printStackTrace();
}
return null;

}

其中在设置img对象的属性时犯了一个逻辑错误,一开始我直接写在了内层for循环的里面,但是一直报错,后来发现写在外面就没有问题,原来是在读取文件夹信息的时候由于content.txt并不是总是在所有文件的第一个就被执行读取,所以有的图片在还没有读取到content.txt文件时就被设置content属性时当然就会报错!所以要写在内层for循环的外面,这样就可在TXT文件处理后再设置图片的content属性了。
之后动态显示不同图片集title、content等信息的效果便迎刃而解了!

晚上帮同学解决了一个bug,话说还是对Java的一些面向对象的属性不够熟悉,当自己发现最后的bug的时候,真的有一种恍然大悟的感觉!!!各种限定符的作用理解的还不够到位啊,就这么一个小bug花了我大半个小时。。不过大部分时间感觉并不是浪费在了这里,而是myeclipse的内部运行机制。。。说实话,真的是有点坑。。。工作时Tomcat会将workspace的文件复制一份,比如各种文本、图片等,但是当我们手动直接修改了workspace中的一些文件后,比如修改了图片信息,图片改名字了或者删除新增了一些图片时,当我们再次运行Tomcat时,就会出Bug!并且程序运行情况也会变得非常的不稳定,,可能是内部文件发生了冲突吧啊,这个时候就需要我们手动将原先部署的项目remove掉,然后刷新工作区,之后再重新将项目add上去,重新运行才可以。。但是同学今天晚上出现的bug刷新了我的认识。。。他也是遇到了同同样的问题,但是我重新add后,某些图片
依然无法正常显示,但是狗血的是当我写了一个莫名其妙的死循环(其实那个循环没问题)之后,我一直没强制暂停。。然后程序就自动崩了,内存爆了。。然后烧出了那段代码之后再次运行程序,完美执行!!!!我想可能是Java的内存回收机制的问题吧。。。Java虚拟机可能并没有把之前的内存释放。。。。等以后更深入地了解了Java底层之后,可能就能更好地解释了吧。

之后我看还有时间,就完善了一下留言功能!其实早就对留言功能感兴趣了,但是由于技术生疏,一直没敢接触,但是这几天通过对jsp技术的学习,感觉写个后台好像也不是什么困难的事。前端通过表单提交到后台,后台通过对数据进行“格式化处理”,按照一定规则把信息存储下来,生成一个“usermsg”对象,然后存一下(数据库或者其他文本文件等),最后在评论区直接直接把存储的信息显示从数据库或者文本中读取出来就OK了。下面是一些代码(这里我直接存在了文本文件中):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123

<!--这里是前端表单-->
<form action="MsgServer.jsp" name="usermsg" accept-charset="utf-8" id="usermsg" method="post">
<%request.setCharacterEncoding("utf-8"); %>
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<input type="text" class="form-control" placeholder="姓名" name="name" >
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="邮箱" name="email">
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="手机" name="phone">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<textarea id="message" cols="30" rows="7" class="form-control" placeholder="请留言" name="msg"></textarea>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary btn-md" value="留言">
</div>
</div>

</div>
</div>

</div>
</form>

////下面是后端

//Msgio.java

package com;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Msgio {
private static String path = "E:/MyEclipse workplace/LoginJsp/msg.txt";
private static File filename = new File(path);
public static void createFile() throws IOException{
if (!filename.exists()) {
filename.createNewFile();
System.err.println("系统初始化完成!");
}
}
public static String readFile() throws IOException{
BufferedReader in = null;

String value = "";
FileReader r = new FileReader(path);
in = new BufferedReader(r);
String ss;
while((ss = in.readLine())!=null){
value = value + ss;
value += "------";
}
in.close();
return value;

}
public static void writeFile(String ss) throws IOException{

FileWriter w = new FileWriter(path);
BufferedWriter out = new BufferedWriter(w);

out.write(ss);

out.close();

}



}

//Msg.java

package com;

import java.io.*;
import java.util.*;

public class Msg {
public void init() throws IOException{
Msgio.createFile();
}
public String name;
public String email;
public String phonenum;
public String msg;
public List<Msg> getMsg() throws IOException {
init();
List<Msg> msgArray = new ArrayList();
String s = Msgio.readFile();
if(s!=""){
String ts[] = s.split("------");
for(String tts:ts){
String ms[] = tts.split("####");
Msg msg = new Msg();
msg.name = ms[0];
msg.email = ms[1];
msg.phonenum = ms[2];
msg.msg = ms[3];
msgArray.add(msg);
}
return msgArray;
}else {
return null;
}

}
}

这里出了个小插曲,因为评论中有中文的时候会出现乱码。。试了好多方法都不行,后来发现是表单的提交方式忘了写了。。。又查了一下,发现jsp表单默认是以get方式提交的,这里写上了method=”post”后便实现的中文评论。。

这一天真的是学到好多啊!!!明天一天没什么事,听个讲座,也算是休息一下吧。。


声明:
文章标题:实习生活第十九天
文章作者:h3h3da
文章链接:https://www.liucunzhan.com/p/2ffc859e-5672-485c-badd-76642b3f8745
文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。


喜欢,就支持我一下吧~