java(16)--servlet+jsp+四大域+javabean+开发模式

来源:互联网 发布:积分兑换系统源码 编辑:程序博客网 时间:2024/05/23 19:14

一、javaweb

1. HTTP协议

Http协议制定客户端与服务器端的通讯格式
Http协议一定一问一答
问: 请求消息 请求行:请求方式get和post的区别 消息头:referer
答: 响应消息 响应消息: 压缩方式 Accept-Encoding
通知对方下载: content-disposition:attachment;filename=文件名

2. tomcat服务器

1) 配置虚拟目录 : 发布到webapps目录下的web应用 tomcat会自动做映射
2)配置虚拟主机 : 服务器根据浏览器发送的Host头来决定访问哪台虚拟主机
虚拟主机需要被外界访问,其名称一定要和在dns上注册的域名一致

3. Servlet

在web.xml文件中怎么做映射

4. ServletContext 对象

域对象 : 可以当map集合用,它有自己的生命周期

class ServletContext {    private Map< String, Object> map = new HashMap();}

在web工程中读取文件一律用ServletContext对象来实现
在其他工程中无法获得ServletContext对象,只能使用类加载的方式读
类加载方式缺点: 文件会先加载到内存,所以容易导致内存的溢出
监测不到硬盘上文件的改变
只能读取类路径下的文件(classpath中配置的目录)

5. ServletConfig 对象

6. HttpServletRequest

获得提交的参数信息 getParameter() | Enumeration getPameterNames()
域对象
请求转发 RequestDispatcher 转发对象

7. HttpServletResponse

发送数据OutputStream getOutputStream | PrintWriter getWriter 只能调一个
发送响应消息头:
防止中文乱码 response.setContentType(“text/html;charset=utf-8”)
做下载:
response.setContentType(“application/octet-stream”);
content-disposition:attachment;filename=文件名
请求重定向:
sendRedirect
发送302状态码 和 location头

8. 会话技术

cookie : 当用户来访问服务器,服务器需要记住每个用户的一些信息, 发送给用户浏览器存起来
设置有效时间,不设置仅在浏览器进程有效
session: 将用户的信息存入一个Session对象(域),将Seesion对象的id作为cookie发送给客户端
Session的实现也是基于Cookie的,多个浏览器是否共享一个Session不是Session决定的
是Cookie的有效时间决定的
Session对象也是有有效时间的, 默认30分钟, 我们可以设置

二、 jsp

1. jsp 是一种动态wen资源的开发技术

jsp的特点:
1) 写jsp就像在写html 所以做数据美化很方便, jsp的特点就是能写java代码
2) jsp中不适合写复杂的java代码
3) 在jsp页面中禁止写java代码
4) 在jsp页面中避免不了要写java代码,
jstl自定义标签、el表达式两个技术就是用于移除jsp页面中的java代码

servlet 和 jsp 都用在哪
Servlet适合写大量的java代码,所以用于处理用户的请求,进行逻辑判断
jsp负责做数据的输出,因为它可以轻松地对数据进行美化

三、 jsp指令

1. page指令

import 导包 多个包用逗号隔开
session 指定是否使用session
errorPage 指定出错跳转的页面
也可以在web.xml文件中进行配置

    <error-page>        <exception-type>java.lang.ArithmeticException</exception-type>        <location>/error.jsp</location>    </error-page>    <error-page>        <error-code>404</error-code>        <location>/404.jsp</location>    </error-page>    <error-page>        <error-code>500</error-code>        <location>/500.jsp</location>    </error-page>

2. jsp 乱码问题

四、字符乱码

1. 原因: 计算中存储的和传输的都是二进制

我们需要阅读文字,就需要用到码表, 字符—> 字节 为编码过程  字节->字符 解码过程编码和解码使用了不同码表就会出现乱码

2. 乱码问题一般出现在解错码的情况

1) 我们的程序接错码, 需要知道错误的码表,编码回去,再用正确的码表解码2) 别的程序解析我们的文件解错码, 需要告诉对方我们使用码表

五、jsp九大隐式对象

