servlet要点详解以及相关的例子
来源:互联网 发布:mac怎么重命名文件 编辑:程序博客网 时间:2024/05/17 02:01
简单理解一些知识点:
1 Servlet的概念
---在server上运行的用于处理client请求和响应的Java程序
2 Servelt的配置3步
----在web.xml中配置mapping( Servelt名字和对应的Servelt类)
----html在页面中调Servelt
----声明自己定义的Servlet类,需要继承HttpServlet类。
3 cookie实际是保持在client上的name-value对,有过期时间,可以保存一些需要的数据供后续server端使用。需要注意的是getCookies返回的是数组。addCookie隐含有update操作。
4 filter过滤器,可以定义对某些url执行一些顺序的操作,调用顺序和mapping顺序一致。
5 session跟踪,主要是为了解决同一用户在server的不同page上切换发送响应时,避免重复验证用户id的操作。
6 page页面上表单作为参数传递到servlet上主要是用request.getParameter和request.getParameters方法。
其他概念:
1 doGet、doPost、doPut、doDelete方法
doGet一般是执行查询,url中会有变量的信息,比较不安全。
doPost一般会有update操作,url中不会有变量的信息,比较安全。
2 HttpServletRequest 客户端请求对象
----实质相当于是上行接受客户端消息的一些参数
3 HttpServletResponse 服务端响应对象
----实质相当于是下行响应发送给客户端消息的一些参数
4 最基本的使用servlet,不适用JSP、struts等高级框架,实质上是把servelt作为MVC中的controller来做的。
5 init方法是给容器(比如Tomcat)调用的,只在servlet使用web.xml创建完毕后,执行前调用一次。
可以自定义重写servlet的init、service、destroy方法,实现一些定制需求。因为写servlet的时候都要继承httpServlet,所以也会继承这几个方法,容器也会调用这几个方法实现。
6 http协议的状态码:
400-499:客户端的错误
500-599:服务端的错误
503:service unavailable服务不可用,server端没有响应,可能是服务端一直再计算,没有给出响应,也可能是其他原因响应超时。
零碎的问题解决:
1 tomcat的dubug模式出现path not found主要参考stackoverflow的解决方法,修改完要重启eclipse。
http://stackoverflow.com/questions/6174550/eclipse-java-debugging-source-not-found
2 url地址对应的项目文件/项目名/文件名,或者是web.xml中配置的url和servlet的对于关系,截图:
3 乱码问题参考我之前的文件,添加字符编码的说明即可解决:
具体例子:
1 通过表单获取前台数据,包含从web.xml中获取初始化的一些变量:
<?xml version="1.0" encoding="gb2312"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <!-- 1 servlet和class的映射 --> <servlet-name>TestServlet</servlet-name> <servlet-class>com.hj.servlet.TestServlet</servlet-class> <!-- 2 传参数 --> <init-param> <param-name>msg</param-name> <param-value>welcome you</param-value> </init-param> </servlet> <!-- 3 servlet和url的映射 --> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/TestServlet</url-pattern> </servlet-mapping></web-app>
<!-- 1 解决乱码问题 --><%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %><html> <head> <meta http-equiv="Content-Type" content="text/HTML; charset=gbk"> <title>Welcome you!</title> </head> <body> <!-- 2 action名对应servlet名 例子中用的是post则对应servlet中的doPost方法 --> <!-- 3 input中的name对应于serlve中直接通过名称提取变量 --> <form action="TestServlet" method="post"> user name: <input type="text" name="user"><p> <input type="submit" value="提交"> </form> </body></html>
package com.hj.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException { req.setCharacterEncoding("gb2312"); //1 通过表单的name获取表单的变量名 //2 如果要表单的所有变量可以用getParameters返回数组类型,具体参考api String user=req.getParameter("user"); //3 getInitParameter获取web.xml中配置的变量 String welcomeMsg=getInitParameter("msg"); resp.setContentType("text/html;charset=gb2312"); PrintWriter out=resp.getWriter(); //4 直接返回html给client out.println("<html><head><title>"); out.println("Welcome Page"); out.println("</title><body>"); //5 变量的调用 out.println(welcomeMsg+", "+user); out.println("</body></head></html>"); out.close(); } //6 由于在JSP中调用的post所以会调用这个方法,doGet也在这里 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException { doGet(req,resp); }}
目录结构:
对应url
http://localhost:8080/TestServletJsp/index.jsp
2 cookie的读写操作:
public class CookieTest extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { for(int i=0; i<3; i++) { // 1 Max-Age过期时间单位是秒,Age为0表示过期 过期后cookie将被删除 // 1.1 默认的过期时间是-1, // 1.2 负的表示仅限当前browser browser关闭则过期 Cookie cookie = new Cookie("Session-Cookie-" + i,//cookie的name,value对 "Cookie-Value-S" + i); // response.addCookie(cookie); cookie = new Cookie("Persistent-Cookie-" + i, "Cookie-Value-P" + i); // Cookie is valid for an hour, regardless of whether // user quits browser, reboots computer, or whatever. cookie.setMaxAge(3600); response.addCookie(cookie); } response.setContentType("text/html"); PrintWriter out = response.getWriter(); String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n"; String title = "Active Cookies"; out.println(docType + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + "<TABLE BORDER=1 ALIGN=\"CENTER\">\n" + "<TR BGCOLOR=\"#FFAD00\">\n" + " <TH>Cookie Name\n" + " <TH>Cookie Value"); Cookie[] cookies = request.getCookies(); if (cookies == null) { out.println("<TR><TH COLSPAN=2>No cookies"); } else { for(Cookie cookie: cookies) { out.println ("<TR>\n" + " <TD>" + cookie.getName() + "\n" + " <TD>" + cookie.getValue()); } } out.println("</TABLE></BODY></HTML>"); }}
5 session跟踪:
6重写init、service、destroy:
package com.hj.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class testInit extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public testInit() { super(); } //1 重写 init方法 @Override public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub //1.1 调用父类HttpServlet的方法 super.init(config); //1.2 自己添加的方法 System.out.println("init方法被执行"); System.out.println("相关的初始化参数:"); //1.3 获取config的信息 System.out.println(config.getInitParameter("info")); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter printWriter = response.getWriter(); printWriter.write("Hello world"); } @Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { super.service(arg0, arg1); System.out.println("service方法被执行"); } @Override public void destroy() { super.destroy(); System.out.println("destroy方法被执行"); }}
主要参考:
Servlet教程各种方法的api和例子都有介绍
《Servlet与JSP核心编程(第2版)》
- servlet要点详解以及相关的例子
- servlet的相关要点
- UIApplication详解以及要点
- Servlet与XML的配置问题及相关例子
- Servlet的开发部署以及详解
- servlet、过滤器、会话处理基本要点详解
- redis的使用详解以及相关命令
- 网页漂浮层的例子以及相关解释
- c++:继承相关的要点热点,以及菱形继承的底层实现
- Servlet上传的例子
- Servlet的例子配置文件
- kafka的相关要点总结
- servlet的生命周期以及与其相关的类接口和相关方法
- VPN的概念以及要点
- VPN的概念以及要点
- HTTP通信以及Servlet详解
- FMDB的使用详解以及一个简单的小例子
- Servlet和Filter的url匹配以及url-pattern详解
- javaSE基础入门学习笔记1
- 【鸟哥的linux私房菜】终于再次读完《Linux 基础篇》——一些感想
- 一起学mini2440裸机开发(十)--mini2440外部中断实验
- 确定了,准备学习安卓和asp.net
- zaji
- servlet要点详解以及相关的例子
- Toast 自定义
- Easyui--datagrid 的使用 (弹出框的使用)
- Overloud REmatrix
- 归一化处理
- vs2012,配置openMP
- 『RNN 监督序列标注』笔记-第三章 神经网络
- UVa213
- galleryapp