首先servlet是在服务器端运行的java程序,可以接收客户端的请求并做出响应。
一个servlet继承了Javax.Servlet.Http.HttpServlet,用到的接口有genericServlet抽象类、HttpServlet抽象类、ServletConfig接口
ServletContext接口:
void setAttribute (String name, Object object ),键值对形式的有参构造,并且值是Object类型的。就是将某个对象放在容器中。
Object getAttribute (String name ),就是上面对应的拿到这个对象的方法,这两个通常搭配使用,用来在一个Context容器中获取数据。
但是有一个弊端就是容器中有很多对象,其他Servlet的对象就有可能被读取,可能会发生错误。
String getRealPath (String path ),用来获取当前项目的真是路径,属于不记不行,就是会用到。
ServletRequest接口:
最最最重要方法之一:String getParameter ( String name ),传递一个字符串类型的数据,用来获取页面上的参数(name的值)
void setAttribute (String name, Object object ),也是将对象放在先放入请求中,
再用Object getAttribute ( String name ),拿出来用,在页面上传递参数用的两个配套方法,
而void removeAttribute (String name),就是将这个删除这个被放入的对象。
void setCharacterEncoding (String charset ),设置请求中的字符编码,一般为UTF-8
String[ ] getParameterValues (String name ),是拿到页面上的一组多个参数,返回一个数组,常见于多选按钮,同一组数据多个值。拿回来之后再去遍历或者进行其他操作。
RequestDispatcher getRequestDispatcher( String path ),俗称转发,就是可以带着数据去到下一个页面,下面会说到重定向,在文末进行区分。
ServletResponse接口:
PrintWriter getWriter ( ),获取一个打印对象,可以显示在页面上。
void setContentType ( String type ),设置响应中的字符集text/html;charset=UTF-8
void setCharacterEncoding (String charset ),设置响应中的字符编码,一般为UTF-8
以下就是带有Http的接口
HttpServletResponse接口
void addCookie ( Cookie cookie ),在一次响应中添加cookie,cookie实在浏览器上保存用户的各项数据,非常的不安全,但是却减少了用户在关闭浏览器的情况下,频繁访问某个网站要登录等重复的操作,在现在的大多数网站应用广泛。并且在new Cookie的时候他只有一个有参构造就是(String name,String name),两个都是String,这和Context,Session,request中的setAttribute传递的参数是不一样的,要进行区分。
void sendRedirect(String location),俗称重定向,参数就是一个URL,就是将当前这个URL重定向到参数这个URL中,以便于用户不会看见后端在处理控制页面所显示的URL。这个一般和Session搭配着使用,非常方便后端拿到想要的数据,并且在Session有效期内数据都是有效的。所以Session的有效期是多久呢?
Session结束的4种方式:
1. 用户主动关闭浏览器
2. 服务器宕机
3. 超时,一般默认30min
4. 手动设置Session失效
HttpServletRequest接口:
Cookie[ ] getCookies( ),请求获取所有的cookie,返回一个cookie的数组。值得注意的是cookie是在请求中获取的,而不是响应。
HttpSession getSession( ),用来获取session,返回一个HttpSession可以做以下的事情
HttpSession接口:
void setAttribute(String key, Object value),将对象放进session中,以便于在整个会话中拿这个对象都可以拿到。
Object getAttribute(String key),就是拿到当前会话的session,也是键值对的形式,根据键来拿值
void removeAttribute(String key),删除一个session中的存放的对象。
void invalidate(),让session失效,没有参数传递,一般在实际中应用的场景就是用户的安全退出功能。
这里我们说一下转发和重定向的区别,并给出实例分析:
转发:访问请求1次,转发到哪里URL不会改变
重定向:请求2次,URL会改变。
理解一下:转发就是login转发到controler,实际响应用户的页面是main.do的页面,但是URL地址上是controler;重定向就是login重定向到controler,实际上是main.do自己去响应了用户,URL地址上就是main.do
Cookie和Session的区别:
Cookie | Session |
浏览器存数据 | 服务器存数据 |
只有一个有参构造 (String name,String name) |
(String name,Object name) |
设置生命周期SetMaxAge('秒') | 生命周期4种结束方式: 1. 用户主动关闭浏览器 2. 服务器宕机 3. 超时,一般默认30min 4. 手动设置Session失效 |
不安全 | 安全 |
本篇完