servlet注意事项

1:乱码

没有设置charset=gbk文本会显示乱码,所以要加上,但是charset = gbk,如果在等好旁边有空格,则无法识别该语句,仍然出现乱码。所以得出结论:小心空白符。

response.setContentType("text/html;charset = gbk");


2:用response.sendRedirect(String)来跳转页面和传递参数

sendRedirect的参数是一个字符串。假设已拥有一个String u = "123",要把这个String 传递给一个Wel的servlet,

那么语句是sendRedirect("Wel?uvalue="+u); //如果要传递多个值,那么它们之间要用&号隔开。(“wel?uvalue="+u+"&u2value="+u2)

在Wel里面如何得到这个值呢?用request.getParameter("uvalue")

很遗憾,sendRedirect只能传递字符串,而不能传递对象。



3:关于getSession()参数的true,false的区别。

getSession方法返回与当前请求相关的httpSession对象.
其根据传递的参数来决定是否创建新的httpSession对象.
参数为true,则在相关的httpSession对象不存在时创建并返回一个新的httpSession对象,否则不创建新的httpSession对象,而是返回null

最好用true,不然对httpsession调用函数时,有可能会出现nullpointerException.调用空指针


4:链接数据库的具体参见我日志中的java链接数据库


5:在servlet中引用图片。

很简单,在工程目录下创建一个imgs文件夹,里面放图片1.gpg

out.println("<img  src='./imgs/1.jpg'>")

或者

out.println("<img  src='imgs/1.jpg'>")

注意,这里imgs文件夹要放在tomcat/webapps/工程目录/

而不是在workspace里面的工程目录下。(应该是可以调整的,具体就没调试过)

可以用getContextPath获取目录

另外
用Servlet插入图片eg:

pw.println("<img src='"+req.getContextPath()+"/images/bf1.jpg' width='200' hight='200'>");

用jsp插入图片eg:

  <img src="./images/logo4.gif">



6:网页生成了 过多的重定向

有可能页面之间的跳转形成了循环。



7:IllegalStateException:response already commited

在response.sendRedirect()方法后加return语句即可如下:
                       response.sendRedirect("login.jsp");
                       return;

否则有可能运行下一个sendRedirect();





8:关于 hot code replace fail 问题


1.小规模的修改,没有改变类的块结构,不用重启服务器,也可以立即生效.(前提是同步发布,即要勾上菜单

project->build automatically)

2.修改了类的结构(如增加或删除类的方法,字段).如果是这种情况,myeclipse会有"hot code replace fail"的提

示,和失败的原因的说明(如add method not implemented, scheme change not implemented 等),并且提

示重新启动服务器.这种情况要重启服务器才可以生效.

3.还有一种情况,对java文件进行小的修改(如 代码中不重要的地方加一个空格 )然后保存,myeclipse也会提示

hot code replace fail.这种情况遇到的几率很小. 这种情况的很可能是服务器(如tomcat)下面发布了多个web

应用程序,而所修改的类的名字在多个web应用中存在(如 有app1和app2两个应用, app1中有个类

com.company.LoginAction, app2中也有个类com.company.LoginAction. 修改的是app1中的LoginAction

).

个人猜测:jvm在进行hot code replace的之前,将所修改的类(app1中的LoginAction)与另外一个应用中的同名

类(app2中的LoginAction)对比,发现两者有结构上的差异,于是认为该类的改变很大,不能够进行hot code

replace.

有种简单的方法可以验证,是否属于第三种情况.只部署一个工程在服务器下,启动后,再修改java类,如果是小的修

改,这个时候myeclipse就不会再有hot code replace fail 的提示了.


上一篇:Qt之解析XML元素(QXmlStreamReader)


下一篇:市场研究:2018年NAND闪存市场将重新进入平衡状态