Servlet
1.大概了解:
Servlet其实就是运行在Tomcat/服务器上的Java程序。它一般用来处理客户端的请求以及负责客户端的响应,默认情况下是单例模式,
每次用户访问都是开启一个新的线程,调用services方法处理
2.使用步骤:
第一步:引入Servlet-api.jar
第二步:编写一个java类,继承HttpServlet
第三步:重写service(request,response)方法
第四步:在service方法中处理请求,以及进行响应
3.Servlet配置到web.xml
为了让Tomcat帮我们创建对象,并映射地址,当地址匹配,由Tomcat调用这个services方法进行处理
1 <!-- 将Servlet配置到web.xml 并起别名 -->>
2 <servlet>
3 <servlet-name>任意标识符</servlet-name>
4 <servlet-class>类的全称(类名+包名)</servlet-class>
5 </servlet>
6
7 <!-- 根据别名映射网址 -->
8 <servlet-mapping>
9 <servlet-name>与第一步标识保持一致</servlet-name>
10 <!-- 访问Servlet规则
11 http://ip地址:端口号/项目名称/项目地址
12 例如:此代码中我通过http://localhost:8080/garage/login便能找到garageLoginServlet
13 此处除了 /地址
14 还有 / 拦截没有后缀的请求
15 /* 拦截所有请求
16 *.do 拦截所有以.do结尾的请求
17 -->
18 <url-pattern>/地址</url-pattern>
19 </servlet-mapping>
4.继承HttpServlet类的java代码(含常用方法解释)
1 package garagetool;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.util.Map;
6
7 import javax.servlet.ServletException;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 public class garageLoginservlet extends HttpServlet{
13 @Override
14 //两个参数,request负责客户端的请求,response负责客户端的响应
15 protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
16 //在做登录或者注册的时候都需要获取页面的数据,然后根据数据与数据库进行匹配,如果存在,则登录成功,反之失败
17
18 //请求接收
19 request.setCharacterEncoding("utf-8");//设置请求信息字符集,当接收请求数据乱码时使用(只对消息体起作用,对url没作用)或是get请求不好使时
20 String username = request.getParameter("username");//获取请求参数值22 //Map .... = request.getParameterMap();//获取请求参数值,封装到map集合中,通过map.get(key)得到
23 //request.setAttribute("key",value);//将数据设置到request作用域中
24 //request.getRequestDispatcher("转发页面。例如:login.jsp").forward(request,response);//将请求信息转发到页面
25 //HttpSession session = request.getSession();//获取session
26 //request.getServletPath();//获取Servlet请求路径
27 //例如发送的的请求是http://localhost:8080/garage/login?username="zhangsan"&password="123" 那么获取的则是/login
28
29 //请求响应:
30 //response.setContentType("text/html;charset=utf-8");//设置响应内容格式31 //response.setCharacterEncoding("utf-8");//设置响应信息字符集
32 //response.sendRedirect("重定向请求页面");//重定向
33 /*给客户响应
34 PrintWriter out = response.getWriter();
35 out.write("<h1>登录界面</h1>");
36 out.print("a");*/
37 }
38 }
5.Servlet的生命周期
Servlet是继承的HttpServlet,程序执行流程是先执行HttpServlet.init(),再执行HttpServlet.service(),最后执行HttpServlet.destroy()。
6.Session理解
服务端为了保存用户的状态而创建的一个特殊的对象。当浏览器第一次访问服务器的时候,服务器会创建一个Session对象,每个对象都有个Session的id,
服务器会将session的id以Cookie的形式发送给浏览器,浏览器再次访问服务器的时候,会将Session的id发送给服务器,服务器便能通过id找到浏览器对象。
关于session及常用方法
HttpSession sess = request.getSession(boolean flg);//获取session
sess.setAttribute(String name,Object obj);//向Session域中发送信息
sess.getAttribute(String name);//向Session域中接收信息
sess.removeAttribute(String name);//移除Session域中的信息
sess.invalidate();//删除session
设置session存储持续时间,默认30分钟
方式一:在web.xml中修改
<session-config>
<session-timeout>50</session-timeout>
</session-config>
方式二:在Servlet中修改
sess.setMaxInactiveInterval(int seconds);
session验证(比如购物车功能,用户没登录页面也能加入购物车)
登录成功之后,在session对象上绑定一些数据,例如:
session.setAttribute("user",user);
当用户访问需要保护的资源时,进行session验证,例如:
Object obj = (Object)session.getAttribute("user");
if(obj == null){//没有登录
response.sendRedirect("目标页面");
}
7.cookie
访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些操作。更准确的说嘛是:cookie是服务器
在本地机器上存储的一小段文本并随着每一请求发送至同一服务器,是在客服端保存状态的方案。
cookie的主要内容包括:名字、值、过期时间、路径、域等
cookie的生命周期是瞬时的,我们也可以设置他的生命周期
setMaxage(秒);
cookie的使用:
第一步:cookie unname = new cookie(存到cookie对象中的变量名,值)//注意:cookie如果存中文必须给它设置编码,英文cookie不能存中文,否则有中文则报错)
第二步:URLEncoder.encode(值,编码);//写入cookie时进行编码
URLDecoder.decode(值,编码);//从cookie读出时进行解码
第三步:esponse.addCookie(name); //将cookie信息添加到Servlet进行响应
例如:
cookie name = new cookie("name",URLEncoder.encoder(username.getName(),"utf-8"));
response.addCookie(name);
第四步:取浏览器存储的cookie:
方式一:可以在jsp页面通过EL内置对象Cookie进行获取。例如${cookie.name.value} 注意:但是直接获取如果cookie中有中文,则获取的则是乱码数据
方式二:可以通过JQuery获取
方式三:可以通过JSP小脚本遍历cookie找到指定的cookie来处理获取
<%
Cookie[ ] cookies = request.cookies();//获取浏览器保留的所有cookie
if(cookie.length() > 0){
for(Cookie cookie:cookies){
if(cookie.getName().equals("name")){
Cookie name = URLDecoder.decode(cookie.getValue(),"utf-8");//从cookie读出时进行解码,防止中文乱码
}
}
}
%>
8.监听器
监听器,Listener是web的三大组件(Servlet、Filter、Listener)之一,它是Servlet中特殊的类,他能帮助开发者监听web中特殊的事件,例如ServletContext、
HTTPSession、ServletRequest的创建和销毁、变量的创建、销毁和修改等,可以在某些动作前后增加处理、实现监控。
例如:统计在线人数 利用HttpSessioListener; 对应request内置对象的创建和销毁,
当访问某个页面的时候,发出一个request请求,执行requestInitialized方法
当页面关闭或容器关闭的时候,执行requestDestoried方法,
加载初始化信息 利用ServletContextListener; 对应session内置对象的创建和销毁,
当打开一个新的页面的时候,会开启新的session会话,执行sessionCreated方法;
当页面关闭或容器关闭是session过期,执行sessionDestory方法
统计网站的访问量 利用ServletContext;对应监控application内置对象创建和销毁,
当web容器开启的时候,执行contextInitiallized方法;
当web容器关闭或重启的时候执行contextdestroy方法
监听器使用步骤:
第一步:创建一个监听器,实现某种接口
第二步:在web.xml中配置该监听器
第三步:在JSP中添加访问人数或其他操作...
9.过滤器
过滤器,Filter是web的三大组件(Servlet、Filter、Listener)之一,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web的服务器管理的
web资源:例如jsp、servlet、静态图片、文件、静态html进行拦截。从而实现一些特殊的功能。例如使用url级别的权限访问控制、过滤敏感词汇、压缩响应
信息等一些高级功能。一般用于用户身份的认证,编码设置,资源权限审核,加密解密访问等等。
Filter的使用:
第一步:编写一个类,实现Filter接口
第二步:在web.xml中配置过滤器
Filter生命周期:程序启动调用Filter的init()方法,程序终止调用destory方法,doFilter方法每次访问请求如果符合拦截条件都会调用
init 初始化
doFilter 过滤
destory 销毁