`

servlet知识点总结

阅读更多

1HTTP协议基础

  HTTP(Hypertext Transfer Protocol, 超文本传输协议

  HTTP是以明文方式发送数据的 

  用于从WWW服务器传输超文本到本地浏览器的传输协议。

  HTTP协议是以TCP/IP为基础的高层协议。

  现在广泛使用的版本HTTP/1.1 

2PrintWriter  

    打印流 不会抛异常  自动flush     检查状态吗

3GenericServletHttpServlet

GenericServletHttpServlet 没有实现service方法,只是抽象方法    

HttpServlet 实现了service方法

4Service方法

service(ServletRequest req, ServletResponse res) 从接口中带过来的 分发客户端请求到受保护的service方法中

service(HttpServletRequest req, HttpServletResponse resp)  具体到http协议的细节了,接收到了客户端请求,并把它们分发到doXXX方法中去

tomacat调用service(ServletRequest req, ServletResponse res)调用service(HttpServletRequest req, HttpServletResponse resp) 调用doXXX方法

servlet在响应客户端请求时,一般情况下都重写dopostdoget方法,也可以重写service方法,但不常用。

5、客户端表单和web.xml

表单<form action=/asdfasdf method=post/get> </form>

form表单中action"/"表示的是http://127.0.0.1:8080/            代表的是域名的访问路径,不包括web应用程序的名称

web.xmlurl-pattern"/"表示的是http://127.0.0.1:8080/目录/   代表的是web应用程序的路径

做项目要仔细!

form表单中action字段,如果不是以http打头的,或不是以/打头的都是绝对路径。

                       如果是相对路径,action=my/aaa.jsp 这样是不行的。除非在  web.xmlurl-pattern修改<url-pattern>/my/my/aaa.jsp</url-pattern>

解决页面乱码问题:resp.setContentType("text/html;charset=gbk");在打印流获取之前设置编码

web.xml最后改

6servlet生命周期

servlet生命周期,在servlet为客户端提供服务时,只有一个servlet对象。当用户第一次访问servlet(当第一个请求过来时),tomcat就会new servlet(实例).new完之后,调用init方法,而且init方法也只调用一次,然后以多线程的方式处理客户端请求,

调用service----调用service-----调用dogetdopost方法。

多线程:线程池。让线程跑起来,当第n请求来时,tomacat会从线程池分配处理第n个请求.每个线程访问的是同一个servlet对象。

destory:servlet退出服务的时候(web应用程序退出,web应用程序重新加载了) 调用destory

只有一个对象。

7Servlet从上一页面取参数(一)

一般不要在servlet设置成员变量。

ServletConfig:代表servlet的配置信息;

this.getServletConfig.getServletName();得到servlet名称

this.getServletConfig.getInitParameter("name");得到<init-param>

四个问号:一个汉字一个问号     

解决方法:

s=new String(s.getBytes("iso8859-1"),"GBK"); 

s=new String(s.getBytes("utf8"),"GBK"); 

循环取出所有参数

java.util.Enumeration params = this.getServletConfig()

.getInitParameterNames();   

for (; params.hasMoreElements();) {

String name = params.nextElement().toString();

String value = this.getServletConfig().getInitParameter(name);

value = new String(value.getBytes("iso8859-1"),"GBK");

out.println(value);

}

tomcat 调用init(ServletConfig config)

public void init(ServletConfig config) throws ServletException{

this.config=config;

this.init();

}

我们覆盖的时候只覆盖init()方法就行了。

8Get方式和post方式的乱码问题

取参数:request.getParameter("param1");

request.setCharacterEncoding("gbk");解决post方式提交内容的乱码,一定要写在存取第一个参数之前。因为一旦取第一个参数了,会把所有参数存到一个容器去。不要调用

response.setCharacterEncoding("gbk");

解决get方式提交的乱码:tomcat--->修改server.xml--URIEncoding="GBK"

9Servlet从上一页面取参数(二)

通过一个名字取出多个值:第一种方法:

                      Enumeration paramNames=request.getParameterNames();取出所有INPUT的名字

                        while(paramNames.hasMoreElements())

                           {

                                String paramName=(String)paramNames.nextElement();

                                 String paramValues=request.getParameterValues(paramName);

                                 if(paramValues.length==1)

                                    {

                                         String paramValue=paramValues[0];

                                   }

                                   else

                                    {

                                    for(i=0;i<paramValues.length;i++)

                                       {

                                       

                                        }

                                }

                             }

                       第二种方法:

                  Map<String String[]> paramMap=request.getParameterMap();

                  Set<Map.Entry<String,String[]>> entries=paramMap.entrySet();

                  for(Iterator<Map.Entry<String,String[]>> it=entries.iterator();it.hasNext();){

                        Map.Entry<String,String[]> entry=it.next();

                        String paramName=entry.getKey();

                         String[] paramValues=entry.getValue();

                        if(paramValues.length==1)

                          {

                             String paramValue=paramValues[0];

                             if(paramValue.length()==0)

                                 print(novalue);

                             else

                                 print(paramValue)    

                          }

                          else

                          {

                             for(i=0;i<paramValues.length;i++)

                                print(paramValues[i]); 

                          }

                 }

10Cookie 编程

http协议无连接性。www.sina.com.cn 回车 下载完网页后就断掉了。

基于核心的业务编程,不要使用cookie编程。

Cookie cookie=new Cookie("name","value");

response.addCookie(cookie);

cookie=new Cookie("name1","value1");

cookie.setMaxAge(3600);

response.addCookie(cookie);

cookie[] cookies=request.getCookies();

if(cookies!=null){

 Cookie cookie;

for(int i=0;i<cookies.length;i++)

{

   cookie=cookies[i];

   cookie.getName();

   cookie.getValue();

}

}

cookie的特点:

   1、服务器可以向客户端写内容;

   2、只能是文本内容; 长度不能超过4K

   3、客户端可以阻止服务器写入;

   4、只能拿自己webapp写入的东西

   5Cookie分为两种

       属于窗口/子窗口(放在内存中)

       属于文本(有生命周期的)

   6、一个servlet/jsp设置的cookies 能够被同一个路径下面或者子路径下面的servlet/jsp读到(路径=URL)

       (路径!=真实文件路径)

         父路径:http://127.0.0.1/my/SetCookies

         子路径:http://127.0.0.1/my/servlet/ShowCookies

11Session 编程

    session对象是写在服务器端,大小无限制。

    HttpSession session=request.getSession(true);

    Integer accessCount = (Integer)session.getAttribute("accessCount");

    session.setAttribute("accessCount",accessCount);

    session.getId();

    new Date(session.getCreationTime());

    new Date(session.getLastAccessedTime());

   有父子关系的都是一个session

   session.isNew();

   request.getRequestedSessionId();从客户端取回来的id

   request.isRequestedSessionIdFromCookie();

   request.isRequestedSessionIdFromURL();

   request.isRequestedSessionIdValid();是不是合法的有效的sessionid;

     

response.encodeURL(request.getRequestURL().toString());URL重写

request.getRequestURL().toString();

session总结

   1、服务器的一块内存(key-value)

   2、配置过期时间:conf/web.xml <session-config>

   3、和客户端窗口对应(子窗口)(独一无二)

   4、客户端和服务器都有对应的SessioID

   5、客户端向服务器端发送SessionID的时候两种方式:

        1cookie(内存cookie) 

        2 重写URL

    6、浏览器禁掉cookie,就不能使用session(使用cookie实现的session)

    7、如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户打开cookie打卡

12Application编程

ServletContext application=this.getServletContext(); 我们写的servlettomcat打交道。

Integer accessCount=(Integer)application.getAttribute("accesscount");

application.setAttribute();

session更大的篮子。

访问同一个web应用程序上的各种servlet,无论是不是同一session都会访问servletContext对象,都会访问这个篮子。

<!--EndFragment-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics