您的位置:首页 > 编程语言 > Java开发

Servlet动态页面技术

2015-06-03 21:08 435 查看
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包实现:

        响应请求,后台逻辑,页面跳转

        

        

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java javaWeb java后端