javaweb学习Day2

使用eclipse开发WEB项目(jsp项目) tomcat
 
1在eclipse中配置tomcat
 
 
1.打开eclipse在window里面配置
    window->preferences->(搜索server,打开Runtime Environments)->点击Add->Apache下选择tomcat版本后点击Next->
    选择JRE:
    如果JRE 没有自己想要的jre版本,那么点击Installed JREs...下一步Add下一步选择Standard VM
    然后选择JRE home(jdk根目录)再点击Finish
2.在面板里面配置
    打开Servers控制面板,点击No servers are available,Click link to create a new server...选择tomcat版本后直接Next
    打开后出现Add and Remove ,直接点击Finish
    接下来创建项目为运行tomcat。
    File->New->Others->搜索web(选择其下的Dynamic Web Project)next->接下来命名并在Target runtime选择Tomcat版本
    然后进入Web Module界面(单选框要打钩,目的是为了让它自动创建web.xml)
3.访问创建的web项目:
    浏览器可以直接访问WebContent中的文件但不能访问WEB-INF内的文件,例如
    index1.jsp 在WebContent中但不在WEB-INF,index2.jsp 在WEB-INF中则浏览器不能访问index2.jsp,但能访问index1.jsp。
    WEB-INF中的文件 无法通过客户端(例如浏览器)直接访问,只能通过 请求转发 访问
    注意:并不是 任何的内部跳转 都能访问WEB-INF;原因是 跳转有两种方式:请求转发、重定向
    在配置完tomcat的eclipse里面,有的创建完项目时第一行报错,原因:没有配置tomcat环境
    ---------------配置tomcat运行时环境----------------
    a.将解压的tomcat包中的lib目录下的servlet-api.jar加入项目的构建路径中
    b.右键项目->Build Path->Libraries->Add library...->Server Runtime(选择完后点击Next)
4.部署tomcat
    在servers面板 新建一个 tomcat实例,再在该实例中 部署项目(右键->Add
    )之后运行
    注意:一般建议 将eclipse中的tomcat与 本地tomcat的配置信息保持一致:将eclipse中的
    tomcat设置为托管模式(Server Locations下的第二项),当【第一次】创建tomcat实例后,
    双击,选择该实例,选择Server Locations下的第二项。
5.统一字符集编码
    a.编码分类:
    设置jsp文件的编码(jsp文件中的pageEncoding属性):jsp->java
    设置浏览器读取jsp文件的编码(jsp文件中的content属性) 
    一般需要将上述设置成 一直编码 推荐使用UTF-8
    文本编码:
    I.将整个eclipse中的文件 统一设置(推荐使用第一个)
    Window->Preferencs->JSP Files里面的Encoding修改为UTF-8(只能对从当前设置以后的文件生效,以前文件的字符编码不会改变)
    II.设置 某一个项目中的文件设置为统一编码
    右击项目选择Properties->Text file encoding下的others选择UTF-8
        III.设置单独文件
    右击文件选择Properties->Text file encoding
6.Jsp的页面元素:HTML 、Java代码脚本Scriptlet、注释、指令(jsp开头那一段)
     A。脚本Scriptlet
    
    a)    <%
            局部变量、Java语句
        %>
    b)    <%!
            全局变量、定义方法
        %>
    c)    <%=输出表达式%>、
    
        一般而言,修改web.xml、配置文件、Java代码  建议重启tomcat服务
        但是如果修改JSP\html\css\js,不需要重启
 
    注意:out.println()不能回车;要想回车:"<br/>"。
         
         out.print()和<%= %> 可以直接解析表达html代码指令。
         
    
    B。page指令
    
    <%@ page …%>
    language:jsp页面使用的脚本语言
    import:导入的类(包)
    pageEncoding:jsp文件自身编码 jsp->java的编码
    contenType:浏览器解析jsp编码
    
    
    C。注释
    
    html注释<!-- -->,可以被客户通过浏览器查看源码看到
    java注释// /* ... */
    jsp注释 <%-- --%>
    
