Servlet

Servlet总结

1. Serlvet是一个特殊的类 继承了httpServlet的一个类

2. 每个servlet都要在web-inf/web.xml文件中配置相应的信息

<servlet>

   <servlet-name>first</servlet-name>

   <servlet-class>com.puckasoft.servlet.FirstServlet</servlet-class>

  </servlet>

  

  <servlet-mapping>

   <servlet-name>first</servlet-name>

   <url-pattern>/firstServlet</url-pattern>

  </servlet-mapping>

其中servlet-mapping中的url-pattern对应的属性是指浏览器访问的url  必须要加上/,这个/代表浏览器访问该项目的根目录  firstServlet这个url是通过浏览器来访问该serlvet这个类的方式  其中servlet-name起到桥梁的作用 让浏览器通过url可以找到对应的class

注意:(1url-pattern必须加上/

   (2)每个servlet-nameweb.xml文件中是唯一的 所以建议这个名字起成和对应的类名一样 

3sevlet-class的对应的类的路径一定要确认无误

3. Servlet是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和destroy()三个方法。生命周期的具体说明如下:(1Servlet容器完成加载Servlet类和实例化一个Servlet对象init()方法完成初始化工作,(2)该方法由Servlet容器调用完成service()方法处理客户端请求,并返回响应结果(3destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源

4. 加载并初始化Servlet在前面已经说过Servlet容器完成加载和实例化Servlet的工作,该工作既可以在容器启动时完成,也可以在容器收到请求时完成,或者是两者之间的某个时间启动。之后需要初始化Servlet,即读取配置信息、读取初始化参数等,这些基本上在整个生命周期中只需要执行一次。关于init()方法已经在积累GenericServlet中提供缺省实现,如果不需特殊处理规则没有必要再进行定义,否则要重写。

5. httpservletRequest对象保存了了客户端的信息 

以下是获取请求的基本信息

getMethod方法返回客户端请求方式 

getRequestURI返回端口后参数之前那部分内容且为真实的资源名而不一定与地址栏中相同 

getQueryString 返回资源路径号后面的所有内容

getScheme返回协议名称。

getContextPath返回请求url所属的web应用程序的路径 

getRequestURL返回真实的资源路径,不一定与地址栏相同但不包括参数部分且返回类型StringBuffer

getRemoteAddr  返回客户端的ip地址 

getRemotePort  返回客户端的发出请求使用的端口 

getLocalAddr  返回服务器上接受当前请求的网络接口的ip地址 

getLocalPort  返回服务器上接受当前请求的网络接口的端口号 

以下是获取请求头信息

getHeader(headName)方法该方法是通过headName的属性名取获取值 如忘记headName的属性名 可以用getHeaderNames()方法

获取所有的属性名再选择有用的)

注意:(1referer属性: 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面(即保存上次访问的路径url

2accept-language属性:返回的是用户的语言类型 实例见google

3User-Agent属性:返回的是用户的浏览器版本信息

以下是获取请求的参数

Request.getParamter(name属性)

通过name属性值来获取该属性对应的value

注意通常情况下如果为文本形式要加上.trim()去掉首尾的空格 但一定要注意name属性值一定要正确 否则会出现nullpointException的异常

并且如果不是文本框形式 比如说如果是单选按钮 这里不要加.trim()

Request.getParameterValues()获取的复选框的value

6个重要对象

ServletConfig:用于处理在配置文件web.xml中,每个servlet初始化的参数。

<servlet>

 <servlet-name>dwr-invoker</servlet-name>

 <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

<init-param>

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

  <param-value>true</param-value>

</init-param>

</servlet>

取得:ServletConfig sc = this.getServletConfig(); 

方法:sc.getInitParameter("aaa")à返回名为aaa的参数的值 

  Sc.getServletName()à取得所属servlet的名字 

  sc.getInitParameterNames()à返回所有参数名的枚举 

Enumeration e = sc.getInitParameterNames();

while(e.hasMoreElements()){

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

System.out.println(paramName+"----"+sc.getInitParameter(paramName));

}

ServletContext所有的servlet都共享同一个ServketContext对象,又称为Application对象。在web.xml中可以声明“全局参数”。

<context-param>

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

  <param-value>CCC</param-value>

</context-param>

<context-param>

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

   <param-value>DDD</param-value>

</context-param>

取得:ServletContext context = this.getServletContext();

方法:context. getInitParameter(aaa)context. getInitParameterNames()ServletConfig的类似。

  context.setAttribute(a,AAA)设置属性。

  context.getAttribute(a)取得属性。

  context.removeAttribute(a)删除属性。

  context.getRealPath(1.jsp)用于获取文件绝对路径。

  context.getResoursePaths(/picture)用于获取目录下的所有目录和文件的路径,返回Set类型。

  context.getResourceAsStream("/1.properties")用于装载资源文件

读取

InputStream is = context.getResourceAsStream("/1.properties");

Properties  p = new Properties();

p.load(is);

resp.getWriter().println(p.getProperty("name"));

is.close();

1.properties

name=gjw

sex=male

修改

FileOutputStream fos = new FileOutputStream(new File(context.getRealPath("/1.properties")));

p.setProperty("sex", "famale");

p.store(fos, null);

fos.close();

HttpServletRequest:客户端的请求信息被封装在这个对象中。  

获取请求基本信息

request.getMethod()

GET

请求方式

request.getRequestURI()

/jsp/ReqTest

端口到?之间

request.getQueryString()

uname=gjw

?后

request.getScheme()

http

协议

request.getContextPath()

/jsp

Web应用目录

request.getRequestURL()

http://localhost/jsp/ReqTest

除了?后的

获取网络连接信息

request.getRemoteAddr()

客户端IP

request.getRemotePort()

客户端端口

request.getLocalAddr()

服务器端IP

request.getLocalPort()

服务器端端口

获取请求头信息

request.getHeader(content-length)request.getHeaderNames()ServletConfig的操作相似。

request.getContentType()request.getContentLength()在请求方式为Post时才有用,上下文的类型和参数长度,他们和上面的getHeader功能一样,只不过因为常用才特意声明为方法。

获取请求参数

String

getParameter(uname)

得到表单域的值

String[]

getParameterValues(aihao)

复选框的值

Enumeration

getParameterNames()

利用请求域属性传值

request.setAttribute(a,AAA)

设置属性

request.getAttribute(a)

取得属性

request.removeAttribute(a)

删除属性

request.getAttributeNames()

返回枚举,对所有属性遍历处理

HttpServletResponse:服务器端的响应信息被封装在这个类中。

构建响应头消息

addHeader(name,value)响应头是消息可写。

三种设置编码的方式

response.setContentType("text/html;charset=gbk");

response.setHeader("content-type""text/html;charset=gbk");

response.setCharacterEncoding("gbk");

response.addHeader("refresh", "3;url=1.jsp");  

响应头的设置应在得到输出流(即: response.gerWriter())之前设置,否则无效。

response.getWriter().println, print, write三个方法的区别:

1. write方法遇到Null时抛出空指针异常。  print,println则直接打印null

2. 换行指的是html源码换行,并不是页面显示时换行

请求重定向和请求转发不论用什么跳转,之后的语句还是会被执行,一般在之后加上return;

请求重定向response.sendRedirect(URL);

1. 地址栏改变,可以访问本web应用以外的资源。

2. 整个过程发送两次请求。

3. 不加/是相对本servlet所在目录,/表示端口号后面的根目录http://localhost:8080/ 

4. sendRedirect后面语句仍然会被执行,所以一般加return .

请求转发request.getRequestDispatcher("LoginPage").forward(request, response);

1. 地址栏不改变,只能访问自己web应用的资源。

2. 整个过程是一次请求。

3. 不加/是相对本servlet,/表示web应用的根目录http://localhost:8080/jsp/

4. 还可以this.getServletContext().getRequestDispatcher("/1.jsp").forward(request, response);

5. 请求转发之后的语句仍然会被执行。所以,一般在该语句执行之后加return.

6. 由于多个servlet之间属于同一个请求,共享同一个request对象,所以可以通过request作用域来共享传递一些信息。

过程示例:

HttpSession:http状态信息保存在服务器端的技术。

取得HttpSession session = request.getSession();

方法:session.getId() 返回相关联的sessionid

  session.setMaxInactiveInterval(6) 以秒为单位设置session的最大空闲时间,可以在web.xml<session-config>中配置空闲时间。

  session.invalidate() 强制session失效。

利用属性设置来传递参数,与request的操作一样。

Session空闲时间的设置:

1. setMaxInactiveInterval(7) ;  设置7秒后过期

2. 通过web.xml中的配置:

    <session-config>

        <session-timeout>30</session-timeout>

</session-config>

                          3.  invalidate()  ; 使当前session对象强制失效。

Session作为作用域保存传递信息。

<!--EndFragment-->

你可能感兴趣的:(servlet)