(一)项目介绍
项目名称 | 使用知识点 | 项目效果 |
Lab 16 | JavaBean、上下文对象、会话对象 | ①PrivateSum:生成一个私有累加器,将结果存在session中。 ②PublicSum:生成一个公共累加器,将结果存在context中。 用户通过页面进行累加,页面会限制只能输入数字 |
Lab 17 | 过滤器、JavaBean、Servlet传递数据的多种方式、文件的读取、EL表达式、JSTL | ①FilterUTF8:将项目统一UTF-8编码 ②RecordsServlet专题:使用上下文对象储存聊天信息,建立一个简易聊天室,用户A与用户B的信息能合理读取、显示。(效果图见文档尾部) ③ServletDataPass专题:使用jsp进行交互(输入信息,查看Servlet传递信息的细节、查看Servlet的输出信息);建立4个Servlet,各自以不同的方式进行信息沟通(静态变量、sendRedirect、getRequestDispatch、getSession、setAttribute) ④ShoppingServlet专题:通过txt文件读入产品信息,添加店铺和库存信息,若商品售光则不予显示。购物车能合并相同商品的不同订单,购物车按照店铺>产品分组显示。将不合理的订单或其他错误信息显示给客户。更正了原项目刷新导致表单重复提交的错误。 |
Lab 18 | JavaBean、Servlet的信息传递 | ①JAVABEAN:Product类存储商品信息、CartProduct类存储购买信息、ShopCart类对购物车的修改请求进行具体操作。 ②ShowProductServlet:显示商品详细信息,提供用户将具体数目的商品加入购物车的功能。限制商品的可加入购物车的数目不大于库存数目,不小于0。 ③ShoppingServlet:获取用户在产品页提交的加入购物的详细信息,将其加入购物车中。合并相同产品的订单。将部分违法操作进行相应提示。 ④ShowCartServlet:获取购物车的详细信息,并提供修改购物车中商品的数目功能(由此可以删除商品)。计算购物车中商品的总额。 |
Lab 19 | Junit的使用、pom.xml的基本内容 | 编写了一个计算器,并使用Junit进行进行加减单元测试 |
Lab 20 | Junit、maven | LeapYear类判断输入年份是否为闰年。 LeapYearTest测试LeapYear功能是正确、完善。 |
Lab 21 | MVC框架、filter、servlet | ①EncodingUTF8:统一UTF-8编码 ②Record类:赋予消息体结构(发送人、时间、发送信息)。 ③login.jsp:简单的登录页面,帮助用户转向Servlet,从而进入WEB-INF下的网页。 ④RecordsServlet:帮助登陆成功的用户进入聊天室。处理聊天室收到的消息,放入消息记录中。 ⑤chat.jsp:聊天室,同时实现两个用户的聊天窗口,模仿QQ显示双方的信息。 |
Lab 22 | MVCController | 在Lab21的基础上 ①使用DispatherServlet接收所有处理请求,充当路由器功能,将登录请求发送给LoginController、聊天室请求发送给RecordsController。 |
Lab 23 | MVCValidator | 在Lab22的基础上 ①LoginValidator:获取User对象,判断用户名、密码是否为空,返回错误信息。 ②在LoginController处添加判断登录信息是否合法,并进行相应反馈的操作。
|
Lab 24 | SpringMVC | 在Lab23的基础上 删除了自己编写DispatherServlet,使用了库中的DispatherServlet,在xml中配好此Servlet,在springmvc-servlet.xml中配好相应链接应该转到的Controller,重现聊天室之前功能与效果。 |
(二)问题描述
问题1描述:Caused by: java.lang.IllegalArgumentException: The servlets named [myServlets.Servlet01] and [myServlets.Servlet03] are both mapped to the url-pattern [/Servlet01] which is not permitted at ….
问题分析:看原因应该是xml或者注解重复了,导致编译时找不到具体的Servlet。
问题解决:查看Servlet注解,发现自己由于是复制产生的多份Servlet,它们名字改了但是注解相同。
问题2描述:
问题分析:应该是jsp对应行的语法问题。
问题解决:发现自己在语句 ”<input value=”xx“>” 使用了四个双引号,将其中一对双引号变成单引号。
问题3描述:
问题分析:500一般是编译不通过,查看相关代码。发现删掉如下红框,就能成功运行。
问题解决:发现是<input>中的max出错,但是逻辑上自己要求获取max=剩余库存数目,所以尝试了下删掉max红框处,将min=0,改为min=”0”,发现不影响运行,故将max=int,也改成了max=”string类型”,代码如上。成功解决问题。
问题4描述:如图:
问题分析:这问题没经历过,先看英文后百度。无果,休息会。
问题解决:休息的时候关掉了Eclipse,再打开又能运行成功了。
问题5描述:出现乱码如下:
问题分析:应该是编码问题,一直看filter里面这句话不顺眼。
问题解决:删掉此类。因为我直接都是UTF-8编码,如果再另一种编码读取再编码一次,反而产生乱码。
问题6描述:出现404错误、即使运行单独的页面,也会失去CSS效果。
问题分析:先查路径,再查细节。
问题解决:发现项目的名字错了,去掉.war。
(三)知识点总结
1.Servlet的生命周期
概述为:Servlet 加载--->实例化--->服务--->销毁。 |
init():负责初始化Servlet对象,只执行一次。 |
service():对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。 |
destroy():在服务器端停止且卸载Servlet时执行该方法,只执行一次。 |
2.Java包命名规范
前缀 | 介绍 | 包的命名 |
indi | 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者。 | indi.发起者名.项目名.模块名.…… |
pers | 个人项目,指个人发起,独自完成,可分享的项目,copyright主要属于个人 | pers.个人名.项目名.模块名.…… |
priv | 私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright属于个人。 | priv.个人名.项目名.模块名.…… |
onem | 与“indi”相同,推荐使用“indi”。 | onem.发起者名.项目名.模块名.…… |
team | 团队项目,指由团队发起,并由该团队开发的项目,copyright属于该团队所有。 | team.团队名.项目名.模块名.…… |
com | 公司项目,copyright由项目发起的公司所有。 | com.公司名.项目名.模块名.…… |
3.具体的命名规范
xxx:代表公司名称yyy:代表项目名称
- com.xxx.yyy.dao dao层接口
- com.xxx.yyy.dao.impl dao层实现
- com.xxx.yyy.service service层接口
- com.xxx.yyy.service.impl service层实现
- com.xxx.yyy.web web层
- com.xxx.yyy.util 工具包
- com.xxx.yyy.domain javabean
4.Java开发Web Application有几种符合MVC设计模式的开发方式。
- Jsp+Servlet+JavaBean(EJB)
- Jsp+JavaBean(Controller)+JavaBean(EJB)(Model)
- TDK(Turbine,Velocity...)
- Xsp
- Jsp+Struts+JavaBean(EJB)
(四)心得
此次实验最大的思考是课程结束后,我能否给自己安排类似的实验?能否在无外界压力的情况下,有逻辑地去写博客?想了想,如果要达成心愿,我应该:①对领域知识有框架式的了解。②利用反馈带来的正向引导,适当给自己反馈,但不要迷失自己的重心、目标。③一定的时间限制。
在javaee实验文档中,我学会了先搜集素材,再集中整理的文档技巧,但是提醒自己的一点是,尽量自己打文档,慎用复制粘贴(如果保证理解了就可以复制粘贴)。
MVC的框架很神奇,总的概括的,View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。
有一句行话“少用继承,多有组合”,如果被继承的类中有继承的类用不到的方法或者属性时,就不要去实现这个继承。设计模式中,有时候用继承只是为了时上层使用的时候,不需要考虑到下面是怎么做的而已(参考策略模式)。博客上讲:MVC,View层,单独实现了组合模式,Model层和View层,实现了观察者模式,View层和Controller层,实现了策咯模式。
(五)项目效果图(捡关键的)