生命周期 html
1.servlet转发,转发到服务器另外一个servlet,JSPjava
public class ForwardServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //HttpServletRequest 域对象 有本身的做用范围 //转发 只能在服务器内部转发 request域里面的数据不会消失 一次请求一次响应 地址栏没有发生任何变化 request.setAttribute("name", "张三"); request.getRequestDispatcher("").forward(request, response); } }
2.cookie的操做web
//清除最后的访问时间 public class ClearLastAccessTimeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); //建立一个cookie对象,其名称与须要清除的cookie的名称一致 Cookie cookie=new Cookie("lastaccesstime",""); //设置该cookie的最大存活时间为0————若是cookie的最大存活时间为0的话,浏览器会自动删除该cookie信息 cookie.setMaxAge(0); //把该cookie写入客户端浏览器 response.addCookie(cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
//设置cookie信息和取得cookie信息 public class CookieServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); //设置cookie信息到浏览器 //1.建立ncookie对象 Cookie cookie=new Cookie("firstcookie","this is cookie value...."); //2.把cookie信息添加到响应头(set-cookie) response.addCookie(cookie); //获取用户的cookie Cookie cookies[]=request.getCookies(); if(cookies!=null&&cookies.length>0){ //遍历cookie数组 for(Cookie c:cookies){ //判断是否包含名字为firstcookie的cookie对象 if("firstcookie".equals(c.getName())){ //若是存在就取得cookie的value String cookieValue=c.getValue(); System.out.println(cookieValue); } } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
public class LastAccessTimeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); //从cookie中获取用户上一次的访问时间 // 1.获取客户端发送来的cookie数组 Cookie[] cookies=request.getCookies(); // 2.判断数组是否为null if(cookies!=null&&cookies.length>0){ // 3.遍历数组 for(Cookie c:cookies){ // 4.判断是否有保存了最后访问时间的cookie对象 if("lastaccesstime".equals(c.getName())){ // 5.若是有就获取最后访问时间的cookie的值 String cookieValue=c.getValue(); long l=Long.valueOf(cookieValue);//把保存了当前日期毫秒数的字符串转为long //输出根据日期的毫秒数建立的日期对象的本地字符串形式 out.write("最后的访问时间是:"+new Date()); //输出一个清除cookie信息的超连接 out.write("<br/><a href='clear'>清除最后的访问时间</a>"); break; //找到了就退出循环 } } } //把用户当次的访问时间写入cookie //建立cookie对象 Cookie cookie=new Cookie("lastaccesstime",String.valueOf(System.currentTimeMillis())); //设置cookie的最大存活时间 cookie.setMaxAge(Integer.MAX_VALUE); //把cookie对象信息写入客户端(set-cookie) response.addCookie(cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3.servletConfigspring
public class ServletConfigServlet extends HttpServlet { // ServletConfig 主要是用于加载servlet的初始化参数。 @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); //ServletConfigServlet 有这个getServletConfig() 方法 String name = getServletConfig().getInitParameter("name");// 获取初始化的参数 response.getWriter().write(name); Enumeration<String> initParameterNames = getServletConfig().getInitParameterNames();//Enumeration 枚举 while(initParameterNames.hasMoreElements()){ String str =initParameterNames.nextElement(); response.getWriter().write("参数名称:"+str+";参数值:"+getServletConfig().getInitParameter(str)); } // PageContext 这个域对象里面属性 只在当前的servlet 或者是 jsp里面起做用 try { PageContext page=PageContext.class.newInstance();//单例模式 page.setAttribute("name", "张三"); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
4.servletcontext数组
public class GetDataServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); //获取servletcontext对象 ServletContext con=getServletContext(); //从应用范围取出一个名字 String name=(String)con.getAttribute("name"); response.getWriter().write(name); // con.removeAttribute("name"); // name=(String)con.getAttribute("name"); // System.out.println("再次取名字:"+name); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
//获取文件的真实路径 public class RealPathServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); //获取servletcontext对象 ServletContext context=getServletContext(); //获取项目的根路径 String rootPath=context.getRealPath("/"); //H:\workspace\jsp_servlet\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\day03_servlet\ System.out.println(rootPath); //获取a.txt的真实路径 String aPath=context.getRealPath("/WEB-INF/classes/a.txt"); //H:\workspace\jsp_servlet\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\day03_servlet\WEB-INF\classes\a.txt System.out.println(aPath); //获取b.txt的真实路径 String bPath=context.getRealPath("/b.txt"); System.out.println(bPath); // //获取c.txt的真实路径 String cPath=context.getRealPath("/WEB-INF/c.txt"); File file=new File(cPath); System.out.println(file.getName()); System.out.println(cPath); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
//在域(存活)范围内存数据实现数据的共享 public class SetDataServlet extends HttpServlet { // //servletCoNFIG // ServletConfig config=getServletConfig(); // //获取servletcontext对象 // ServletContext context= config.getServletContext(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.setContentType("text/html;charset=UTF-8"); //ServletContext 能够是域对象 存储数据 相似于request ServletContext context= getServletContext(); context.setAttribute("name", "张三"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
5.servlet向浏览器发送数据浏览器
返回字符串,HTML,JSON,响应头,设置编码格式tomcat
package com.lisa.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.lisa.bean.Book; import com.lisa.dao.IBookDao; import com.lisa.dao.impl.BookDaoImpl; public class BuyBookServlet extends HttpServlet{ @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); String html = ""; html += "<html>"; html += "<head>"; html += "<title>图书商品列表</title>"; html += "</head>"; html += "<body>"; html += "<table border='1' align='center' width='600px'>"; html += "<tr>"; html += "<th>书籍编号</th><th>书籍名称</th><th>书籍价格</th>"; html += "</tr>"; //买书 Integer id=Integer.parseInt(request.getParameter("id")); //根据id去查询整个书的信息 IBookDao bookImpl=new BookDaoImpl(); Book book=null; try { book=bookImpl.selectBookById(id); //先去推车(我把车放到了session) HttpSession session = request.getSession(); Enumeration<String> attributeNames = session.getAttributeNames(); while(attributeNames.hasMoreElements()){ if("car".equals(attributeNames.nextElement())){ //从session里面拿车 List<Book> bookList=(List<Book>) session.getAttribute("car"); String str= putBookIntoCar(bookList, book, html); str+="<a href='selectAllBook'>返回书籍列表</a>"; str += "</table></body></html>"; writer.write(str); return; } } //没车 推一把车 new个车出来 List<Book> bookList=new ArrayList<>(); request.getSession().setAttribute("car", bookList); String str=putBookIntoCar(bookList, book, html); str+="<a href='selectAllBook'>返回书籍列表</a>"; str += "</table></body></html>"; writer.write(str); } catch (Exception e) { e.printStackTrace(); } } private String putBookIntoCar(List<Book> car,Book book,String html){ if(book!=null){ //把一本书放进到购物车 car.add(book); double total=0;//书价的合计 for(Book b:car){ html += "<tr>"; html += "<td>"+b.getId()+"</td><td>" + b.getBookName()+"</td><td>"+b.getBookPrice()+"</td>"; html += "</tr>"; String price=b.getBookPrice(); total+=Double.parseDouble(price); } html+="<tr><td colspan='3'> 合计:"+total +"</td></tr>"; } return html; } }
6.Servlet实际上是单例多线程安全
容器初始化化Servlet主要就是读取配置文件(例如tomcat,能够经过servlet.xml的<Connector>设置线程池中线程数目,初始化线程池经过web.xml,初始化每一个参数值等等。
避免使用实例变量(成员变量),由于若是存在成员变量,可能发生多线程同时访问该资源时,都来操做它,照成数据的不一致,所以产生线程安全问题
JSP中用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT
是线程安全的(由于每一个线程对应的request,respone对象都是不同的,不存在共享问题),
APPLICATION在整个系统内被使用,因此不是线程安全的服务器
http://blog.csdn.net/xiaojiahao_kevin/article/details/51781946cookie
7.springMVC和Struts2底层与servlet的关系
http://blog.csdn.net/liudezhicsdn/article/details/50993812