朕 JAVAEE 实验03 实验报告

(一)项目描述

项目名称

所用知识点

实验效果

Lab 09

javaBean的使用,同页面的值获取,不同页面传值的方法,EL表达式,JSTL的基本用法

getInfoPage页面中,能通过EL表达式直接与java类交互,输出相应结果。

easyJSTL页面中,实现了通过JSTL标签,进行简单输出、比较数字大小、使用Empty运算符、获取Exception信息、进行不同域的信息设置(由此可跨页面传值)、查看浏览器信息等功能。

Lab 10

javaBean的使用,过滤器,css文件的设置,jsp中类库的调用,EL表达式,javascript

register页面,只要输入信息合法,就能注册用户。

login页面,能用已经注册过的用户名和及匹配的密码登录并进入欢迎页。

welcome页面展示出欢迎信息,并且列表说明已经注册的用户队列。

Lab 11

javaBean的使用,同页面的值获取,部分域的变量设置,Servlet

easyChange页面,能对输入的明文进行简单的加密。

guessNumber页面,能猜测答案数字的大小,能设置答案数字,默认猜测机会为5次。重设答案数字能恢复最大猜测机会。猜测过程中伴有提示。

 

(二)错误

【1】

①错误描述:

严重: Servlet.service() for servlet [jsp] in context with path [/j2017051046_09_jspELAndJST] threw exception [The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application] with root cause

org.apache.jasper.JasperException: The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application

②问题分析:错误提示上有表示是core代码并未匹配到。xml文件与之前项目无甚差别,主要应该在lib库中。

③问题解决:将一些jar包放入lib库中。如图:

 

【2】

①错误描述:Type Exception Report

Message An exception occurred processing [/getInfoPage.jsp] at line [71]

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Stacktrace:] with root cause
javax.el.MethodNotFoundException: Method not found: class myBeans.User.getName()
at javax.el.Util.findWrapper(Util.java:368)

②问题分析:先检查User类中是否有此方法,再与老师的代码比对,

③问题解决:检查User类中确实存在此方法,将此类暂时替换成老师的类,发现能成功运行,说明不是路径问题、不是jsp页面问题。对比代码发现,自己的类成员是private,而set、get方法并未声明为public,导致jsp没有权限访问类方法。

④配图:

 

【3】①错误描述:使用EL表达式时,发现${user.getName()}使用失败。

②问题分析:首先明确有这个类、有这个类方法、并且类方法是public,那为什么呢?代码明明很有逻辑的感觉。百度查关键字“EL获取成员变量失败”,但这样的关键字直接导致寻找方向错误,趁还在上实验,咨询老师。

③问题解决:将${user.getName()}变成${user.name}。

④经验:EL表达式${user.getName()}中的user是直接获取成员的,其信息已经在页面中获取了,直接用前面的get、set方法。而如果我要使用user.getName(),就可以用<% user.getName()%>,而这里面的user是对象。

 

【4】

①错误描述:中文输入,打印出乱码。

②问题分析:先检查编码问题,发现都是UTF-8,再联系到页面格式问题,最后百度时候发现是EL表达式的中文问题。

③问题解决:先将页面代码检查一遍,在加上<% request.setCharacterEncoding("utf-8"); %>将EL表达式中文显示乱码解决。
 

 

【5】

①错误描述:语法正确,却出现:

②问题分析:确定语法没错。先剪切再复制。

③问题解决:其实只是编辑器慢,ctrl+s保存下,就没有红线了。如图:

 

 

(三)知识点总结

1、jsp:setProperty用法

<jsp:setProperty>用来设置已经实例化的Bean对象的属性。它一共有四种形式。

<jps:setProperty name = "JavaBean实例名"  property = "*"/>,

<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" /

<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" value = "BeanValue"/>

<jsp:setProperty name = "JavaBean实例名" property = "propertyName" param = "request对象中的参数名"/>

使用<jsp:getproperty>之前,必须<jsp:usebean>来创建它。不能使用<jsp:getproperty>来检索一个已经被索引了的属性

 

