Javaweb三大组件之一 servlet
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的更多相关文章
- JavaWeb三大组件(Servlet、Filter、Listener)
JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...
- JavaWeb三大组件之Servlet
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/Servlet.html 一.Servlet继承结构体系图 从结构图中 ...
- JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)
JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference
- 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)
过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context ...
- JavaWeb三大组件
一.JavaWeb三大组件 Servlet,Listener,Filter.它们在JavaWeb开发中分别提供不同的功能. JavaWeb三大组件都必须在Web.xml中配置 二.三大组件 1.Ser ...
- JavaWeb三大组件—过滤器filter
JavaWeb三大组件 1. 都需要在web.xml中进行配置ServletListener(2个感知监听器不需要配置)Filter 2. 过滤器 它会在一组资源(jsp.servlet..css.. ...
- 转-JavaWeb三大组件之Listener监听器
JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...
- JavaWeb三大组件之一Filter知识总结
[1] Filter简介 > Filter翻译为中文是过滤器的意思. > Filter是JavaWeb的三大web组件之一Servlet.Filter.Listener ...
- Filter过滤器-JavaWeb三大组件之一
Servlet.Filter.Listener是JavaWeb的三大组件,给Web开发提供了很大的便利. 什么是Filter? Filter,过滤器.类似与生活中的净水器.空气净化器. JavaWeb ...
随机推荐
- retain, copy, assign区别
1.retain, copy, assign区别 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a 和b ...
- C# Winform 加载窗体/对象时的等待页面设计
在设计应用程序过程中,有时候加载对象需时较长,我们可以显示一个Loading等待页面,对用户来说就比较友好了. 这个还是涉及到多线程,下面是步骤. 一.创建好Loading窗体: 一个Panel用于显 ...
- ubuntu 16.4安装toolsbelt heroku
https://devcenter.heroku.com/articles/getting-started-with-python#set-up # Run this from your termin ...
- Tensorflow博文列表
tensorflow:https://wenku.baidu.com/view/489ecc9727fff705cc1755270722192e44365853.html 语义分割SegNet:htt ...
- Qt 学习之路 2(35):文件
Qt 学习之路 2(35):文件 豆子 2013年1月5日 Qt 学习之路 2 12条评论 文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了 ...
- ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接
用 SQL*Plus 连接数据库的时候,除了用户名和密码外,还要在口令后面加一个主机字符串.如下: 请输入用户名:sys 口令:ANKoracle123,orcl as sysdba
- Luogu P1156 垃圾陷阱 DP
f[i][j]表示在第i个垃圾,高度为j的最大生命值 转移分三部分: 如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j-a[i].v]的生命值,则可以垫高度 如果j ...
- tensorflow基础-placeholder
placeholder: 要给节点输入数据时用 placeholder,在 TensorFlow 中用placeholder 来描述等待输入的节点,只需要指定类型即可,然后在执行节点的时候用一个字典来 ...
- bzoj3252 攻略 dfs序+线段树
题目传送门 题目大意:给出一棵树,1为根节点,每个节点都有权值,每个叶子节点都是一个游戏的结局,选择k个游戏结局,使得权值总和最大,同一个节点不会被重复计算. 思路:这道题最关键的是要想到一个性质,就 ...
- 云服务的三种形式laas,paas,saas
“云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务. 云也是分层的 任何一个在互联网上提供其服务的公司都可以叫做云计算公司.其实云计算分几 ...