Servlet总结

申明:本笔记参考视频《尚学堂Servlet笔记》

 

 

一、  配置

1、   运行Tomcat需要配置环境变量JAVA_HOME

2、   更改端口,conf/server.xml Connector port

3、   当项目(Web-Info)发生变化时使Tomcat自动加载,conf/context.xml中的Context中加上属性,reloadable =”true”

4、   相对路径:不是以http//或者/开头的路径。对于绝对路径,在html/代表的是http://localhost:8080/,而Servlet配置文件中,/代表http://localhost:8080/app/ .

5、   删除使用相同端口的进程

netstart –a 查处端口号是否被使用

netstart –o 查找端口好对应的线程号

在进程管理器中将对应的进程杀死

二、  Servlet的乱码解决

1、   向前台写中文,需要在getWriter()前调用resp.setContentType(“text/html;charset=GBK”);或者调用resq.setEncoding(“GBK”);

2、   对于post方式,需要从前台获取中文,需要调用reqsetEncoding()方法。

3、   对于get方式,需要在server.xmlConnector中加入属性,URIEncoding=”GBK”

4、   向浏览器的地址栏中写入中文,需要转码,如userName=URLEncoder(username, ”GB18030”);

乱码场合:

1、   默认情况下(什么都不写),通过get方式(get表单和链接),中文乱码,通过form方式,能得到中文。

2、   加上<%@ page contentType=”text/html;charset=GBK”%>post方式得到乱码,get方式得到中文。

如果在servlet中,则加入resp.setContentType(“text/html;charset=gbk”)

3、   在加上request.setCharacterEncoding(“gbk”)都能得到中文。

4、   对于场合,<jsp:param name=”user” vlue=”<%=s%>”>url地址中包含中文参数,解决办法为<%request.setCharacterEncoding(“gbk”)%>

三、  Servlet生命周期

1、   加载

加载时间有以下三种情况:

(1)         如果某个Servelt配置了自动载入选项,则在启动服务器时自动载入

(2)         如果没有,则在服务器启动后,客户机首次向Servlet发出请求时

(3)         重新加载Servlet

2、   实例化

客户机第一次想Servlet发出请求时实例化相应的Servlet

3、   init

实例化之后,自动调用init方法。

4、   servicedoGetdoPost

以多线程的方式来调用service方法,客户端没发出一个请求,容器则为其分配一个限制的线程来调用service方法,由service方法根据请求的方式来调用doGetdoPost方法。因为是以多线程的范式访问,所以最好不要在servlet中设置成员变量。

5、   destroy

关闭web应用程序、或者重新加载Servlet时,调用destroy方法。

四、  获取Servlet中参数的方法

1、   Servlet中设置参数

<servlet>

           <servlet-name></ servlet-name >

           <servlet-class></ servlet-class >

           <init-parameter>

                    <param-name>name</param-name>

                    <param-value>小王</param-value>

                    <param-name>name</param-name>

                    <param-value>小王</param-value>

</init-parameter>

</servlet>

2、   根据param-name获取某个参数

String name=this.getServletConfig().getInitParameter(“name”);

如果web.xml的编码方式为ios8859-1,则可以手工将其转化为gbk

name=new String(s.getBytes(“ios8859-1”,”GBK”));

3、   获取Servlet相关信息

String servletName=this.getServletConfig().getServeltName();

4、   获取Servlet所有Init参数

Enumeration parames=this.getServletConfig().getInitParameters();

while(parames.hasMoreElements()){

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

                  

}

五、  GenericServlet类的两个Init方法

1、   init(ServletConfig( config)

init()

2、   Tomcat调用的是第一个init方法,在第一个init方法中,初始化config,然后再调用第二个init方法。所以重载父类的init方法是,最佳方法是重载第二个init方法。如果重在第一个init方法,则需要调用父类的第一个init方法,以初始化config

六、  获取参数

1、   对于只有一个值的form元素,可以使用req.getParameter(“name”)方法获取参数

2、   可以通过req.getParameterNames()方法获取所有form表单中的名字,返回类型为Enumeration

3、   如果有多个相同名字的form元素,可以通过方法req.getParameterVales(“name”)获取,返回类型为String[]

4、   通过方法request.getParameterMap()方法可以获取form元素的名称和其值的map

七、  cookie

1、   Cookie分为两种,一种属于窗口/子窗口(放在内存中),另一种属于文本(有生命周期)

2、   一个servlet/jsp设置的cookies能够被同一个路径(url)下面或者子路径下面的servlet/jsp读到,反之则不能。

3、   添加一个cookie

Cookie cookie=newCookie(cookieName,cookieValue);

response.add(cookie);

4、   得到cookie

Cookie[] cookies=request.getCookies();

5、    

八、  session

1、   session常见的两种实现方式:

1)   通过在客户端的cookie中加入sessionID实现session

2)   通过url重写实现session

response.encodeUTL(request.getRequestURL.toString());

2、   servlet中得到session

req.getSession(true);其中true表示,如果没有session实例,则创建一个。

3、   配置session的生命周期

conf/web.xml中的session的子标签session-timeout

4、    

九、  application

Servlet中对应的类为ServletContext

十、  cookiesession的区别

1、   cookie存储在客户端,session存储在服务器端。

2、   cookie有两种类型,而session有两种实现方式。

3、   父路径下不能访问子路径的cookie,而同一个session的窗口共享一个session

 

你可能感兴趣的:(多线程,tomcat,jsp,servlet,配置管理)