2、EL表达式

EL表达式语法结构:${ expression} ,其采用“.”或者“[]”两种方式来存储数据,当表达式中存在除了字母或者数字之外的特殊符号时,必须用“[]”。

在页面使用中,我们可以取值的方法中<% %>,${ }有等价关系,如表。

<%=request.getParameter("userName")%>

${param.userName};

<%=request.getAttrbute(userList)%>

${requestScope.userList};

 

3、JavaBean传值的形式

任何数据类型封装在javaBean中,我们在属性中定义需要传递的参数,然后加入get和set方法就可以了。但是在实验中,发现get、set方法一定需要public的范围,否则网页没有权限访问。

 

4、JSP九大隐式对象

JSP中叫法

Servlet中叫法

request

HttpServletRequest

response

HttpServletResponse  

session

HttpSession

application

ServletContext

config

ServletConfig

out 

JspWriter

exception

特殊情况下使用

page 

this 本jsp页面

pageContext

 

5、jsp:setProperty

<jsp:setProperty property="*" name="user"/> 

property = "*"表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

 

6、DOCTYPE

DOCTYPE(Document Type),文档类型,一个DOCTYPE是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该用什么样的文档类型定义(DTD)来解析文档。只有确定了一个正确的文档类型,超文本或可扩展超文本中的标签和层叠样式表才能生效,甚至对JavaScript都会有所影响

而此项目中:<!DOCTYPE HTMl PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">。该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。

 

7、中文乱码

EL表达式中文显示乱码解决方法:<% request.setCharacterEncoding("utf-8"); %>

 

8、listener总结

实验中我使用listener主要是:我曾经在servlet中将listener里将seesion对象添加的代码做了,嫌弃listener多余继而将其删除。却发现创建session的代码在listener中,没有listener我根本就没创建session,何谈添加seesion中变量呢?  如下是我搜集到的资料:

可以监听的事件

为何使用监听器?

特殊对象(Request、Session、ServletContext对象)的创建和销毁

JavaEE的很多组件,其创建和销毁有自己的生命周期,不由开发者控制

特殊对象中存入了值、修改值、删除值

开发者有时需要在一个特定的事件发生后,指定自定义的逻辑

其他

由于很多类都不是开发者提供的,开发者无法在类中添加自己的代码

 

JavaEE提供了对应的监听器,监听具体的事件,开发者可以提供监听器的实现类,添加具体事件的处理逻辑

 

由服务器保证,一旦事件发生,开发者添加的处理逻辑可以被执行

 

(四)心得体会

       郑老师调动的十分浓烈的学习氛围,让我深切感受学无止境,也十分珍惜这几次写文档有反馈的机会。言归正传,下面讲述实验心得。

       文档方面。编写文档是为了归纳整理实验收获,方便以后查看。分块描述方便自己查阅时缩小范围,节约时间。使用表格会使知识点清晰,并且帮助自己归纳总结。

       在实验中,自己浪费很多时间在重构上。这说明自己在写项目之前只有一个大概的方向,没有明确的构思。将项目推翻重写说明自己有优化代码的心思,值得鼓励,但是以后自己应该在写代码之前完成以下步骤:①认真阅读所有老师的相关参考资料。②归纳项目需求,最好简略写下需要使用的知识点。③建立包含所有知识点的简单页面逻辑设计。

       实验中我对前期项目进行代码复用(例如过滤器之类),反而发现自己对之前实验并没有完全吸收(例如listener的具体作用)。这是由于上一个项目关于listener,我是直接复制老师代码的,并且只是大概了解了情况之后修改了而已。以后除了前端的界面布局,不允许自己这样直接使用别人的代码。

       之前的实验中,我为了在导航页中显示servlet类,故意将各种情况都写入项目中,保证项目的健壮性。现在换了一个思路:servlet之类的东西在MVC里是C,完全不需要展示给用户。

       以上是自己这次实验的心得,对未来自己,我的展望是:做一个对项目架构有能力的程序员!从每次的小项目开始认真设计框架、填充代码逻辑。

      

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章