javaWeb学习整理02
Javaweb-02
Servlet
servlet初始化
- ?初始化是在浏览器第一次发送请求时,会创建servlet对象并初始化,但初始化会有时间
- 调整初始化时机
- 设置为tomcat服务器一启动就初始化servlet
- 在web.xml中配置上
1 - 正数,数值越小被创建优先级越高
- 在注解的形式中配置:
- @WebServlet(value = "/loginServlet",loadOnStartup = 1)
Servlet映射路径配置
- 三种路径配置方式
- 在web.xml中配置文件标签
- 开发中一般使用完全匹配,一个servlet对应一个映射路径
- 1.完全路径匹配
/user/path/
- 2.目录匹配
/user/*
- 3.后缀名匹配
*.do
- 4.缺省路径
/ - 访问路径找不到,就会找缺省路径下的
http
HTTP协议概述
- 浏览器和服务器按照一定格式进行数据交互,这种数据交互格式就是一种协议
- 协议:网络通信中,以固定的格式进行数据传输
- B/S 是按照HTTP协议进行通信的
- 通信就是一次请求,响应一次
- 请求协议
- 响应协议
- 通信就是一次请求,响应一次
- HTTP是超文本传输协议
- 版本
- HTTP/1.0
- 发一次请求创建一次链接,获得一个web资源,然后断开
- HTTP/1.1
- 发送请求,创建一次连接,获得多个web资源,连接断开
- HTTP/1.0
- ❗❗❗TCP协议是Java中Socket类表示TCP协议
- ❗❗❗web技术中HttpServletRequest接口用的是HTTP协议
- 版本
- 请求方式
- POST
- 特点
- 请求数据放在了请求体中
- 不会受浏览器的限制
- GET
- 特点
- 请求数据显示在地址栏中,用?来拼接
- 不安全
- 不同的浏览器对URL的字符串长度要求不同
- POST
- 协议结构
- 请求报文
- 请求行,请求体,请求头
- 响应报文
- 响应行,响应体,响应头
- 请求报文
抓取HTTP请求
- 准备有提交表单的html
- 更改action中的GET/POST请求
- new servletJava文件
- 运行后,浏览器中按F12
- Network---->可查看Headers
http请求报文分析
- 请求行,请求头,请求体
request
获取请求行
- API
- getMethod()
- 获取请求方式类型,GET/POST
- getRequestURL()
- 获取客户端发出的完整URL
- StringBuffer类型,可用toString()或者+“”,变成String类型
- getRemoteAddr()
- 获取IP地址
- getProtocol()
- 获取当前协议的名称和版本
获取请求头信息
- API
- 都是由k:V形式组成
- String getHeader(String name) 根据请求头的key关键字获取请求头信息
- Enumeration getHeaderNames() 返回此请求包含的所有头信息的key,属于对枚举类型进行遍历
🔹获取请求体信息
- API
- name是form中的name属性
- String getParameter(String name)
- 如果没有,返回null,如果有多个,会返回第一个
- String[] getParameterValues(name)
- 一般是针对复选框
- Map<String,String[]> request.getParameterMAp()
- 获取表单中的所有数据
使用工具类封装请求体数据
- 🔹BeanUtils工具类
- 步骤
- 1、在web--->WEB-INF下新建lib目录,并导入commons的jar包
- 2、准备带有表单的HTML
- 3、创建JavaBean就是实体类
- 4、new 一个servlet类,创建空的JavaBean对象
- Map<String, String[]> map = request.getParameterMap();//获取所有请求参数
- //使用BeanUtils工具类提供的API方法
BeanUtils.populate(user,map);
- ❗❗❗form中的name属性名和JavaBean的属性名要保持一致
request的生命周期
-
-
- 创建:浏览器给tomcat服务器发送请求后,tomcat创建request对象封装请求数据
-
- 销毁:tomcat服务器给浏览器响应信息结束后销毁request对象
-
request域对象
- 一次请求中的多个servlet可以数据共享
- API
- void setAttribute(String name,Obj o)
- Obj getAttribute(String name)
- void removeAttribute(string name)
- ❗❗❗getParameter()方法和getAttribute()方法的区别:
-
- getParameter()方法获取的是浏览器提交的数据(是表单提交的数据);
-
- getAttribute()方法获取的是request域中的数据(即获取的都是通过request.setAttribute()设置的值);
-
请求转发
- 从一个servlet中发起,请求到另一个Servlet或静态页面
- 转发后地址栏中地址不会改变
- API
- RequestDispatcher getRequestDispatcher(String path)
- 1、获取请求转发器对象
- void forward(ServletRequest request, ServletResponse response)
- 2、调用方法进行请求转发
登录案例
web
- 接受浏览器发送的数据,
- 把接收数据封装到JavaBean中
- 实例化service,调用业务层对象,传递JavaBean给业务层
- 基于业务层的执行结果,进行跳转转发
service
- 接受web层的JavaBean对象
- 实例化dao层,把JavaBean传递给dao层
- 基于dao层功能返回值进行业务逻辑处理
dao
- 连接数据库
- 发送SQL,接收结果
- 返回结果给service层
解决中文乱码
- POST会有乱码问题,GET已经解决了乱码问题
- request.setCharacterEncoding("utf-8");
- 必须保证设置字符集的代码放在doGet()或doPost()方法中的第一行位置
星星上的张优秀