您的位置:首页 > 其它

Servlet学习笔记

2015-03-20 21:44 260 查看
1.doGet()在客户端用GET方式访问servlet时调用,访问url地址

doPost()在form表单提交时,且mothod为post方式调用

2.servlet生命周期

constructor->init->doGet->(再次访问)->doGet

综上:一个web 容器只有一个servlet对象,再次访问不会重新构造对象

package cn.xj.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestLifeCycleServer extends HttpServlet{

/**
* @author Admin
* 服务不停止,TestLifeCycleServer的对象就存在,且只有刚开始一个
* init()方法只在初始化的时候执行一次
*/

//1.实例化
public TestLifeCycleServer()
{
System.out.println("constructor!");
}

@Override
//2.初始化
//ServletConfig config存储web.xml的servlet配置信息
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
System.out.println("init");
}

@Override
//3.处理service, doGet doPost
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destory");
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doGet");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}

}

3.request读取所有参数

getParameterMap()方式:

package cn.xj.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowParamsMap extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
resp.setContentType("text/html;charset=utf8");
PrintWriter out=resp.getWriter();
String title="Reading all request parameters";
out.println("<html><head><title>读取所有参数</title></head>"
+"<body BGCOLOR='FDF5E6'>\n"+"<H1 align=center>"
+title+"</H1>\n"+"<table border=1 align=center>\n"
+"<tr bgcolor=\"#FFAD00\">\n"
+"<th>paramater name<TH>parameter Value(s)");

Map paramsMap=new HashMap();
paramsMap =req.getParameterMap();
Set paramsSet =paramsMap.keySet();
for(Object obj:paramsSet.toArray()){//依次遍历
String paramName=obj.toString();//依次获取键值对的Key 即 paramName
//String paramValue=((String[])paramsMap.get(paramName))[0];
//System.out.println(paramValue);
out.println("<TR><TD>"+paramName+"\n<TD>");
//每个paramName对应的value可能多个
String[] paramValues=(String[]) paramsMap.get(paramName);
if(paramValues.length==1){//如果就一个就取第一个
String paramvalue=paramValues[0];
if(paramValues.length==0){
out.println("<I>No Value</I>");
}
else
out.println(paramvalue);
}else{
out.println("<UL>");
for(int i=0;i<paramValues.length;i++){//多个的话挨个打印
out.println("<LI>"+paramValues[i]);
}
out.println("</UL>");
}

}
out.println("</table>\n</body></html>");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}

}

getParameterNames(),getParameterValues()方式

package cn.xj.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowParams extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
resp.setContentType("text/html;charset=utf8");
PrintWriter out=resp.getWriter();
String title="Reading all request parameters";
out.println("<html><head><title>读取所有参数</title></head>"
+"<body BGCOLOR='FDF5E6'>\n"+"<H1 align=center>"
+title+"</H1>\n"+"<table border=1 align=center>\n"
+"<tr bgcolor=\"#FFAD00\">\n"
+"<th>paramater name<TH>parameter Value(s)");
Enumeration paramNames=req.getParameterNames();
while(paramNames.hasMoreElements()){
String paramName=(String) paramNames.nextElement();
out.println("<TR><TD>"+paramName+"\n<TD>");
String[] paramValues=req.getParameterValues(paramName);
if(paramValues.length==1){
String paramvalue=paramValues[0];
if(paramValues.length==0){
out.println("<I>No Value</I>");
}
else
out.println(paramvalue);
}else{
out.println("<UL>");
for(int i=0;i<paramValues.length;i++){
out.println("<LI>"+paramValues[i]);
}
out.println("</UL>");
}
}
out.println("</table>\n</body></html>");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}

}


cookies:(浏览器端可以禁止cookies,而且以文件的形式保存在本机,不可靠)

一个servlet/jsp设置的cookies能被同一路径下面或者子路径下面的servlet/jsp读取到。(如在url为/servlet/setCookies产生的cookies不能被url为/showCookies的servlet/jsp读取)

路径指的是URL,不是真实的文件路径

session(记录在服务器端,服务器端开辟一块内存用于存session,这块session内存与客户端的浏览器当前子窗口是直接相连的,新开浏览器窗口会开辟新的不同session)

session的两种实现方式:

a.Cookies(如果浏览器支持Cookies,创建Session的时候会把SessionID存入Cookies里)

b.url的重写方式(如果不支持Cookies,必须自己编程使用URL重写的方式实现Session:response.encodeURL(SessionID))

session不像cookies拥有路径访问问题,即同一application下的servlet、jsp可以共享同一个session,前提是同一个客户端窗口(浏览器窗口)

Application(有些值存放在服务器内存中,能让所有客户段都能共享,这些值可以存放在application中----共用的一块服务器内存)

对应ServletContext对象

httpServlet 的getServletContext()方法获取

可以统计访问该application的全部访问量(含不同用户 不同浏览器客户端)

JSP

<%= ++accesscount %>表示将中间的值在网页直接输出出来

<%! int accesscount=0 %> 成员变量,++后的值会累计

<% int accesscount=0 %> 局部变量,++后的值不变

a.下面这种注释在浏览器客户端网页的源文件可以看到

<!--


html注释


-->

b.客户端源文件看不见,写给程序员自己看

<%--


jsp注释内容


--%>

c.同Java一样

<%


//Java注释内容



/*



java注释内容



*/


%>

ps:url传递中文或特殊字符,要encode

Directive –include

<%@include file=”fileURL”%>

在JSP编译前包含进来 ps:不能向fileURL中传递参数 如abc.jsp?user=aaa

Action---运行期间

a.include:<jsp:include page=”URLSpec” flush=”true”/> 可以带参数 注意与上面的include的区别

b.forward 将jsp的内容传送到指定的URL中

例如:可用于传指定参数

<jsp:forward page=”xxxurl”>

<jsp:param name=”paramName” value=”paramValue”/>

</jsp:forward>

ps: forward的页面和forward到的页面用的是同一个request

<jsp:forward>与response.sendRedirect的区别

1.forward使用的是同一个request 而sendRedirect使用的不同的request





c.useBean

Bean类要写在包内,不要写裸体类,必须有一个不带参数的构造函数

<jsp:useBean id=”cb” class=”bean.CounterBean”type=”java.lang.Object”>//id=”cb”相当于new 了个对象,且类型为Object类型

</jsp:useBean>

<jsp:setproperty name=”cb”property=”count” value=”23”/>//相当于 cb.setCount(23)

<jsp:getproperty name=”cb” property=”count”/>//相当于 out.write(cb.getcount())

编码问题

<%

String name =request.gatParameter(“name”);//如果request传递过来的数据打印为乱码,而没有办法去处理乱码问题 可以采用下面通用的原始的办法

out.println(new String(name.getBytes(“ISO8859_1”),”GBK”));//转码,需要认清原来的编码和转码后的编码

%>

常见面试题:JSP中常见的内置对象和常用方法

servlet与jsp之间的通讯

jsp->>servlet:在jsp中,<jsp:forward page=”servlet/ServletToJSP”/> 或者SendRedirect方式

servlet->>jsp:在doGet方法中:

resp.setContextType(“text/html;charset=gb2312”);

req.setAttribute(“ServletName”,”ServletToJSP”);

getServletConfig().getServletContext().getRequestDispatcher(“/Servlet_jsp/ServletUseJsp.jsp”).forward(req,resp);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: