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. retain, copy, assign区别

    1.retain, copy, assign区别 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a 和b ...

  2. C# Winform 加载窗体/对象时的等待页面设计

    在设计应用程序过程中,有时候加载对象需时较长,我们可以显示一个Loading等待页面,对用户来说就比较友好了. 这个还是涉及到多线程,下面是步骤. 一.创建好Loading窗体: 一个Panel用于显 ...

  3. ubuntu 16.4安装toolsbelt heroku

    https://devcenter.heroku.com/articles/getting-started-with-python#set-up # Run this from your termin ...

  4. Tensorflow博文列表

    tensorflow:https://wenku.baidu.com/view/489ecc9727fff705cc1755270722192e44365853.html 语义分割SegNet:htt ...

  5. Qt 学习之路 2(35):文件

    Qt 学习之路 2(35):文件 豆子 2013年1月5日 Qt 学习之路 2 12条评论 文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了 ...

  6. ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接

    用 SQL*Plus 连接数据库的时候,除了用户名和密码外,还要在口令后面加一个主机字符串.如下: 请输入用户名:sys 口令:ANKoracle123,orcl as sysdba

  7. Luogu P1156 垃圾陷阱 DP

    f[i][j]表示在第i个垃圾,高度为j的最大生命值 转移分三部分: 如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j-a[i].v]的生命值,则可以垫高度 如果j ...

  8. tensorflow基础-placeholder

    placeholder: 要给节点输入数据时用 placeholder,在 TensorFlow 中用placeholder 来描述等待输入的节点,只需要指定类型即可,然后在执行节点的时候用一个字典来 ...

  9. bzoj3252 攻略 dfs序+线段树

    题目传送门 题目大意:给出一棵树,1为根节点,每个节点都有权值,每个叶子节点都是一个游戏的结局,选择k个游戏结局,使得权值总和最大,同一个节点不会被重复计算. 思路:这道题最关键的是要想到一个性质,就 ...

  10. 云服务的三种形式laas,paas,saas

    “云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务. 云也是分层的 任何一个在互联网上提供其服务的公司都可以叫做云计算公司.其实云计算分几 ...