7.jsp内置对象(自带的,不需要new 也能使用的对象)
    jsp九大内置对象:
    
    1.out:向客户端输出呢内容
        
    2.request:请求对象;存储"客户端向服务端"发送的请求信息
        
    3.request对象常见方法:
        
        String getParameter(String  name):根据请求的字段名key(input标签的name属性) ,返回字段值value(input标签的value属性值)
        
        String[] getParameterValues(String  name):根据key返回多个字段值(常见:checkbox多选按钮)
        
        void setCharacterEncoding("编码格式utf-8");设置post方式请求编码(一个页面请求另一个页面时所要发送的解析[请求]编码)
        (tomcat7以前默认iso-8859-1,tomcat8以后改为utf-8)
        
        getRequestDispatcher("B.jsp").forword(request,response); 请求转发 的方式跳转 A->B
        
        ServletContext getServerContext(); 获取当前项目的ServletContext对象
        
        示例:
        注册register.jsp ,show.jsp
        get提交方式:method="get" 和 地址栏 、超链接(<a href="xx">)请求方式 默认都属于get提交方式
        get与post请求方式的的区别
        
        a. get方式  在地址栏显示 请求信息(但是地址栏容纳的信息有限,4-5KB,如果请求数据存在大文件,图片等,地址栏会出现无法全部容纳而不能全部全部显示而报错) ;pos不显示
        b.文件上传操作,method必须为post方式
        推荐使用post
        
        
        统一请求的编码 request
        
        
        get方式 如果出现乱码,解决:
        
        a.统一 每一个变量 的编码(不推荐)
        new String(旧编码,新编码);
        如:name=new String(name.getBytes("iso-8859-1","utf-8");
        
        b.修改server.xml, 一次性的更改tomcat默认get提交方式的编码(utf-8)
        建议 使用tomcat时,首先在server.xml中统一get方式的编码。
        建议使用tomcat前,首先在server.xml统一get方式的编码,URIEncoding="UTF-8"
        
        
        
        post方式
        
        request.setCharacterEncoding("utf-8");
        
        
        
        
        
    4.response:响应对象
        提供的方法:
        void addCookie( Cookie cookie);服务端向客户端增加cookie对象
        void sendRedirect("a.jap") throws IOException; :页面跳转的一种方式(重定向)
        
        示例:
        login.jsp
        <%
            <form action="check.jsp" method="post">
                用户名:<input type="text" name="uname"><br/>
                密码:<input type="password" name="upwd"><br/>
                <input type="submit" value="登录"><br/>
            </form>
        %>
        
        check.jsp
        
        <%
            request.setCharacterEncoding("utf-8");
            String name=request.getParameterValues("uname");
            String pwd=request.getParameterValues("upwd");
            if(name.equals("zs")&&pwd.equals("123"){假设zs 123
                response.sendRedirect("success.jsp");(路径和图片写法一个原理)
                //页面跳转: 重定向 导致数据丢失
                request.getRequestDispatcher("success.jsp").forword(request,response);
                //页面跳转: 请求转发 ,可以获取到数据,并且 地址栏 没有改变(仍然保留原转发前的地址)
            }else{
                out.print("用户名或密码错误");
            }
        %>
        
        success.jsp
        
        登录成功!<br/>
        欢迎您
        <%
            String name=request.getParameter("uname");
            out.print(name);
        %>
        
        login.jsp ->check.jsp -> success.jsp
        
        
        请求转发和重定向的区别:
        
        
        页面跳转类型:            请求转发                      重定向
        
        地址栏否改变:         不变(check.jsp)             改变(success.jsp)
        
        是否保留第一次
        请求时的数据:          保留                             不保留                    --四种范围对象
        
        请求的次数:           1                               2
        
        跳转发生的位置:         服务端                        客户端发出的第二次跳转
        
        转发、重定向:
        
        转发:
        
        张三(客户端)   ->                   【 服务窗口A(服务端) -> 服务窗口B  】
        
        重定向:
        
        张三(客户端)  ->                     服务窗口A(服务端)->去找B
        张三(客户端)  ->                     服务窗口B(服务端)->结束    
        
        
        void setContentType(String type):设置服务端响应的编码(设置服务端的contentType)
        
        
        
        
    
    
    
    
    5.Cookie(存在于客户端,不是内置对象):Cookie是由 服务端产生的 ,再发给客户端保存。
        相当于 本地缓存的作用: 客户端访问服务端(第一次访问,服务端 发送客户端一个Cookie ,以后可以直接访问客户端)
        作用:提高访问服务端的效率,但是安全性较差
        
        Cookie: key<=>value
        
        javax.servlet.http.Cookie 产生对象
        这个类库包含的方法:
        public Cookie(String name,String value)
        String getName() :获取name
        String getValue():获取value
        void setMaxaAge(int expiry):最大有效期(秒)
        
        服务端准备给客户端:
        response.addCookie(Cookie cookie)//增加Cookie
        其参数就是服务端产生的对象
        页面跳转(转发,重定向)
        客户端获取Cookie:request.getCookie()
        
        a.服务端增加cookie:response 对象;客户端获取对象:request对象
        b.不能的直接获取某一单独对象,只能一次性将 全部的cookie拿到
        
        response_addCookie.jsp
        
        <%
            //服务端产生的
            Cookie cookie1=new Cookie("name", "zs");
            Cookie cookie2=new Cookie("pwd","123");
            
            //添加
            response.addCookie(cookie1);
            response.addCookie(cookie2);
            
            
            //页面跳转到客户端(转发、重定向)
            response.sendRedirect("result.jsp");
            
        %>
        
        
        result.jsp
        
        <%
            //客户端
            
            Cookie[] cookies=request.getCookie();
            for(Cookie cookies : cookies){
                out.print(cookie.getName()+"--"+cookie.getValue());
            }
        %>
        
        通过F12可以发现 除了自己设置的Cookie对象外,还有一个name JSESSIONID的cookie
        
        JSESSIONID的产生:
        
        客户端向服务端第一次请求时就会在服务端先产生一个session,这个session对象自带一个sessionID,然后将sessionID复制一份给JSESSIONID,
        然后将JSESSIONID放到的cookie里面,并且该cookie的key=JSESSIONID value=服务端sessionID的值,服务端在响应客户端的同时,将该cookie
        发送到客户端,至此 客户端就有了一个cookie(JSESSIONID);因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - session)
        客户端第二/N次请求服务端时,服务端会先用客户端的cookie中的JSESSIONID 去服务端中的session中匹配sessionID,如果匹配成功(cookie JSESSIONID和session sessionID),说明此用户不是第一次访问
        
        建议 cookie只保存 英文数字 ,否则需要进行 编码、解码 操作
        
        
        使用Cookie实现 用户名 记住功能
        
        login.jsp
        
        <%
            String uname;//全局变量
        %>
        
        <%
            Cookie[] cookies=request.getCookie();
            for(Cookie cookie: cookies){
                if(cookie.getName().equals("uname")){
                    uname=cookie.getValue();
                }
            }
            
        %>
        <%
            
        
            <form action="check.jsp" method ="post" value="<%=(uname==null?"":uname)%>"><br/>
            用户名:<input type="text" name="uname"><br/>
            密码:<input type="password" name="upwd"><br/>
            <input type="submit" value="登录"><br/>
            </form
            
        %>
        
        
        
        check.jsp
        <%
            request.setCharacterEncoding("utf-8");
            String name=request.getParameter("uname");
            String pwd=request.getParameter("upwd");
            
            //将用户名加入到cookie中,服务端 进行
            Cookie name=new Cookie("name",name);//cookie只保存 英文数字 ,否则需要进行 编码、解码 操作
            cookie.setMaxaAge(10);
            response.addCookie(name);
            
            response.sendRedirect("result.jsp");//从服务端传给客户端
        %>
        
        
        
        session(存在于服务端):会话
        
        
        a.浏览网站:打开->关闭
        b.购物: 浏览、付款、写邮件、退出
        c.电子邮件:浏览、写邮件、退出
        
        
        都是从开始到结束
        
        session机制
        客户端向服务端发出一个请求,服务端就创建一个session与其对应
        
        
    pageContext
    
    
    application
    config
    page
    exception
    
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹿海园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值