Request 作用域
作用域:也就是在某个规定内进行存值,取值,类似于方法的作用域
常规的方法
1.存值:req.setAttribute(“键”,“值”):是以键值对的方式来进行存储,类似于一个Map对象
2.取值: req.gettAttribute(“键”):根据键来获取值
3.删除值:req.removeAttribute(“键”):根据键来进行删除
4.req.getRequestDispatcher(“路径”).forward(req,resp):转发
注意点:
1.转发只有在服务器内部之间转换的才能获取到值
2.req.getParameter(“name值”):这种方式是获取不到req.setAttribute(“键”,“值”) 的值,一般用于获取from表单的值,a标签拼接的参数
ServletConfig (Servlet 的配置)
1.获取servlet的配置信息,用于在当前servlet进行存值、取值
2.获取这个对象:this.getServletConfig();
3.获取值的方法:getInitParameter(“ecoding”):以键值对的形式来获取的
4.config.getInitParameterNames():获取到所有servelt 信息的name值,返回值是 Enumeration,采用迭代器的思维来进行遍历:hasMoreElements() nextElement();
5.config.getServletName():获取到当前servlet的名字
ServletContext 上下文对象(全局配置)
可以进行存取值,作用域比较大,生命周期是随着服务器的开始而创建,服务器销毁,也被销毁,获取到全局的配置
获取当前对象
第一种:this.getServletContext();
第二种:req.getServletContext();
注意:两者获取的都是同一个对象
常规的方法
1.存值:req.setAttribute(“键”,“值”):以键值对的方式来进行存储,就类似于一个Map对象
2.取值: req.gettAttribute(“键”):根据键来获取值
3.删除值:req.removeAttribute(“键”):根据键来进行删除
web.xml设置全局
在web.xml设置全局,获取的方法:getInitParameter(“键名”)
< context-param>
< param-name>键< /param-name>
< param-value>值< /param-value>
< /context-param>
获取键值
1.getInitParameter(“键”):获取单个值,返回:String
2.获取所有的键:getInitParameterNames(); 返回:Enumeration ,采用迭代器的思维来进行遍历:hasMoreElements()、nextElement();
获取服务器的一些配置信息
1.getRealPath("/"); 获取到项目发布到服务器的地址
2.getContextPath(); 获取 到项目名的地址
3.getServerInfo(); 获取服务器的基础信息
servlet 中:doGet、doPost 、service之间的关系:
1.一般请求是get或者post方式,所有调用其实就是 servlet的 doGet() 或者是 doPost()方法
2.service():底层其实就是根据请求方式来调用其相应的方法:doGet() doPost() doPut()
设置编码格式
1.req.setCharacterEncoding(“UTF-8”):设置请求的编码格式
2.resp.setCharacterEncoding(“UTF-8”):设置响应的编码格式
3.resp.setContentType(“text/html;charset=utf-8”):设置响应头的编码格式
4.设置tomcat服务器的编码格式:config/service.xml:获取连接对象后追加:URIEncoding =“utf-8”
针对用户登录、注册、修改用户和删除用户写同一个servlet
前端传递标记,这个标记就是区分执行那个代码块,一张表对应一个实体,一个实体对应一个servlet
@WebServlet(name = "demoServlet", urlPatterns = "/demoServlet")
public class DemoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// from 表单还是可以通过name 来进行获取 (value值不相同)
String flag = req.getParameter("flag");
if ("register".equals(flag)) {
System.out.println("注册");
} else if ("login".equals(flag)) {
System.out.println("登录");
}
}
}
重定向
重定向:resp.sendRedirect(“index.jsp”)
特点:
1.使用:resp
2.是在客户端执行、发送两次请求
3. url地址会发生改变
4.一般不适用重定向来携带参数
5.安全性低、效率低
6.增加、删除、修改使用重定向
7.A项目跳转B项目是不能使用转发,必须使用重定向,原因是转发是在服务器内部执行,不会改变地址,A项目跳转到B项目是需要改变地址的
转发
转发:req.getRequestDispatcher(“路径”).forward(req,resp);==>>forward(req,resp):固定的写法(记住要加上)
特点:
1.使用:req
2.在服务器内部执行,发送一次请求
3. url地址不会发生改变
4.转发可以携带参数
5.安全性高 (服务器内部执行) 、效率高
6.查询一般使用转发
上传文件步骤
1.导包(2个),添加依赖
2.form表单提交必须是post请求,enctype=“multipart/form-data” 必须是这个格式来进行提交,加上enctype=“multipart/form-data”
3.得到上传的路径的文件夹:req.getServletContext().getRealPath("/upload"); 进行判断文件夹,不存在就创建:file.mkdirs();
4.判断是否是上传的格式进行上传:ServletFileUpload.isMultipartContent(req);
5.构建其核心对象:
==>>//实例化一个工厂对象
==>>FileItemFactory factory = new DiskFileItemFactory();
==>>//实例化这个核心对象
==>>ServletFileUpload sfu = new ServletFileUpload(factory);
6.获取其条目:parseRequest(req); 返回:List< FileItem>
7.转换为迭代器进行遍历:Iterator< FileItem> ,调用其方法来判断是普通的文本,或者是文件:fileItem.isFormField()
8.fileItem.write(newFile):写文件调用这样一个方法,不管是普通文本,还是是文件,都是用过name值来进行获取的
9.设置编码格式(3个)
Servlet 注解
1.@WebServlet(name = “user1Servlet”,urlPatterns = “/user1Servlet”) ,替换web.xml文件内的配置
2.@WebServlet("/user1Servlet"):默认是按照名字的首字母来进行加载
通配符
- /*
- /userSerclet
- /abc/*
- *.do