• Java Web系列之使用Eclipse开发web项目(jsp项目)


    基本概念

    • 在eclipse中创建的web项目:
    1. 浏览器可以直接访问WebContent中的文件
    2. 但是WEB-INF中的文件无法通过客户端(浏览器)直接访问,只能通过请求转发来访问

    注意:并不是任何内部的跳转都都能访问WEB-INF,跳转有请求转发和重定向两种方式

    • 配置Tomcat运行时环境

    jsp<->servlet

    1. 将Tomcat/lib中的servlet-api.jar加入项目的构建路径
    2. 右键项目->build path ->add library ->server runtime
    • 部署Tomcat
    • 在servers面板,新建一个Tomcat实例,再在该实例中部署
    • 注意:一般建议将eclipse中的tomcat与本地Tomcat中的信息保持一致;第一次创建完设置托管模式;否则以后就变灰了,不能改
    • 统一字符集编码

    设置jsp文件的编码(jsp中的pageEncoding属性):jsp->java
    设置浏览器读取jsp文件的编码(jsp文件中content属性)
    一般讲上述设置成统一码,推荐使用国际码utf-8

    文本编码:

    1. 将整个eclipse中的以后文件统一设置
    2. 设置一个项目
    3. 设置单独文件
    • jsp的页面元素:HTML,Java代码(脚本scriptlet),指令
    1. 脚本scriptlet
    //1
    <%
    	局部变量、Java语句
    %>
    //2
    <%!
    	全局变量、定义方法
    %>
    //3
    <%= 输出表达式    %>
    

    一般而言,修改web.xml需要重启tomcat,修改jsp不需要

    注意:out.println()不会回车,需要添加HTML的换行符,out.println()中可以识别html代码

    1. 指令
    • page指令
    <%@page .....%>
    
    • page指令的属性:
    1. language:jsp页面使用的脚本语言
    2. import:导入类
    3. pageEncoding:jsp文件自身编码 jsp->java
    4. contentType:浏览器解析jsp的编码
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    
    1. 注释
    1. html注释 网页源代码里边可以显示
    2. java注释// /.../
    3. jsp注释<%-- jsp注释 --%>

    JSP九大内置对象(重点)

    • jsp九大内置对象(重点)(自带的,不需要new也能使用的对象)
    1. out:输出对象,向客户端输出内容
    2. request:(封装请求信息)请求对象;存储"客户端向服务端发送的请求信息"(数据只在同一次请求有效)
    • 常见方法:
    • String getParameter(String name):根据请求的字段名key,返回字段值value;
    • String[] getParameterValues(String name):根据请求的字段名key,返回多个字段值value(checkbox);
    • void setCharacterEncoding("编码格式utf-8"):具体设置post请求编码(tomcat默认编码iso-8859-1);
    • getRequestDispatcher("b.jsp").forward(request,response): 请求转发的方式跳转页面 A->B
    • ServletContext getServerContext():获取项目的ServletContext对象
    • 示例:
    • 注册
    • 注册页register.jsp 展示页show.jsp
    • 访问url含义
    • localhost:8080/MyJspProject/show.jsp?uname=aa&upwd=wer&uage=12
    • 连接/文件?参数名1=参数值1&参数名2=参数值2&参数名3=参数值3
    • 统一请求的编码request
    1. get方式 如果出现乱码解决方式:
    • 统一每一个变量的编码(不推荐)
    • 变量名=new String(变量名.getBytes("iso-8859-1"),"utf-8");
    • 每个变量改一次
    • 修改server.xml一劳永逸
    • 建议使用Tomcat时,首先在server.xml中统一编码方式 URIEncoding="UTF-8"
    1. post方式
    • request.setCharacterEncoding("utf-8");
    • get提交方式:method="get"和地址栏、超链接请求方式默认都属于get提交方式
    • get与post请求方式的区别:
    1. get方式在地址栏显示请求信息(但是地址栏容纳信息有限,4-5kb,如果请求数据存在大文件,图片,存储不下会报错),post不会显示
    2. 文件上传操作,必须是post
    3. 推荐使用:post
    1. response:(响应信息)响应对象
    • 提供的方法:
    1. void addCookie(Cookie cookie):服务端向客户端增加cookie对象
    2. void sendRedirect(String location)throws IOException:页面跳转的一种方式
    3. void setContentType(String type):设置服务端响应的编码(设置服务端的contentType类型)
    • 示例:登录
    • login.jsp登录->check.jsp判断->success.jsp
    • 请求转发和重定向的区别:
    1. 地址栏改变:不变,变
    2. 是否保留第一次请求时的数据:保留,不保留(跳到success.jsp拿不到数据) --4种范围对象
    3. 请求的次数:1次(请求转发的跳转是在服务器内部跳转),2次
    4. 跳转发生的位置:服务器端,客户端
    5. 转发、重定向:
    • 转发: 张三(客户端)->【服务窗口A->服务窗口B】
    • 重定向: 张三(客户端)->【服务窗口A】->张三(客户端)->【服务窗口B】
    1. session(存在于服务端)
    • Cookie
    • Cookie(存在于客户端,不是内置对象,得new):
    • Cookie是有服务端生成的,再发送给客户端保存;
    • Cookie相当于本地缓存的作用:客户端->服务端
    • 作用:提高访问服务端的效率,但是安全性较差
    • Cookie:name-value
    1. javax.servlet.http.Cookie类产生的 public Cookie(String name,String value)
    2. String getName():获取name
    3. String getValue():获取value
    4. void setMaxAge(int expiry):设置最大有效期(秒)
    1. 服务端准备Cookie:
    • response.addCookie(Cookie cookie)
    • 页面跳转(转发,重定向)
    1. 客户端获取Cookie:
    • request.getCookies(); //获取Cookie必须每次都是获取全部
    • 注意:
    1. 服务端增加cookie:response对象
      客户端获取对象:request对象
    2. 不能直接获取单独对象,只能一次性将全部cookie得到
      除了自己设置的Cookie对象外,还有一个name叫JSESSIONIDDE的cookie
    3. 使用Cookie实现自动记住用户名 //建议cookie只保存英文数字,否则要编解码
    • session:会话
    1. 浏览网站:开始-关闭
    2. 购物:浏览-付款-退出
    3. 电子邮件:浏览-写邮件-退出 一次开始到关闭
    • session机制
    • 客户端第一次请求服务端
    1. 客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息),并且每个session对象都会有唯一的sessionId(用于区分其他session);
    2. 服务端会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionId的值;
    3. 然后,服务端会在响应客户端的同时,将该cookie发送给客户端,至此 客户端就有一个cookie(JSESSIONID)
    4. 因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID-SESSIONID)
    • 客户端第二次/n次访问服务端
    1. 客户端第二次/n次访问服务端时:服务端会先用客户端cooki中的JSESSIONID去服务端session中匹配sessionId,若匹配到,则说明不是第一次访问
    • 例子:
    • 客户端:顾客
    • 服务端:存包处

    顾客第一次存包:商场判断此人是不是之前已经存过包(是否有钥匙),如果新顾客(没钥匙),分配一个钥匙;

    第二次/n次,如果手里有钥匙,直接一一对应,不分配

    • session:
    1. session存储在服务端
    2. session是在同一个用户请求时共享
    3. session实现机制:第一次客户请求时产生一个sessionid并复制给jsessionid然后发给客户端.最终实现sessionid与jsessionid一一对应
    • session方法
    1. String getId():获取sessionId
    2. boolean isNew():判断是否是新用户(第一次访问)
    3. void invalidate():使session失效(退出登录、注销)
    4. void setAttribute():
    5. Object getAttribute():
    6. void setMaxInactiveInterval(秒):设置最大有效非活动时间
    7. int getMaxInactiveInterval(秒):获取最大有效非活动时间
    • 示例:
    • 登录
    • JSESSIONID5B3D4AA49AB91B1311F514BCF727DD29
    • sessionId5B3D4AA49AB91B1311F514BCF727DD29
    • 客户端在第一次请求服务端时,如果服务端发现此请求没有JSESSIONID,则会创建一个name=JSESSIONID的cookie并返回给客户端
    • Cookie
    1. 不是内置对象,要使用必须new
    2. 但是,服务端会自动new一个Jsessionid的cookie
    • cookie和session的区别:
    1. 位置分为:客户端和服务端
    2. 安全为:不安全和较安全
    3. 保存的内容:Object和字符串String
    1. application:全局对象
    1. String getContextPath():虚拟路径
    2. String getRealPath(String name):绝对路径(虚拟路径,相对的的绝对路径)
    1. pageContext:JSP页面容器
    2. config:配置对象
    3. page:当前JSP页面对象(相当于JAVA中的this)
    4. exception:异常对象

    九大内置对象中四种范围对象(小到大)

    1. pageContext(也可称为page对象):当前页面有效,页面跳转后无效
    2. request:同一次请求有效,其他请求无效(请求转发后有效,重定向后无效)
    3. session:同一次会话有效(无论怎么跳转都有效,只要不关/切换浏览器)
    4. application:全局有效(整个项目有效):整个项目运行期间都有效,切换浏览器也有效,关闭服务或者切换项目无效
    • 以上四种对象的共有的方法:
    1. Object getAttribute(String name):根据属性名,获取属性值
    2. void setAttribute(String name,Object obj):设置属性值(新增,修改)
    3. setAttribute("a","b");//如果a对象之前不存在,则新建一个a对象; 如果a之前已经存在,则将a的值改为b
    4. void removeAttribute(String name):根据属性名,删除对象 //set赋值,get取值,尽量使用小范围,性能损耗小
  • 相关阅读:
    验证数字范围的小插件
    解决EJB懒加载问题
    JS获取按键的代码,Js如何屏蔽用户的按键,Js获取用户按键对应的ASII码(兼容所有浏览器)
    struts2标签之<s:select>
    c#(winform)中自定义ListItem类方便ComboBox和ListBox添加项完全解决
    辞职前须慎重考虑
    怎样把PDF文件在WinForm窗口中显示出来
    加载报表失败
    经典正则表达式 Javascript
    无法生成项目输出组“内容文件来自...
  • 原文地址:https://www.cnblogs.com/wanggang9968/p/12915911.html
Copyright © 2020-2023  润新知