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

最新文章

  1. 如何在网页中嵌套其他的HTML文件
  2. [Maven]Eclipse插件之Maven配置及问题解析.
  3. R语言中的循环函数(Grouping Function)
  4. CAN开发中遇到的奇怪问题
  5. sql字符串查找大小写敏感相关
  6. tomcat 跨域
  7. UserControl调用Umbraco的Data Types
  8. Prerequisite check &quot;CheckActiveFilesAndExecutables&quot; failed.
  9. ios发送邮件
  10. Dynamics CRM 2015Online Update1 new feature之 插件跟踪日志
  11. Windows Ubuntu Bash申请免费通配符证书(Let&#39;s Encrypt)并绑定IIS
  12. scala可变var与不可变val的理解
  13. [转]pycharm active code
  14. vue项目使用vue-photo-preview插件实现点击图片放大预览和移动
  15. Go Example--函数多返回值
  16. JS判断客户浏览器是否是IE8浏览器、jQuery判断浏览器内核
  17. java程序员修炼之道——大牛告诉我们应该好好学习与修炼以下知识与技能
  18. 九项重要的职业规划提示(转自W3School )
  19. Android 虚拟多开系列一——技术调研
  20. 51nod 1821 最优集合(思维+单调队列)

热门文章

  1. 同一个程序里有多个版本的App
  2. Xcode面板的使用
  3. c++实验2 顺序存储线性表
  4. ubuntu安装nginx与配置
  5. stegsolve的功能
  6. Linux man语法结构说明
  7. 【bzoj4817】树点涂色 LCT+线段树+dfs序
  8. 【智能算法】变邻域搜索算法(Variable Neighborhood Search,VNS)超详细解析和TSP代码实例以及01背包代码实例
  9. Servlet完全教程
  10. SQL函数:返回传入的字符中的数字或者字符