A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

软件的架构
        c/s --->客户端服务器
        b/s --->浏览器服务器
        web是基于网络编程, 底层用tcpip协议

1.Tomcat
        访问: http://ip地址:8080/ROOT/index.jsp
        启动报错:
                1.JAVA_HOME没有配置好
                2.端口被占用
                        杀死占用你端口的进程
                                netstat -ano --->查到所有进程
                        修改我们自身端口:
                                修改conf/server.xml ---->改很多个地方
2.如何部署项目(放置)
        1.将项目直接拷贝到tomcat中的webapps目录下, 而且建议以打包war的方式拷贝
        2.在server,xml中<Host>标签下,添加一个 <Context docBase="真实路径" path="虚拟路径" />
                不会用的:原因有可能损坏核心配置文件
        3.在conf/catalina/localhost/ 下创建任意名字的xml文件
                文件定义如下内容: <Context docBase="真实路径" /> , 将来用户访问,文件名就是"虚拟路径";
3.Servlet
        是一种动态资源,(可以编写逻辑判断!!!!!), Servlet其实就是接口,里面规定你要写动态资源,只有能Servlet提供的这些方法,Tomcat才能认识
        作用: 编写Servlet其实运行服务端的小程序, 专门处理逻辑性的东西,用来处理用户的请求,并作出相应
       
        使用步骤:
                1.定义一个类,实现Servlet接口
                2.重写所有的抽象方法
                3.在service方法中书写逻辑
                4.在web.xml配置一下
                        <servlet>
                                <servlet-name>aaa</servlet-name>
                                <servlet-class>cn.itcast.web.servlet.DemoServlet</servlet-class>
                        </servlet>
                        <servlet-mapping>
                                <servlet-name>aaa</servlet-name>
                                <url-pattern>/mei</url-pattern>
                        </servlet-mapping>
4.Servlet的生命周期的方法
        init()  ---->只会执行一次,默认是第一个用户访问时会创建该Servlet,并且调用init();
                我们可以改变Serlvet创建时机, <load-on-startup>正数</load-on-startup> ,就可以在服务器启动的时候创建Servlet
                什么时候用到:当我们在init方法加载数据量比较大的东西时,建议配置 <load-on-startup>正数</load-on-startup>,
                为了提供第一个用户的体验!!!!!
        service() ---->每一次用户访问都会执行
               
        destroy() ----> 只会执行一次, 当服务器"正常关闭"的时候,执行.
        注意: Servlet是单例的(一个类在内存只有一个对象, 这样成员变量只有一套, 出现线程安全问题), 尽量不要定义成员变量,定义局部变量
5.Servlet3.0支持注解开发
        使用步骤:
               
                1.定义一个类,实现Servlet接口
                2.重写所有的抽象方法
                3.在service方法中书写逻辑
                4.在编写好的servlet类身上加@WebServlet的注解.
               
                @WebServlet注解
                        里面有一个属性很重要"urlPatterns"和"value"是一样的
        执行原理:
                假设用户输入:http://localhost:8080/DemoSerlvet1,
                http://localhost可以找到服务器电脑
                http://localhost:8080可以找到Tomcat
                /DemoSerlvet1: 这个tomcat会去查classes目录下的所有的字节码上有没有一个@WebSerlvet的注解,
                                                且value的值或者"urlPatterns"的值是否"/DemoSerlvet1",如果是, 就会创建该类的对象, 调用其service方法
6.Serlvet的注意事项
        1.WEB-INF下的不能被浏览器直接访问
        2.真正发布的项目在out下面
7.Servlet的继承体系
        Servlet ----> GenericServlet ---->HttpServlet
       
        GenericServlet:
                优点:不用重写一些不太重要的方法, 可以让代码看起来更简洁
                缺点:没有和http协议绑定, 不能获取http协议中特殊的内容
        HttpServlet:
                优点: 和Http协议绑定比较紧密, 可以获取Http协议中特殊的内容
                缺点: service方法做了方法的分发, 因为现在get和post方式获取参数的方式统一了,所以doGet和doPost的逻辑都一样了!!!
8.Servlet的urlPatterns的配置
        1.rlPatterns 可以定义多个值的
        2.路径配置规则
                绝对路匹配: 例如: "/demo1" 只有用户访问"/demo1"的时候才能找到这个资源
                目录匹配:
                        例如:"/user/login" ----> 只有用户访问"/user/login"的时候才能找到这个资源
                        例如:"/user/*" ---->只要用以"/user/"开头的都可能找到这个资源
                        例如:"/*" --->所以路径都能找到这个资源
                后缀名匹配:
                        例如: "*.aaa"  ---->可以匹配以.aaa后缀名结尾的,但是不能以"/"开头!!!!
       
    8. login.html中form表单的action路径的写法
                * 虚拟目录+Servlet的资源路径

        9. BeanUtils工具类,简化数据封装
                * 用于封装JavaBean的
                1. JavaBean:标准的Java类
                        1. 要求:
                                1. 类必须被public修饰
                                2. 必须提供空参的构造器
                                3. 成员变量必须使用private修饰
                                4. 提供公共setter和getter方法
                        2. 功能:封装数据


                2. 概念:
                        成员变量:
                        属性:setter和getter方法截取后的产物
                                例如:getUsername() --> Username--> username


                3. 方法:
                        1. setProperty()
                        2. getProperty()
                        3. populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
