1.servlet基本使用

  注意:单例:init只会执行一次

       线程不安全

1.1 创建方式

(1)实现servlet接口【不使用】

package cn.getword.servlet;

import javax.servlet.*;
import java.io.IOException; public class LoginServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init servlet...");
} @Override
public ServletConfig getServletConfig() {
return null;
} @Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
servletResponse.getWriter().print("hello servlet");
} @Override
public String getServletInfo() {
return null;
} @Override
public void destroy() { }
}

LoginServlet

  init方法用来配置servlet初始化参数:

  第一次访问servlet时,进行servlet实例化,执行init方法。

需要服务器启动时创建servlet实例:在web.xml中配置:load-on-startup :非负整数

<servlet>
<servlet-name>login</servlet-name>
<servlet-class>cn.getword.servlet.LoginServlet</servlet-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>

  url-pattern的写法:*.do  , /servlet/*    【通配符 *  要么放在最前面,要么放在最后面】

  获取参数信息:  

    private ServletConfig config;  //将配置对象保存下来
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init servlet...");
this.config = servletConfig;
servletConfig.getInitParameter("charset");
}

  服务终止前执行destroy方法,用于关闭非内存资源。

(2)继承GenericServlet类【不使用】

package cn.getword.servlet;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException; public class Login2Servlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { }
}

(3) 继承HTTPServlet类【使用】  注解或配置文件

package cn.getword.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet(name = "Login3Servlet", urlPatterns = {"/login3"})
public class Login3Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().print("你好,servlet");
}
}

  通过request获取session对象:

Session session = request.getSession();

获取参数信息:

@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");
String phone = request.getParameter("username");
String pwd = request.getParameter("username");
String[] hobby = request.getParameterValues("hobby");//获取复选框值
String gender = request.getParameter("gender");
String course = request.getParameter("course");
response.getWriter().print("hello"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}

RegisterServlet.java

2. 解决乱码

  String name = request.getParameter("name");

 方法一:转码

name = new String(name.getBytes("ISO-8859-1"));

 方法二:【推荐】

request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");

3. 转发

 

request.getRequestDispatcher("").forward(request, response);

注意:不可以跨域

4.重定向

response.sendRedirect("");

注意:可以跨域

5.cookie【服务器端操作】

添加cookie:【使用response向客户端写入cookie】

response.addCookie(new Cookie("userid", "10"));

获取cookie:【使用request获取cookie】

request.getCookies()

6.session

(1)使用方法

session.setAttribute("userid", "1");
session.getAttribute("userid");
session.removeAttribute(key);

注意:作用范围为回话范围。

(2)强制使得session失效,一般用于用户注销

session.invalidate();

7. pageContext

获取其他内置对象:

pageContext.getRequest();
pageContext.getResponse();
pageContext.getServletConfig();

8.application对象  

在web.xml中配置web项目的全局初始化参数:

    <context-param>
<param-name>jdbc</param-name>
<param-value></param-value>
</context-param>

使用application对象获取参数信息:

  <%
Enumeration<String> initParameterNames = application.getInitParameterNames();
while(initParameterNames.hasMoreElements()){
String key = initParameterNames.nextElement();
out.print(key+":"+application.getInitParameter(key)+"<br />");
}
%>

end

Javaweb三大组件之一 servlet的更多相关文章

  1. JavaWeb三大组件(Servlet、Filter、Listener)

    JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...

  2. JavaWeb三大组件之Servlet

    http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/Servlet.html 一.Servlet继承结构体系图 从结构图中 ...

  3. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  4. 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)

    过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context ...

  5. JavaWeb三大组件

    一.JavaWeb三大组件 Servlet,Listener,Filter.它们在JavaWeb开发中分别提供不同的功能. JavaWeb三大组件都必须在Web.xml中配置 二.三大组件 1.Ser ...

  6. JavaWeb三大组件—过滤器filter

    JavaWeb三大组件 1. 都需要在web.xml中进行配置ServletListener(2个感知监听器不需要配置)Filter 2. 过滤器 它会在一组资源(jsp.servlet..css.. ...

  7. 转-JavaWeb三大组件之Listener监听器

    JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...

  8. JavaWeb三大组件之一Filter知识总结

    [1] Filter简介    > Filter翻译为中文是过滤器的意思.    > Filter是JavaWeb的三大web组件之一Servlet.Filter.Listener    ...

  9. Filter过滤器-JavaWeb三大组件之一

    Servlet.Filter.Listener是JavaWeb的三大组件,给Web开发提供了很大的便利. 什么是Filter? Filter,过滤器.类似与生活中的净水器.空气净化器. JavaWeb ...

随机推荐

  1. ajax-2

    serialize()输出序列化表单值的结果: 如: <html> <head> <script type="text/javascript" src ...

  2. JAVA学习必须掌握的框架,不看后悔

    Web应用,最常见的研发语言是Java和PHP. 后端服务,最常见的研发语言是Java和C/C++. 大数据,最常见的研发语言是Java和Python. 可以说,Java是现阶段中国互联网公司中,覆盖 ...

  3. 【bzoj4709】[Jsoi2011]柠檬 决策单调性+dp

    Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...

  4. [转载]ssget 用法详解 by yxp

    总结得很好的ssget用法.....如此好文,必须转载. 原文地址: http://blog.csdn.net/yxp_xa/article/details/72229202 ssget 用法详解 b ...

  5. kill 进程的一些小细节

    终止前台进程,可以用Ctrl+C组合键.但对于后台进程需要用kill命令. kill PID 还可以加信号(参数),默认情况下是编号为15的信号.term信号将终止所有不能捕捉该信号的进程. -s 可 ...

  6. 有关unixODBC:Data source name not found, and no default driver specified的问题

    还是昨天测试postgresql的有关Mirroring Controller的功能时出的问题(真TM是个坑). 首先说下环境: 操作系统平台:RHEL6 x86_64 unixODBC版本:2.3. ...

  7. AtCoder - 2566 优先队列

    Let N be a positive integer. There is a numerical sequence of length 3N, a=(a1,a2,…,a3N). Snuke is c ...

  8. JS 方法注入 attachEvent

    写法1: <html> <head> <title></title> <script language="javascript" ...

  9. 苹果内购和 Apple Pay

    作者:CC老师_MissCC链接:http://www.jianshu.com/p/e3bc47e81785來源:简书 苹果内购 1.什么是内购? 如果你购买的商品,是在本app中使用和消耗的,就一定 ...

  10. django' 前端 self.status.split(' ',1)[0], self.bytes_sent AttributeError: 'NoneType' object has no attribute 'split'

    form 表单 post之后 ,重新定向当前页面的get请求 这是因为,form表单提交的时候,按钮在form表单里面