ServletContext application Servlet的上下文路径
ServletConfig config
HttpServletResponse response
HttpServletRequest request
HttpSession session jsp配置了 page指令 session=true(默认) 的情况下才有
this page
Throwable exception jsp配置了 isErrorPage=”true”的情况下才有
JspWriter out 向ie输出数据 response.getWriter 获得一个PrintWriter
out 就是 PrintWriter的缓冲流
PageContext pageContext jsp页面的上下文

1. out 对象

2. pageContext对象

可以作为域对象,被称作page域
有个方法是 findAttribute() 可以从四个域中根据指定的key去取值,从范围小的开始找
pageContext.getRequest().getAttribute();

最重要的作用就是可以获得其他8个隐式对象
标签和el表达式都是用于移除jsp中的java代码
所有的java代码都可以移到另一个java类的方法中,然后再复用代码
但是,如果用到了九大隐式对象,这样的java代码就不容易移到方法中,为了能移到方法中需要将九个对象传给方法
一个比较方便的做法就是将pageContext对象传递给后台的方法,在方法中可以轻松地获得其他8个对象

六、 web开发的四个域对象

pageContext(称之为page域) PageContext
request (称之为request域)HttpServletRequest
session (称之为session域)HttpSession
application(称之为application域)ServletContext

这4个对象的生命周期?
page: jsp页面被执行到执行完毕
request: 浏览器发送请求到当次请求结束
浏览器发送请求,web容器创建request对象,请求结束,该对象销毁
session: 开始一个会话,服务器创建session,一直到session失效
application: web应用发布到服务器,服务器启动,对象就创建,直到web应用被移除或服务器关闭
该对象被销毁

什么是域?为什么把这4个对象叫做域对象呢?
域即范围, 这4个对内部都维护了map集合,可以存储数据,这4个对象都有固定的生命周期和作用范围,所以被称作域对象
四个域的范围(作用域)
page: 只在当前jsp页面有效
request: 只在一次请求中有效
session: 只在当前会话有效
application: 整个web应用都有效

哪种情况下用哪种域对象。
page: 想在页面用map就用page
request: 需要显示数据给浏览器看完了就没用了,就存在request域 (典型应用请求转发)
session: 数据给用户看完了,一会还有用,就存在session域
比如,用户登陆,购物车
典型应用: 请求重定向
application: 数据给用户用完了,别的用户也要用
比如,聊天信息、统计在线人数

四个域的范围是从小到大的: page、request、session、application
使用的时候有个原则: 小的域对象能搞定的绝对不用大的

七、javabean

1. 一个java类

特点:
必须有无参的构造函数
属性私有(字段)
对外要暴露共有的 getter 或 setter

2. 用反射的方法访问javabean为内省

3. BeanUtils应用

请求参数封装到javabean的通用方法

public class WebUtils {    private WebUtils(){}    // 通用方法 将请求参数封装到bean    public static <T> T request2Bean(HttpServletRequest request, Class<T> clazz) {        try {            // 创建 javabean            T bean = clazz.newInstance();            // 注册一个转换器            ConvertUtils.register(new DateLocaleConverter(), Date.class);            // 获得所有的参数名称            Enumeration e = request.getParameterNames();            while (e.hasMoreElements()) {                String name = (String) e.nextElement();                String value = request.getParameter(name);                BeanUtils.setProperty(bean, name, value);            }            return bean;        } catch (Exception e) {            throw new RuntimeException(e);        }    }}

八、web开发模式

sun公司针对web开发提供了两种开发模式
model1: jsp+javabean 只适合开发小型的应用
这里写图片描述

model2: servlet+jsp+javabean (mvc)
这里写图片描述
问题:

getParameter(key)、getAttribute(key)/setAttribute()有什么区别 什么时候用class Request {    Map attributes = new HashMap(); // 作为域对象    Map parameters = new HashMap(); // 封装请求参数    Map headers = new HashMap();    getAttribute(key) {    return attributes.get(key);    }getParameter(key) {    return parameters.get(key);    }getHeader(name) {       }}
0 0
原创粉丝点击