Servlet进阶下

Requst作用域

request==>作用域:也就是在某个规定进行存值,取值==>类似于方法的作用域

三个常规的方法: 存: req.setAttribute(“键”,“值”)是以键值对的方式来进行存储==》就类似于一个Map对象
取: req.gettAttribute(“键”)==>根据键来获取值
删除: req.removeAttribute(“根据键来进行删除”);

req.getRequestDispatcher(“index.jsp”).forward(req,resp); 只有在服务器内部之间转换的才能获取到值

注意点: req.getParameter(“name值”) 这种方式是获取不到req.setAttribute(“键”,“值”) 的值==> 一般用于获取from表单的值,a标签拼接的参数
Content-Type 设置响应头的格式:==>text/html ==>jpeg jpg 图片 文件

2.下载服务器的上资源 ==>如何获取 服务器下WEB-INF下的资源 req.servletContext().getResourceAsStream("/WEB-INF"); ==>通过流进行读写操作

  1. 重定向==> resp.sendRedirect(“传递的是小重定向的路径”);==>两次请求

4.HttpServletRequest >请求 重要的方法==> req.getParameter(“name值”)>获取单个 >获取一组的==> req.getParameterValues()
>获取的服务器的相关的资源(…等)
ServletConfig==> 获取servlet的配置信息 ==> 用于在当前servlet进行存值 取值
1.获取这个对象 this.getServletConfig();
2.获取值的方法 getInitParameter(“ecoding”) > 以键值对的形式来获取的
3. config.getInitParameterNames(); >获取到所有servelt 信息的name值
> 返回值是 Enumeration names
==>才用迭代器的思维来进行遍历 hasMoreElements() nextElement();
4.config.getServletName() 获取到当前servlet的名字

Servlet的配置

5.ServletContext >上下文对象(全局) 1. 可以进行存取值 2.作用域比较大,生命周期是随着服务器的开始而创建,服务器销毁,也被销毁 2.获取到全局的配置
2.获取这个对象 第一种: this.getServletContext(); 第二种: req.getServletContext(); >获取的都是同一个对象
3.常规的方法: 存: req.setAttribute(“键”,“值”)
>是以键值对的方式来进行存储==》就类似于一个Map对象
取: req.gettAttribute(“键”)==>根据键来获取值
删除: req.removeAttribute(“根据键来进行删除”);

                 4.     <context-param>
                                <param-name>tt</param-name>     ==>在web.xml设置全局  ===>获取的方法 getInitParameter("键名");
                                    <param-value>ll</param-value>
                                   </context-param>

5.获取所有: getInitParameterNames(); ==》 Enumeration names
==>才用迭代器的思维来进行遍历 hasMoreElements() nextElement();
6.获取服务器的一些配置信息 sc1.getRealPath("/"); 获取到项目发布到服务器的地址
sc1.getContextPath(); 获取 到项目名的地址
getServerInfo(); 获取服务器的基础信息

重定向与转发的区别

resp.sendRedirect(“index.jsp”); 重定向
req.getRequestDispatcher(“welcome.jsp”).forward(req,resp); 转发 第一个参数是转发的路径 forward(req,resp) ==>固定的写法(记住要加上)

转发与重定向的区别: ==>   一个是req                        一个是resp
                          在服务器内部执行                  是在客户端执行
                           一次请求                        两次请求

                           url 地址是不会发生改变           url地址是会发生改变


                           转发可以携带参数                    一般不适用重定向来携带参数   resp.sendRedirect("welcome.jsp?uname=fujiawei");

                          A项目跳转B项目是不能使用转发,必须使用重定向 ==>  原因是转发是在服务器内部执行,不会改变地址,A项目跳转到B项目是需要改变地址

                          安全性高  (服务器内部执行)                            安全性低

                          转发的效率高                                          效率低

                          查询一般使用转发                                      增加成功 删除成功  修改成功
                                                                 ==>原因是如果使用转发,url地址不会发生改变,还是在服务器内部执行,所有可以出现重复提交
                                                                 ==>只需要断开这一次请求,就可以解决这个问题

文件上传

上传 ==>文件 步骤 1.导包 (2个)
2. enctype=“multipart/form-data” 必须是这个格式来进行提交 必须是post请求
3. 得到上传的路径的文件夹 ==> req.getServletContext().getRealPath("/upload"); ==>不存在就创建 file.mkdirs();
4.判断是否是上传的格式进行上传 ==>ServletFileUpload.isMultipartContent(req);
5. 构建其核心对象 ==> FileItemFactory factory = new DiskFileItemFactory();
//实例化这个核心对象
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
6.获取其条目 parseRequest(req); ==》 List
7. 调用其方法来判断是普通的文本,或者是文件 ==》 fileItem.isFormField()
8. fileItem.write(newFile); 写文件调用这样一个方法 ==>不管是普通文本,还是是文件,都是用过name值来进行获取的

19.servlet注解: @WebServlet(name = “user1Servlet”,urlPatterns = “/user1Servlet”) ==> 替换web.xml
==> @WebServlet("/user1Servlet") 默认是按照名字的首字母来进行加载 通配符 /* /userSerclet /abc/* *.do

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值