1.响应也是分三部分
        响应行:
                组成: 协议 状态码 状态描述
                状态码:
                        404: ---->浏览器访问的资源不存在, 路径写错了!!!!!
                        500: ----> 代码写的有问题, 该代码, --->先要去找到错误代码的位置
                        302: ---->告诉浏览器要重定向
                       
        响应头:
                作用:响应头可以给浏览器下命令,让浏览器按照我们的想法解析数据
                白话:其实浏览最在乎响应体,显示的内容,程序员可以通过响应头来控制显示方式,显示编码....
                常见的头:
                        content-type ---->可以让浏览器按照想要的格式以及编码解析
                        content-disposition ----> 可以让浏览器以默认打开方式解析,还是以附件解析(下载时候才会用到);
                        location ----> 可以给浏览器一个地址, 可以配合302的状态码一起完成重定向的动作
        响应体
                显示的内容!!!!!
2.Response对象
        操作响应行:
                setStatus(int 状态码的值); ---->设置状态码
        操作响应头
                setHeader(String key,String value);
        操作响应体:
                getOutputStream() ---->获取字节流
                getWrite() ------> 获取字符流
3.Response的作用
        1.完成重定向
                最终写法:
                        resp.sendRedirect("路径");
                        其实内部分成两个步骤
                                setStatus(302)
                                setHeader("location",路径)
4.路径问题:
        相对:
                以./或者../开始的路径
                技巧:找对(当前)和(目标)的关系
        绝对:
                以"/"开始的:
                其实绝对路径前面省略
                        客户端路径: -----> src, action, "重定向"都是客户端路径
                                 "http://ip地址:端口" ----> 但是如果你自己规定"http://ip地址:端口" 他就不会默认加了!!!!!!!
                        服务器路径: -----> 只有"转发"是服务器路径
                                 "http://ip地址:端口/虚拟路径"
                                 虚拟路径建议我们动态获取 -----> req.getContextPath();可以动态获取虚拟路径
5.如何输出字符数据到页面
        格式:  resp.getWriter().write("内容");
        注意:
                如果中文会出现乱码!!!
                原因:
                        resp.getWriter(); 这个流是tomcat帮我们创建的流, 他采用默认编码是ISO-8859-1,它不支持中文,
                解决方案:
                        1.设置writer的流的编码为"utf-8"; ---> resp.setCharacterEnconding("utf-8");
                        2.告诉浏览器以"utf-8"的方式来解析 ---> resp.setHeader("content-type","text/html;charset=utf-8");
                我们最终的写法:
                        resp.setContnxtType("text/html;charset=utf-8");
6.ServletContext
        作用: 他是和tomcat通信的桥梁, 原因: ServletContext是Tomcat为每一个项目创建的,专门用和tomcat交互的对象,每一个项目只有一个ServletContext对象,
        特点: 每一个项目只有一个ServletContext对象, 而且这个Tomcat为每一个项目创建的
        功能:
                1.获取文件的MIME类型(了解!!!!)
                        MIME: 可以让浏览器以指定引擎解析你的数据 ----> .jpg .png ---> text/html  IMG/JEPG
                        注意:高版本浏览器(除了ie),都会自动识别类型
                2.可以作为域对象存储数据 setAttr... getAttr.... , removeAttr....(用的很少!!!!!)
                        作用范围: 整个项目中有效, 所有的用户共享的东西放到这里
                3.获取文件的服务器端的真实路径
                        其实为File,自己的创建的流而服务的, 原因File或者自己的创建的流不能采用相对路径, 不然都相对于tomcat/bin目录下,
                        这是一定要绝对路径, 而绝对路径通过ServletContext对象来获取, 因为他可以读取catalina/localhost/xxx.xml得到docBase
                        指向的项目的真实路径, 可以通过ServletContext对象getRealPath获取绝对路径!!!!
                        注意: 一定注意自己的启动环境是谁!!!!!
                4.获取全局的参数:(用的也很少!!!!!)
                        在web.xml中:
                         <context-param>
                                <param-name>username</param-name>
                                <param-value>zhangsan</param-value>
                        </context-param>
                        String getInitParameter(String key);
                        例如:
                                String value = getServletContext().getInitParameter("username");
                               
                        增 ----> add, append,put,insert
                        删 ----> remove delete drop
                        该 ----> alter ,update, set
                        查 ----> get, select
                       
                       
       

                                 
               
               

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马