📄 servlet_day05.txt
字号:
1. ServletContext
创建时刻:在服务器启动时创建;
销毁时刻:应用或服务器停止、重载时;
创建数量:在整个Web应用运行期间只创建一个;
作 用:1. 获得服务器名称、版本信息;
2. 记录日志信息;
log(String msg);
log(String msg, Throwable t);
3. 存放一些数据供所有访客所共享:
setAttribute(String, Object);
Object getAttribute(String);
2. HttpSession
创建时刻:第一次调用request.getSession();
销毁时刻:1. 自动销毁:指定时间(默认为30分钟)
内没有被访问;
2. 手动销毁:session.invalidate();
创建数量:一次会话期间(打开至关闭浏览器)创
建一个;
Firefox: 两个同时运行的Firefox
进程共享会话Cookie,从而
共享同一个Session对象;
IE : 两个同时运行的IE
进程不共享会话Cookie,从而
各自创建Session对象;
作 用:在不同的请求间共享数据
setAttribute(String, Object);
Object getAttribute(String);
3. ServletRequest
创建时刻:每次提交请求;
销毁时刻:请求处理结束;
创建数量:一个请求创建一个;
作 用:1. 封装请求提交的数据;
request.getParameter(String key);
request.getParameterNames();
request.getParameterValues();
request.getCookies();
2. 在同一个请求所涉及到的资源间
共享数据;
request.setAttribute(String,Object);
Object request.getAttribute(String);
事件:
1. ServletContext,HttpSession,ServletRequest
对象创建和销毁时;
2. 属性对象加入、替换以及移除时;
ch07
DBListener.java -> ServletContextListener
ch07
DBListenerTest.java
/dbt
ch07
CtxListener.java-> ServletContextListener
CtxListenerTest.java
/clt
ch07
ShoppingCart.java
Book.java
OrderLine.java
个性化计数
ch07
SessionListener.java -> HttpSessionListener
SessionListenerTest.java
/slt
this.getServletContext();
arg0.getServletContext();
session.getServletContext();
1. Servlet编写规范
1) Servlet类编写规范
a.直接或间接是javax.servlet.Servlet接口
的实现类;
1) implements Servlet;
2) extends GenericServlet;
3) extends HttpServlet;
b.重写服务方法;
service(ServletRequest req,
ServletResponse res);
service(HttpServletRequest req,
HttpServletResponse res);
doGet(HttpServletRequest req,
HttpServletResponse res);
doPost(HttpServletRequest req,
HttpServletResponse res);
c.在web.xml配置:
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
2) 通过Servlet类获得表单提交数据
request.getParameter("pwd");
request.getParameterValues("pwd");
request.getParameterNames();
request.getQueryString();
3) 生命周期
init(ServletConfig config)
service(ServletRequest req,
ServletResponse res);
destroy();
4) 和数据库交互;
JNDI->DataSource->Connection Pool
a. 将数据库驱动置于$CATALINA_HOME/
common/lib中;
b. 通过Tomcat的Admin改写$CATALINA_HOME
/conf/catalina/localhost/应用名称.xml
,配置数据源;
c. 在web.xml中加入:
<resource-ref>
<res-ref-name>jdbc/oracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
d. 在Servlet中使用代码获得连接:
Context ctx=new InitialContext();
DataSource ds=(DataSource)
ctx.lookup("java:comp/env/JNDI名");
Connection conn=ds.getConnection();
5) 资源跳转;
RequestDispatcher disp=
request.getRequestDispatcher();
getServletContext().getRequestDispatcher();
disp.forward(req,res);
disp.include(req,res);
response.sendRedirect("/a.html");
6) 状态持久: 在不同请求间传递数据;
Cookie[] cs=request.getCookies();
Cookie c=new Cookie("name","zs");
reponse.addCookie(c);
c.setMaxAge(11);
request.getSession();
request.getSession(true);
request.getSession(false);
session.getAttribute("");
session.setAttribute("",Object);
7) Filter
1) 编写
实现javax.servlet.Filter
2) 运行
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
<filter-mapping>
<filter-name></filter-name>
<url-pattern></url-pattern>
</filter-mapping>
8) Listener
2. Web应用组织的规范
应用名称
|
-- WEB-INF
|
-- web.xml
|
-- classes
|
--- ch01
http://localhost:8080/estore/
注册:
register.html-> RegisterServlet.java
request.getParameter("loginName");
request.getParameter("pwd");
...
Customer c=new Customer();
CustomerDAO dao=new CustomerDAOImpl();
try {
dao.save(c);
response.sendRedirect("login.html");
}catch(CustomerException e) {
response.sendRedirect("register.html");
}
登录:
login.html->LoginServlet.java
CustomerDAO dao=new CustomerDAOImpl();
try {
Customer c=dao.find(loginName,password);
if(c==null)
response.sendRedirect("login.html");
else {
response.sendRedirect("listBookStore");
session.setAttribute("customer",c);
}
} catch(CustomerException e) {
response.sendRedirect("login.html");
}
图书列表
编写一个Listener从数据库中获取Book信息,将其存放
入ServletContext中
BookDAO dao=new BookDAOImpl();
Collection<Book> bs=dao.findAll();
context.setAttribute("bookStore",bs);
显示图书的Servlet: <url-pattern>/listBookStore</url-pattern>
Collection<Book> bs=context.getAttribute("bookStore");
for(Book b:bs) {
out.println("");
}
购买图书的Servlet: /add
Integer id=new Integer(request.getParameter("id"));
int quantity=request.getParameter("num");
BookDAO dao=new BookDAOImpl();
Book b=dao.find(id);
OrderLine ol=new OrderLine();
ol.setBook(b);
ol.setQuantity(quantity);
ShoppingCart cart=(ShoppingCart)session.getAttriubte("shoppingCart");
cart.add(ol);
response.sendRedirect("/listBookStore");
购物车列表Servlet: /list
ShoppingCart cart=(ShoppingCart)session.getAttriubte("shoppingCart");
Collection<OrderLine> ols=cart.list();
for(OrderLine ol:ols) {
}
cart.cost();
清除购物车Servlet: /remove
ShoppingCart cart=(ShoppingCart)session.getAttriubte("shoppingCart");
String id=request.getParameter("id");
cart.remove(new Integer(id));
response.sendRedirect("/list");
estore系统Servlet实现源码:
ftp://192.168.l.220/jd0801/servlet/estore.rar
课程笔记:
ftp://192.168.1.220/jd0801/servlet/
summaryCommon.pdf
Cookie和Session总结文档:
ftp://192.168.1.220/jd0801/servlet/
cookie&session.txt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -