Servlet动态页面技术

1.web.xml:控制Web应用程序的行为
    1.Web工程启动时,首先读取配置文件
    
    2.功能:
        申明:
            申明Servlet
            申明filter
            申明listener
        自定义URLS:
            servlet
            filter
        初始化参数:
            servlet
            JSP pages
        预加载页面:
        欢迎页面:
        错误页面:
    
    3.servlet映射:
        申明:<servlet-name></servlet-name>
              <servlet-class></servlet-class>
        映射:<servlet-name></servlet-name>
              <url-pattern></url-pattern>

2.Tomcat
    0.容器的作用:根据 web.xml 的设置找到处理请求的 serclet ,调用service(),创建HttpServletRequest、HttpServletResponse对象,调用对应的doXXX方法,销毁对象。

    1.Client发送请求到WebServer(Tomcat),WebSever通过容器(中的Servlet)来处理信息
    Tomcat会解包符合http协议打包格式的的数据并通过IOStream的方式读取
    
    2.用Tomcat建一个简单的Web工程:
        WebProject:
            pages:
                index.html
            WEB-INF:
                web.xml
                classes:
                lib:
        1.在WebProject目录用cmd 调用
            jar -cvf filename.war .
            来制作该站点的war文件
        2.将war文件放在Tomcat目录的WebApps目录下
        3.运行Tomcat,输入地址:
        http://localhost:8080/filename/pages/index.html

3.功能:
    读取显式(表单)和隐式信息(请求头信息)
    生成响应结果
    发送显式(html)和隐式(状态码和响应头信息)信息给客户端

4.类和接口:
    0.包结构:
        javax.servlet
        javax.servlet.http
    
    1.abstract class HttpServlet (extends GenericServlet(implements Servlet,ServletConfig)):
        方法:
        1.实现Servlet部分:
            destroy():
            getServletConfig():    //
            getServletInfo:    //返回作者、版本、版权信息
            init(ServletConfig config):
            service(ServletRequest req,ServletResponse res)    //    doGet(),doPost()都在调用了service()方法
        2.实现ServletConfig部分:
            getInitParameter(String name)
            getInitParameterNames()
            getServletContext()
            getServletName()
        3.GenericServlet部分:
            log()    //查看日志
        4.HttpServlet()
            doXXX():
                在doXXX()内部可能的操作:getParameter();getWriter();m
      class ServletContext()
      class ServletRequset()
      class ServletResponse()
    
    2.interface HttpServletRequest()
      interface HttpServletResponse()

6.HttpServletRequest对象的方法:
    String getParameter(String name)    //若匹配到,返回value。若value为空,返回空字符串。若匹配不到,但会null
    String[] getParameterValues(String name)    //返回name能匹配到的所有value
                                        //在处理CheckBox、List的值存在一个name对应多个value的情况,在表单中每一对name=value_i都是一组键值
    enumerate[] getParameterNames()    //返回所有的键值组的name(存在相同)
    String getHeader(String name)    //返回标头
    int getIntHeader(String name)    //返回整型的标头值
    enumerate[] getHeaderNames()
    String getMethod()    //返回请求的方法
    String getContextPath()    //返回Web项目环境的路径

7.调用Servlet方法:
    1.url地址
    2.提交<form action="">
    3.超链接
    4.JavaScript脚本 document.forms[0].action = "url";document.forms[0].submit();

8.1.设置中文字符集:
    response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");
  2.重新编码字符串:
    String username = new String(username.getBytes("ISO-8859-1"),"UTF-8");    //Tomcat6中请求对象默认使用ISO-8859-1编码
  3.javac -encoding utf-8 main.java;
  4.转译JSP:
      %@page pageEncoding = "UTF-8"%

9.生命周期:
    加载实例化Servlet
    调用init()    //调用一次
    调用service(doXXX)()    //调用多次,所用的请求共用一个Servlet所以要考虑Thread的同步
    调用dostory()    //调用一次

10.页面导航:
    请求重定向:response.sendRedirect("url");    //跳转到当前工程之外,不共享request里面的数据
    请求转发:request.getRequestDispatcher("url").forward(request,response);    
    请求包含:request.getRequesrDispatcher("url").include(requesr,response);    //将目标页面包含到当前页面下

