Gavin.Liu

Focus on Mobile Develop


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

Java.Web - ServletContext 随笔

发表于 2012-04-15 | 分类于 Java.Web Notes

Servlet容器在启动时会加载Web应用,并为 每个Web应用创建 唯一的 ServletContext 对象。
可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。
ServletContext对象只在Web应用被关闭时才被销毁;不同的Web应用 ServletContext各自独立存在。

在ServletContext中可以存放共享数据,它提供了4个读取或设置共享数据的方法:

  • 1)setAttribute(String name,Object object);//把一个对象和一个属性名绑定,将这个对象存储在ServletContext中;
  • 2)getAttribute(String name);//根据指定的属 性名返回所绑定的对象;
  • 3)removeAttribute(String name);//根据给定的属性名从ServletContext中删除相应的操作;
  • 4)getAttributeNames();//返回Enumeration对象,它包含了存储在ServletContext对象中的所有属性名

ServletContext VS Session

  • ServletContext和Session相同,都是存在服务器端的东西
  • ServletContext和Session不同,ServletVontext是所有浏览器共享的, Session是一个浏览器对应一个session

ServletContext 案例:1.公共聊天室缓存 2.聊天室的在线人数

ServletContext 实现转发://和派发器是一样的

1
2
this.getServletContext().getRequestDispatcher("/servlet2").forward(request,response);
this.getServletContext().getRequestDispatcher("/servlet2").include(request, response);

注意:forward与include的区别

  • forward方法是把请求的内容转发到另外的一个servlet.include是把另一个servlet处理过后的内容拿过来.
  • forward方法调用后在响应中的没有提交的内容被自动消除。将请求转发给其他的Servlet后,由被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止
  • include方法使原先的Servlet和转发到的Servlet都可以输出响应信息,即原先的Servlet还可以继续输出响应信息
    阅读全文 »

Java.Web - 转向 转发 随笔

发表于 2012-04-08 | 分类于 Java.Web Notes

一、页面转向

页面转向可以调用函数:

1
response.sendRedirect("xx.jsp");

  • 页面转向时request和response的信息都丢失了,它是重新发起一个定向请求,和原先的没有关系了.
  • 由于它是新的定向请求,所以效率不高。页面转向可以用在同一个应用中,也可以用在不同应用中。也就是说redirect可以转到外部系统。
1
2
3
4
response.sendRedirect("xx.jsp");
// 等同于
response.setStatus(302);
response.setHeader("Location","xx.jsp");

二、页面转发

页面转发调用函数:

1
request.getRequestDispatcher("xx.jsp").forward(request,response);

  • 页面转发效率高,同时request中的对象还可以在下一页面使用
  • 注:转发不能转发到本web服务器以外的地址

  • 转发:指一个web资源收到客户端请求,通知服务器去调用另外一个web资源进行处理。

1
2
3
4
5
6
7
// 获取username 的值
String u = request.getParameter("username");
// 设置request的属性
request.setAttribute("username",u);
// 使用转发的方法,把 request,response对象转发个下一个页面
// 所以下一个页面和上一个页面用的是同一个 request,response对象 ,可以获取相应的值
request.getRequestDispatcher("/servlet2").forward(request,response);

Java.Web - Servlet 随笔

发表于 2012-04-01 | 分类于 Java.Web Notes
  • 注册Servlet
1
2
3
4
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.sco.servlet.MyServlet</servlet-class>
</servlet>
  • 映射servlet(不是一 一映射)
1
2
3
4
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servlet/MyServlet</url-pattern>
</servlet-mapping>
  • URL 还能配置成 .html 等等
  • URL 也能用通配符配置:
    ⑴”.扩展名”(.do,…)
    ⑵以 / 开头,并以 / 结尾(/,/news/,…)
    ⑶优先级
    .do 最低
  • Servlet 是单例的,会出先线程安全问题,比如售票系统,需要使用线程同步

Java.Web - 分页技术

发表于 2012-03-25 | 分类于 Java.Web Notes

定义四个分页变量

1
2
3
4
int pageNow //表示第几页 该变量由用户决定
int pageSize //表示每一页显示几条记录 由程序指定(也可由用户定制)
int pageCont //表示共有多少页 该变量是计算出来的
int rowCont //表示共有多少条记录 该变量是查询数据库得到

分页算法.确定rowCont的值

1
2
3
4
pst = con.prepareStatement("select count(*) form users");
rst = pst.executeQuery();
rst.next();
rowCont = rst.getInt(1);

分页算法.确定pageCont的值

  • 二逼青年算法
1
2
3
4
5
if (rowCont % pageSize == 0) {
pageCont = rowCont / pageSize;
} else {
pageCont = rowCont / pageSize + 1;
}
  • 普通青年算法(等价与上面那个算法)
1
pageCont = rowCont % pageSize == 0 ? rowCont / pageSize : rowCont / pageSize + 1;
  • 文艺青年算法
1
pageCont = (rowCont - 1)/pageSize + 1;
阅读全文 »

Java.Web - Http协议初步接触

发表于 2012-03-25 | 分类于 Java.Web Notes

【HTTP请求消息头】

1
2
3
4
5
6
7
8
9
10
11
(Request-Line) GET /manager/html HTTP/1.1 请求行,使用的HTTP规范...
下面是消息头
Accept */*
Accept-Encoding gzip, deflate 可以接收gzip文件,或者默认
Accept-Language zh-CN 支持中文
Connection Keep-Alive 保存常连接
Host 127.0.0.1:8080
Referer http://127.0.0.1:8080/ 告诉服务器我来自哪里?可以防盗链
User-Agent Mozilla/4.0 浏览器内核
(空行)
内容

Servlet 中获取头信息 –> String host = request.getHeader(“HOST”);
可以通过获取 Referer 信息,来判断用户是从那个页面跳转过来的,来防止盗链
直接 在浏览器输入 跳转过来,Referer 的值为null

【HTTP响应消息头】

  • Location 用于重定向,向浏览器发送一个新URI地址。
1
2
response.setStatus(302);
response.setHeader("Location","URL");
  • Content-Disposition 用于下载文件
1
2
3
4
5
6
7
8
9
10
11
// 设置消息头 下载
response.setHeader("Content-Disposition", "attachment;filename=test.jpg"); /* 1.读文件 */ // 获取文件全路径 String path =
getServletContext().getRealPath("/images/test.jpg"); // 创建一个文件输入流
FileInputStream fis = new FileInputStream(path);
// 缓冲区
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0)
/* 2.写文件 */
out.write(buffer, 0, length);
}

通过合适地设置Content-disposition的值
Servlet能指示浏览器是“内嵌”显示文件还是把它当作附件处理。
例1.内嵌显示一个文件 Content-disposition: inline; filename=foobar.pdf
例2.往response里附加一个文件 Content-disposition: attachment; filename=foobar.pdf

  • Expires 应该在什么时候认为文档已经过期,从而不再缓存它?
1
2
3
4
5
6
7
8
// 设置页面不缓存
response.setDateHeader("Expires",-1); //-1则表示不缓存(IE)
// 下面两句代码是为了兼容性
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
//设置页面缓存一定时间
response.setDateHeader("Expires", System.currentTimeMillis()+3600*1000*24); // 缓存一天
1…232425
Gavin Liu

Gavin Liu

123 日志
19 分类
97 标签
RSS
GitHub Weibo
© 2012 - 2017 Gavin Liu
由 Hexo 强力驱动
主题 - NexT.Muse