servlet 常用知识点

来源:互联网 发布:学画画的软件 编辑:程序博客网 时间:2024/05/08 15:41
//[1]HTTP 协议
     HTTP头信息   请求头 : GET /***  HTTP/1.0 
  Accept:text/html;*/*  浏览器支持的格式


状态码  以 1开头 信息状态码 表示请求已经接受,正在被处理


以 3 开头 全是转接  重定向 301 表示永久重定向 302 表示临时的重定向 
        以 2 开头 正确状态码 200 一切正确
以 4 开头 请求错误  404  一般为浏览器路径错误,找不到资源
   401 表示没有访问权限
   405 表示servlet 只接受 get 请求,但是浏览器进行了post 请求导致,找不到dopost 方法。
        以 5开头 服务器错误 500 一般为程序代码出现问题
 {nullIndexException ,等发生的问题   }


创建servlet 类的三种形式


【1】实现Servlet 接口 
(【1.1】需要配置web.xml 中的 <servlet>
                                <servlet-name>Demo01</servlet-name>  名字随意
                                <servlet-class>cn.edu.aynu.Demo01</servlet-class>  包名.类名
     </servlet>
    <servlet-mapping>  mapping 映射
     <servlet-name>Demo01</servlet-name>
     <url-pattern>/Demo01</url-pattern>  浏览器所需要的打的地址 需要加一个"/"
// 可以配置多个 url-pattern 参数
    </servlet-mapping>


 【1.2】创建出来的五个方法。
public void destroy() {}  销毁方法
public ServletConfig getServletConfig() {} 返回servlet配置信息
public String getServletInfo() {} 
public void init(ServletConfig arg0) throws ServletException {} 初始化servlet
public void service(ServletRequest request, ServletResponse response){} 执行请求




(init() service() destory() 是三个生命周期方法
init() 只执行一次,在浏览器发送请求时
service() 执行多次,浏览器请求几次,就执行几次
destory() 只执行一次,当关闭web服务器的时候执行





【2】继承 GenericServlet 类
【2.1】 还需要配置 web.xml 中servelt 的信息
  <servlet-name>Demo01</servlet-name>  名字随意
                                <servlet-class>cn.edu.aynu.Demo01</servlet-class>  包名.类名
      </servlet>
    <servlet-mapping>  mapping 映射
     <servlet-name>Demo01</servlet-name>
     <url-pattern>/Demo01</url-pattern>  浏览器所需要的打的地址 需要加一个"/"
// 可以配置多个 url-pattern 参数
    </servlet-mapping>
【2.2】 它实现的方法只有 service() 来处理请求


【3】继承HttpServlet 类
一般就是用 doGet 和 doPost 方法
不需要手动配置参数值


doGet() 处理 get请求  
doPost() 处理post 请求






解决get  和  post 请求中文乱码的问题


get 没有请求体,请求由于在地址栏将参数提交,所以只能使用传统方式进行解码


username = new String(username.getBytes("iso-8859-1"),"utf-8"); 
response.setCharacterEncoding("utf-8");
post 请求由于在请求体中,将参数提交。


request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//[1]规定服务器按照UTF-8 的方式编码
       //[2]浏览器按照UTF-8 方式编码


三个域对象  request , ServletContext  ,session 
   
             域对象的方法   setAttribute("name",value) getAttribute("name") removeAttribute() 
    在重定向的时候, request 域对象,不能携带数据传递到另一个serrvlet 中去。
    但是可以使用 ServletContext,来设置参数,可以传递数据。
    转发时,使用request  和 ServletContext 都可以使用。


生命周期 ServletContext > request  
ServletContext 在部署web应用时,服务器就已经创建了,在第一次访问前,servletContext 就已经创建完成了。
在服务器关闭后,servletcontext 才销毁掉,或者重新部署应用时,原servletContext 才会被销毁掉。
注意; 在浏览器关闭后,servletContext 并不会销毁


request 在第一次访问时创建,在一次访问完成后就销毁了。


中文乱码问题: 
get请求处理中文乱码方法:
由于get请求,所有的参数都在地址中,并没有请求体,所以需要使用传统的方法来解决中文乱码
在服务器端,使用的编码方式是iso-8859-1 ,所以先以这个编码转成 btyes 数组,再编码成utf-8


username =  new String (username.getBytes("iso-8859-1"),"utf-8");
response.setCharacterEncoding("utf-8"); // 设置响应的编码方式

post请求处理中文乱码方法;
由于post请求,请求的参数都在请求体中,所以设置请求体的编码是 utf-8,响应方式是 utf-8 就可以了

request.setCharacterEncoding("utf-8"); // 请求体的编码方式
response.setContentType("text/html;charset=utf-8");
// [1] 规定服务器按utf-8 编码
// [2] 浏览器按utf-8 解码
缺省的servlet 比如404 的页面,就是由缺省的servlet 来设置的
     <url-pattern>/</url-pattern>  中间只有一个 “/” 的就是缺省servlet。
“*”是通配符,可以匹配任何字符
在 <url-pattern> 中的参数要么是以 / 开头,要么以 * 开头


三种跳转页面方法  重定向  转发(转发包含) 自动刷新
// 设置状态码  
response.setStatus(302); // status 意思 状态

重定向 需要浏览器两次访问服务器
response.setRedivect("/Demo01/Bsevlet"); 也可以直接写 Aservlet ,在地址栏自动生成 /项目名/servlet 名
转发
RequestDispatcher  dispatcher = request.getRequestDispatcher("/Bserrvlet"); // 路径直接就是 web.xml 中的地址
dispatcher.forWard(request,response);
使用这样的方法,可以访问WEB-INF 中的内容。 浏览器一次访问服务器
不能输出 Aservlet 中的内容,只能输出Bservlet 中的内容
转发包含
RequestDispatcher  dispatcher = request.getRequestDispatcher("/Bserrvlet"); // 路径直接就是 web.xml 中的地址
dispatcher.include(request,response);
可以携带 Aservlet 的数据到 Bservlet 中去

自动刷新
response.setHeader("Refresh","1;url=http://loaclhost:8080/Demo01/Bservlet"); // 1 就是隔一秒 刷新 
这个方法在有时候使用的时候会出现问题,浏览器不响应。
如果不写网址 就是自动刷新自己。




 



     



















0 0