11.响应头信息
    格式:
        隐式:
            HTTP1.1 200 ok
            Content-Type:
            Header[]:
        显式:
            <html></html>
    设置响应头:
        public void setHeader(String HeaderName,String HeaderValue);
        public void setDateHeader(String name,long millisecs);

        setContentType:    //设置Content-Type,常见MIME表格
        setContentLength:    //设置Content-Type,用于持久HTTP连接
        addCookie:    //为set-Cookie报头增加一个值
        sendRedirect:    //设定Location报头及改变状态代码

    HTTP1.1响应报头
        Location:
        Refresh:
        Set-Cookie:
        WWW-Autheuticate:

    构建excel:
        response.setContentType("application/vnd.ms-excel");
        PrintWriter out = response.getWriter();
        out.println("\tQ1\tQ2\tQ3\tQ4\tTotal");
        out.println("Apples\t78\t79\t67\t45\t=SUM(B2:E2)");
        out.println("Oranges\t78\t79\t67\t45\t=SUM(B3:E3)");

    生成图片:
        response.setContentType("image/jpeg");
        InputStream in = this.getClass().getClassLoader().getRescoureAsStream("girl.jpg");
        byte[] buffer = new byte[in.available()];
        in.read(buffer);
        OutputStream out = response.getOutputStream();
        out.write(buffer);
        out.close();
        in.close();

    刷新:
        response.setHeader("refresh","1");
        Date date = new Data();
        out.println(data.toLocateString());

Cookie:保留客户信息,Cookies是保留在客户端的键值对
    创建:
        Cookie c = new Cookie(String name,String value);
    时效:
        c.setMaxAge(int seconds)
    添加:
        response.add(c);
    获得:
        Cookie[] cs = request.getCookies();
        if(cs!=null){
            Cookie cookie = cs[i];
            if (){
                cookie.getValue();
            }
        }
    检验初访者:
        doGet(){
            Cookie c = new Cookie();
            Cookie[] cs = request.getCookies();
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            String msg;
            if (cs!=null&&cs.length>0){
                for(c:cs){
                    if(c.getName().equals("yes")){
                        msg = "welcome back!"
                    }else{
                        msg = "welcome!"
                    }
                }
            }
        }
    自动登录:

ServletSession:    //客户端和服务器建立持久性连接
    持久保存对象:
        Cookie:保存在客户端
        Session:跟踪用户的一种机制,针对当前浏览器和服务器一一对应关系
                 将用户信息存放在Session中则在当前浏览器中信息共享
    Session API:
        Session接口:HttpSession:接口的实现由容器完成
    获得HttpSession:
        request.getSession();
    保存:
        Session.setAttribute("UserSession",obj);
    获取:
        Session.getAttribute("UserSession",userobject);    //可以通过UserSession来访问userboject的属性//返回一个对象(object)需要强转
    使Session无效:
        Session.invalidate();

变量共享:
    1.共享:setAttribute()
            getAttribute()
    2.作用域:
            ServletContext:全局(工程)
                ServletContext cxt = request.getServletContext();
                cxt.setAttribute("c_name", "c_value");
            
            HttpSession:客户端,跟踪会话
                HttpSession session = request.getSession();
                session.setAttribute("s_name", "s_value");
            
            HttpServletRequest:请求过程
                request.setAttribute("r_name", "r_value");
        
Filter:过滤器:用于修改通过Filter的请求和响应
    访问目标资源时自动执行,Filter设置为一个文件夹(/*)下所有文件就可以对这些文件起到过滤作用,相同需要过滤的页面可以放在一个文件夹里

    1.Session管理    
    2.权限验证    验证登陆除了登陆页面
    3.日志记录
    4.字符编码转换

    在xml中配置方法和servlet相同
    <filter-name><filter-class><url-pattern>

Listener:
    和Scope相关:
         ServletContext(Attribute)Listener:
             initialized():Web容器启动时调用
             destroyed():Web容器关闭时调用
         ServletSession(Attribute)Listener:
             登陆:initialized():request.getSession()
             登出:destroyed():session.invalidate()/session=null;
         ServletRequest(Attribute)Listener:
             initialized():doXXX()调用时
             destroyed():doXXX()调用后


    在xml中配置:
        <listener><listener-class>url</></>

    统计在线人数:


Servlet_Access:
    1.    创建Bean、impl、DBUtil包

    2.    创建DBUtil包(openConnection(),closeConnection())
        在lib中复制mysql-java.jar
        配置properties文件

    3.    Bean包对应数据库中表

    4.    Bean.impl包实现表接口(add(),list())

    5.    Servlet包实现:
        响应请求,后台逻辑,页面跳转


        
        
       
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值