Servlet总结一
HttpServlet
生命周期
常用的方法
<servlet>
<display-name>ServletConfigDemo</display-name>
<servlet-name>ServletConfigDemo</servlet-name>
<servlet-class>com.ServletConfigDemo</servlet-class>
<init-param>
<param-name>username</param-name> //定义的name
<param-value>陈加兵</param-value> //定义的value
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletConfigDemo</servlet-name>
<url-pattern>/ServletConfigDemo</url-pattern>
</servlet-mapping>
//下面只是一个servlet类中的init()方法,一般否是在init()方法中获取
public void init() throws ServletException {
username=this.getInitParameter("username"); //根据指定的名称获取参数的值
enumeration=this.getInitParameterNames(); //获取枚举对象
while(enumeration.hasMoreElements()){ //通过枚举的方法获取其中的所有的值
System.out.println(this.getInitParameter((String) enumeration.nextElement()));
}
}
HttpServletRequest
常用的方法
//下面将会详细讲解上面三个方法的使用法,这三个参数是针对表单的,因此需要结合表单讲解,我们将会在index.jsp文件中定义表单
//index.jsp文件的内容如下:
<form action="ServletDemo" method="post"> //servletDemo是要处理该请求的servlet的url,使用的是相对路径
username: <input type="text" name="username"> <br>Password:
<input type="password" name="pw"> <br>
<input type="submit" value="提交"> <br> <label>hobby:</label>
<input type="checkbox" name="hobby" value="1">swing <input
type="checkbox" name="hobby" value="2">dancing <input
type="checkbox" name="hobby" value="3">song
</form>
//下面是ServletDemo中的部分代码
String username = request.getParameter("username"); //获取username的值
String pw = request.getParameter("pw"); //获取password的值
//获取所有复选框的值
String[] hobbies=request.getParameterValues("hobby");
for(String hobby:hobbies){
System.out.println(hobby);
}
//获得所有的元素的name属性的名称,返回的是一个枚举的对象
Enumeration enumeration = request.getParameterNames();
while (enumeration.hasMoreElements()) {
String paramsString = (String) enumeration.nextElement(); //获取其中的每一名称
System.out.println(request.getParameter(request.getParameter)); //根据名称获取其中的值
}
//获取所有请求头的名称,返回的是一个枚举对象
Enumeration enumeration=request.getHeaderNames();
while (enumeration.hasMoreElements()) {
String name=(String) enumeration.nextElement();
String value=request.getHeader(name); //根据名称返回对应的值
System.out.println(name+":"+value);
}
请求转发与包含
getRequestDispatcher
RequestDispatcher
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//获取表单中的值
String name=request.getParameter("username");
String password=request.getParameter("password");
//上面虽然获取了其中的值,但是不可以此时对浏览器进行响应
RequestDispatcher dispatcher=request.getRequestDispatcher("Demo2");
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//获取表单中的值
String name=request.getParameter("username");
String password=request.getParameter("password");
Cookie cookie=new Cookie("age", "22");
response.addCookie(cookie);
PrintWriter pw=response.getWriter();
pw.println("在转发之前先对浏览器进行响应");
//上面可以看出这里对浏览器进行了响应,使用include可以在转发之前或者之后对浏览器进行响应
RequestDispatcher dispatcher=request.getRequestDispatcher("Demo2");
dispatcher.include(request, response);
}
forward和include的区别
相同点
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//获取表单中的值
String name=request.getParameter("username");
String password=request.getParameter("password");
//上面虽然获取了其中的值,但是不可以此时对浏览器进行响应
RequestDispatcher dispatcher=request.getRequestDispatcher("Demo2");
dispatcher.forward(request, response);
System.out.println(username); //这个语句当转发请求处理完成之后会返回到这里执行这句话
}
传递数据
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 设置编码,这个是通过浏览器访问时能够实现中文显示的功能
response.setContentType("text/html;charset=UTF-8");
//设置和浏览器相应的编码方式,以便在控制台上输出中文,否则将会乱码显示
request.setCharacterEncoding("UTF-8");
String data="大家好,我是陈加兵";
request.setAttribute("data",data); //向请求中传入数据,这个是以键值对存在的,前面的是key,后面的参数是value
//将请求转发给HttpServletDemo的servlet文件处理
RequestDispatcher dispatcher=request.getRequestDispatcher("HttpServletResponseDemo");
//如果转发成功,注意这里的转发,地址栏的网址并不会改变
if(dispatcher!=null){
dispatcher.forward(request, response);
}
}
//下面是HttpServletResponseDemo的处理代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8"); //设置响应内容
request.setCharacterEncoding("UTF-8"); //设置接受的编码
//接收请求转发传递的data数据
String data=(String) request.getAttribute("data");
PrintWriter pWriter=response.getWriter();
pWriter.println(data+"<br/>");
//移除这个键值对 ,下面在访问这个数据就会显示不存在了
request.removeAttribute("data");
pWriter.close();
}
HttpServletResponse
常用的方法
Cookie cookie=new Cookie("age", "22");
cookie.setMaxAge(7*24*60*60); //设置cookie的失效时间(秒为单位)
response.addCookie(cookie); //添加cookie
ServletConfig
常用方法
设置和取得初始参数
设置初始参数
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>Demo3</servlet-name>
<servlet-class>com.Demo3</servlet-class>
<init-param> //定义标签
<param-name>username</param-name> //定义的name
<param-value>陈加兵</param-value> //定义的value
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
取得初始参数
public void init(ServletConfig config) throws ServletException {
// username=config.getInitParameter("username"); //单独的获取每一个值
// password=config.getInitParameter("password");
//首先获取所有的初始参数的名称
Enumeration enumeration=config.getInitParameterNames();
while(enumeration.hasMoreElements()){
String name=(String)enumeration.nextElement(); //获取每一个值
if(name.equals("username")){
username=config.getInitParameter(name);
}else if (name.equals("password")) {
password=config.getInitParameter(name);
}
}
}
public void init() throws ServletException {
ServletConfig config=this.getServletConfig(); //获取ServletConfig对象
username=config.getInitParameter("username"); //获取参数的值
password=config.getInitParameter("password");
}
ServletContext
常用方法
设置初始参数
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>web2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--全局变量,对工程中的所有的Servlet都是共享的-->
<context-param>
<param-name>context_name</param-name>
<param-value>context_value</param-value>
<!--在每一对context-param中只能定义一个变量的值-->
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>陈加兵</param-value>
</context-param>
<servlet>
<servlet-name>Demo1</servlet-name>
<servlet-class>com.Demo1</servlet-class>
</servlet>
<servlet>
<servlet-name>Demo2</servlet-name>
<servlet-class>com.Demo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo1</servlet-name>
<url-pattern>/Demo1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Demo2</servlet-name>
<url-pattern>/Demo2</url-pattern>
</servlet-mapping>
</web-app>
获取设置的参数
//使用无参构造函数
public void init() throws ServletException {
ServletContext context=this.getServletContext();
//根据属性的名称获取指定的值
String value=context.getInitParameter("username");
System.out.println(value);
//获取所有的属性的名称的枚举对象
Enumeration enumeration=context.getInitParameterNames();
while(enumeration.hasMoreElements()){
//获取属性的每一个名称
String name=(String) enumeration.nextElement();
//根据名称获取所有的值
System.out.println(name+" = "+context.getInitParameter(name));
}
}
//使用有参构造方法
public void Init(ServletConfig config){
//调用ServletConfig中的方法获取对象
ServletContext context=config.getServletContext();
//获取属性的值
String value=context.getInitParameter("username");
System.out.println(value);
}
绑定属性
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//获取对象(这是父类HttpServlet中的一个方法)
ServletContext context=this.getServletContext();
//count表示访问页面的次数,在这里设置了属性可以全局共享该数据,意思就是在一个项目中的所有的servlet都是可以访问到该数据的
Integer count=(Integer) context.getAttribute("count"); //获取设置的属性值
//如果为空,表示该属性还没有被设置,因此这是第一次访问该页面
if(count==null){
count=1;
context.setAttribute("count", 1); //初始值为1,表示访问网页1次
}else { //否则表示已经不是第一次访问网页了,因此需要++1
context.setAttribute("count", ++count);
}
PrintWriter pWriter=response.getWriter();
pWriter.println("该页面已经被访问了"+count+"次了......");
}
参考文档