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 ...
随机推荐
- NSEnumerator迭代器
前言 Xcode 7 对系统中常用的一系列容器类型都增加了泛型支持(),有了泛型后就可以指定容器类中对象的类型了. 假如向泛型容器中加入错误的对象,编译器会报警告. __covariant:协变性,子 ...
- C语言宏的定义和宏的使用方法(#define)
1.宏的功能介绍 在 C 语言中,可以采用命令 #define 来定义宏.该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句.在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都 ...
- 简单的 socket 代码
TCP 编程 客户端代码 将键盘输入的字符发送到服务端,并将从服务端接收到的字符输出到终端 #!/usr/python3 import socket def socket_client(): s = ...
- 【SSO单点系列】(7):CAS4.0 SERVER通过数据库方式认证用户
在前几篇中有简单介绍服务端的认证方式,默认的是直接在 deployerConfigContext.xml 文件中 一个叫做 primaryAuthenticationHandler 的bean中配置. ...
- SpringBoot设置默认启动页的2种方式
方式一: 继承WebMvcConfigurerAdapter,重写addViewControllers. @Configurationpublic class WebConfigurer extend ...
- npm 修改源 pip 修改源
npm修改源由于不可说原因,npm install时,速度总是不尽如人意,解决办法是修改npm的数据源npm config set registry https://registry.npm.taob ...
- mac 添加环境变量
1.Mac系统的环境变量,加载顺序为: a. /etc/profile b. /etc/paths c. ~/.bash_profile d. ~/.bash_login e. ~/.profile ...
- 009 Android Fragment动态用法(实现动态菜单栏)设置控件为满屏状态
·1.MainActivity采用线性布局 2.在app--->res--->layout,右击new--->xml---->layout xml FILE <1> ...
- Spring Boot 例一 实现jsonp接口
1.新建项目(选择quikstart) 2.增加spring boot 依赖 <dependency> <groupId>org.springframework.boot< ...
- javascript有哪些优秀的库,把你喜欢的都说出来吧
回复格式 应用领域 …… 你喜欢的js库名称 …… 作用(一句话) web …… jquery …… 众所周知的dom操作库 seajs …… js的管理框架 ejs …… 没有学习成本的js模 ...