Day03

Day03

1、Request

含义:

    ServletRequst(请求对象,封装了请求信息的方法)

        HttpServletRequest


常用功能:

一、获取请求参数


index.html


RequestDemo.java


二、获取请求头信息



三、获取其它信息



2、防盗链

场景:防止资源被其它网站引用。

实现:


3、URLEncoder & URLDecoder

URLEncoder:对URL字符串编码,如在浏览器上输入链接携带中文参数时会出现明文,这是因为浏览器对中文进行编码导致的。

URLDecoder:对URL字符串进行解码。

案例:


4、乱码

来源:由于编码和解码不一致导致

案例1:html文件乱码

若html的文件编码是utf-8,浏览器要正常打开html,浏览器必须采用utf-8去解。

或者简写:

案例2:get请求方式乱码

原因:req.getParameter(参数名) //默认是采用ISO8859-1去解码

方案:

           1>如果浏览器是通过utf-8编码后提交数据的。

           String name =req.getParameter("userName");

           name = newString(name.getBytes("ISO8859-1"), "UTF-8");

          2>如果浏览器是通过gbk编码后提交数据的。

           String name =req.getParameter("userName");

           name = newString(name.getBytes("ISO8859-1"), "gbk");

案例3:post请求方式乱码

原因:req.getParameter(参数名) //默认是采用ISO8859-1去解码的

方案:覆盖 req的默认解码的码,设置为浏览器的编码方式。

        1>浏览器是通过utf-8编码后提交数据的。

            //在获取参数前添加

            req.setCharacterEncoding("utf-8"); 

            String name =req.getParameter("userName");

       2>浏览器是通过gbk编码后提交数据的。

           req.setCharacterEncoding("utf-8"); 

           String name =req.getParameter("userName");


注意:req.setCharacterEncoding("utf-8");//这句话对get请求无效的。 

5、包含

含义:将当前的资源和下一个资源合并一起响应给客户端。

用法:req.getRequestDispatcher("下一个资源").include(req,resp);

案例:

第一个资源:

第二个资源:


6、MVC设计模式

含义:是一种将业务逻辑、数据与界面分离,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

M:表示model(模型):表示应用程序核心,即一个项目中业务逻辑的那部分。

V:表示view(视图):显示数据

C:表示controller(控制器):接收请求。


用户注册案例:

RegisterController.java     RegisterService.java     User.java      register.html


7、会话

含义:当用户打开浏览器A,在该浏览器A多次点击链接,最后关闭整个浏览器A的过程,叫做一次会话。

问题:因为http协议是无状态的(意思是说服务器不会保存之前浏览器访问的记录),也就是说一次会话中多个请求数据不能共享。

场景1:假设一次会话中,用户多次购买了多个商品,如何保证调到购买页面还能将之前添加的商品一块结算?

场景2:假设一次会话中,用户多次购买了多个商品,用户关闭浏览器,然后打开同一个浏览器,如何保证新的会话可以拿到之前添加的商品?

场景3:京东购物车实现原理(思考四种情况,购物车是否还存在)

实现方案:

1、保存cookie【浏览器技术】

2、保存session【服务器技术】

3、持久化到数据库


8、cookie

含义:cookie是由服务器创建,位于浏览器中,每次请求都会将cookie携带到浏览器


用法:

案例:使用cookie实现自动登录功能

1、第一次请求时,判断账号密码是否正确,如果正确则判断是否自动登录,若允许自动登录,则将账号密码保存cookie

2、非第一次请求时,则从cookie中获取账号密码,判断账号密码是否正确


9、session

含义:服务器技术,服务器会为用户的浏览器分配一个session对象,当下次如果要用户的数据就从用户的浏览器对应的session中获取。

存活期:

Session对象在服务器中默认是30分钟有效(从最后一次访问开始计时),可在web.xml配置

或通过代码setMaxInactiveInterval(秒)     (注:通过代码优先级高于配置)


api详解:

req.getSession()等价req.getSession(true)       //之前没有session对象,则创建,否则返回

req.getSession(false)                                       //若之前没有则返回null,若有则返回[不建议]  

getId()                                                               //获取session对象的唯一表示id

setMaxInactiveInterval(秒);                              //设置session存活期(优先于web.xml的session配置)

invalidate()                                                      //清空session的数据并使当前session无效(用于退出系统)

setAttribute(key,value)                                    //往session添加数据

getAtrribute(key)                                             //从session取数据



10、Servlet三大域对象

ServletContext域

Session域

Request域


11、禁用cookie

服务器能找到浏览器对应的session,是根据Cookie技术+名JSESSIONID的cookie

总结:Session 依赖于Cookie + JSESSIONID

解决方案:URL重写

|--手动在URL后面添加;jsessionid=xxx  比如:http://localhost:8081/Day03/context2;JSESSIONID=7F6CC306F2DB17BC389A0D70EFA06308

    |--通过Response自带方法

        |--resp.encodeRedirectURL(url)

        |--resp.encodeURL(url)


12、购物车案例




13、jsp

设置jsp的配置信息

include

taglib

page

       语法:<%@ page 属性=属性值%>

       language="java"                         //代表脚本的语言java

       contentType="text/html; charset=utf-8"        //告诉浏览器mine ,解码,jsp的编码

       pageEncoding="utf-8"               //跟上面一样

       session="true" true | false         //要不要为jsp创建session对象【如果之前有就不创建】

       isThreadSafe="true" true|false 

       autoFlush="true" true | false true :自动刷新缓存 false:不自动刷新缓存【建议手动flush,不然可能造成缓存溢出】

       buffer="8kb" none|xxkb  缓存大小【jsp缓存】

                      buffer = none不能和autoFlush=false同时使用

                      autoFlush = false            buffer =具体kb ,可能会造成缓存溢出

       import=""                         导包

       errorPage=""                   当当前的jsp报错的时候转发那个页面来显示  【转发】

       isErrorPage="false"        true | false表示当前jsp是不是专门用于处理异常的

                     false     没有excpetion对象,并且响应码是200

                     true   有excpetion对象,并且响应码是500

        isELIgnored="false"       true | false是不是要忽略EL表达式

你可能感兴趣的:(Day03)