苏州房地产网站建设,wordpress怎样删除主题,网站建站销售怎么做,兰州软件公司排名Servlet 是在服务器上运行的小程序。这个词是在 Java applet的环境中创造的#xff0c;Java applet 是一种当作单独文件跟网页一起发送的小程序#xff0c;它通常用于在客户端运行#xff0c;结果得到为用户进行运算或者根据用户互作用定位图形等服务。服务器上需要一些程序… Servlet 是在服务器上运行的小程序。这个词是在 Java applet的环境中创造的Java applet 是一种当作单独文件跟网页一起发送的小程序它通常用于在客户端运行结果得到为用户进行运算或者根据用户互作用定位图形等服务。服务器上需要一些程序常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口Common Gateway InterfaceCGI应用程序完成的。然而在服务器上运行 Java这种程序可使用 Java 编程语言实现。在通信量大的服务器上JavaServlet 的优点在于它们的执行速度更快于 CGI 程序。各个用户请求被激活成单个程序中的一个线程而无需创建单独的进程这意味着服务器端处理请求的系统开销将明显降低。实现过程最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server。此后一些其它的基于 Java 的 Web Server 开始支持标准的 Servlet API。Servlet 的主要功能在于交互式地浏览和修改数据生成动态 Web 内容。这个过程为客户端发送请求至服务器端服务器将请求信息发送至 ServletServlet 生成响应内容并将其传给服务器。响应内容动态生成通常取决于客户端的请求服务器将响应返回给客户端。Servlet 看起来像是通常的 Java 程序。Servlet 导入特定的属于 Java Servlet API 的包。因为是对象字节码可动态地从网络加载可以说 Servlet 对 Server 就如同 Applet对 Client 一样但是由于 Servlet 运行于 Server 中它们并不需要一个图形用户界面。从这个角度讲Servlet 也被称为 FacelessObject。一个 Servlet 就是 Java 编程语言中的一个类它被用来扩展服务器的性能服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然 Servlet 可以对任何类型的请求产生响应但通常只用来扩展 Web 服务器的应用程序。Servlet根据请求动态的去生成要返回的html并不是早就准备好的html文档。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器属于轻量级应用服务器在中小型系统和并发访问用户不是很多的场合下被普遍使用是开发和调试JSP 程序的首选。对于一个初学者来说可以这样认为当在一台机器上配置好Apache 服务器可利用它响应HTML标准通用标记语言下的一个应用页面的访问请求。实际上Tomcat是Apache 服务器的扩展但运行时它是独立运行的所以当你运行tomcat 时它实际上作为一个与Apache 独立的进程单独运行的。诀窍是当配置正确时Apache 为HTML页面服务而Tomcat 实际上运行JSP 页面和Servlet。另外Tomcat和IIS等Web服务器一样具有处理HTML页面的功能另外它还是一个Servlet和JSP容器独立的Servlet容器是Tomcat的默认模式。不过Tomcat处理静态HTML的能力不如Apache服务器这里注意两个问题tomcat启动乱码问题tomcat的启动成功的判断方法修改端口和调整乱码问题定位到服务配置文件中定位到日志文件中过程简述1.首先从浏览器输入网址发出请求请求发送到tomcat2.tomcat根据映射假名匹配匹配到后找到真名3.根据真名再匹配servlet的具体路径4.找到后Servlet处理请求并且返回响应到浏览器5.浏览器加载响应。放在webapp目录中的WEB-INF中的sub文件不能随便被外部访问里面放html是访问不到的。这样就可以访问了一般推荐采用绝对路径不采用相对路径。注意上下文问题就是servlet的映射的根路径的控制www.localhost:8080/xxxxx/url-pattern一般都设置为忽略不常用。 String[] specs request.getParameterValues(spec);PrintWriter outresponse.getWriter();for(String spec:specs){out.println(h2spec:spec/h2);}以下是两种请求的处理方式。 Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String name req.getParameter(name);String mobile req.getParameter(mobile);PrintWriter out resp.getWriter();out.println(GET);out.println(h1name/h1);out.println(h1mobile/h1);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String name req.getParameter(name);String mobile req.getParameter(mobile);PrintWriter out resp.getWriter();out.println(POST);out.println(h1name/h1);out.println(h1mobile/h1);}public class FirstServlet extends HttpServlet {//第一阶段装载读取xml文件加载配置信息并未创建//第一次访问地址栏输入的时候才会创建servlet实体对象public FirstServlet() {System.out.println(正在创建...);}//创建之后初始化Overridepublic void init() throws ServletException {System.out.println(正在初始化);}Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(正在处理。。);}//在tomcat关闭前会自动的关闭销毁Overridepublic void destroy() {System.out.println(正在销毁);}
// 注意全局有且仅有一个servlet对象实例有多个请求时单例多线程。
}在类上注解写上不用配置web.xml了
WebServlet(/anno)
public class AnnotationServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().println(im annotation servlet!);}
}Uniform Resource LocatorUniform Resource IdentifierHTTP 协议的 Header 是一块数据区域分为请求头和响应头两种类型客户端向服务区发送请求时带的是请求头而服务器响应客户端数据时带的是响应头。请求头里主要是客户端的一些基础信息UAuser-agent就是其中的一部分而响应头里是响应数据的一些信息以及服务器要求客户端如何处理这些响应数据的指令。请求头里面的关键信息如下1) accept表示当前浏览器可以接受的文件类型假设这里有 image/webp表示当前浏览器可以支持 webp 格式的图片那么当服务器给当前浏览器下发 webp 的图片时可以更省流量。2) accept-encoding表示当前浏览器可以接受的数据编码如果服务器吐出的数据不是浏览器可接受的编码就会产生乱码。3) accept-language表示当前使用的浏览语言。4) Cookie很多和用户相关的信息都存在 Cookie 里用户在向服务器发送请求数据时会带上。例如用户在一个网站上登录了一次之后下次访问时就不用再登录了就是因为登录成功的 token 放在了 Cookie 中而且随着每次请求发送给服务器服务器就知道当前用户已登录。5) user-agent表示浏览器的版本信息。当服务器收到浏览器的这个请求后会经过一系列处理返回一个数据包给浏览器而响应头里就会描述这个数据包的基本信息。响应头里的关键信息有1) content-encoding表示返回内容的压缩编码类型如“Content-Encoding :gzip”表示这次回包是以 gzip 格式压缩编码的这种压缩格式可以减少流量的消耗。2) content-length表示这次回包的数据大小如果数据大小不匹配要当作异常处理。3) content-type表示数据的格式它是一个 HTML 页面同时页面的编码格式是 UTF-8按照这些信息可以正常地解析出内容。content-type 为不同的值时浏览器会做不同的操作如果 content-type 是 application/octet-stream表示数据是一个二进制流此时浏览器会走下载文件的逻辑而不是打开一个页面。4) set-cookie服务器通知浏览器设置一个 Cookie通过 HTTP 的 Header可以识别出用户的一些详细信息方便做更定制化的需求如果大家想探索自己发出的请求中头里面有些什么可以这样做打开 Chrome 浏览器并按“F12”键唤起 Chrome 开发者工具选择 network 这个 Tab浏览器发出的每个请求的详情都会在这里显示。根据请求头进行判断是哪一种设备就返回哪种设备的页面。通过请求头判断处理方式这里有一句话要注意设置编码方式否则中文字符串会乱码号。WebServlet(/ua)
public class UserAgentServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String ua req.getHeader(User-Agent);String output ;if(ua.toLowerCase().indexOf(window nt)!-1){output h1这是PC页面/h1;}else {output h1这是移动端页面;}resp.setContentType(text/html;charsetutf-8);PrintWriter outresp.getWriter();out.println(output);}
}401代表没有登陆403代表没有权限WebServlet(/ua)
public class UserAgentServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String ua req.getHeader(User-Agents);String output ;if(uanull){resp.getWriter().println(请求头不存在);return;}if(ua.toLowerCase().indexOf(window nt)!-1){output h1这是PC页面/h1;}else {output h1这是移动端页面;}resp.setContentType(text/html;charsetutf-8);PrintWriter outresp.getWriter();out.println(output);}
}WebServlet(/ct)
public class ContentTypeServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String output h1a hrefhttp://www.baidu.comspan百度/span;response.setContentType(aplication/x-msdownload;charsetutf-8);response.getWriter().println(output);}
}WebServlet(/index)
public class IndexServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType(text/html;charsetutf-8);response.getWriter().println(我是主页);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req,resp);}
}
WebServlet(/login)
public class CheckLoginServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username request.getParameter(username);String password request.getParameter(password);if(username.equals(admin)password.equals(123456)){System.out.println(登录成功);//请求转发//request.getRequestDispatcher(/index).forward(request,response);//响应重定向response.sendRedirect(/index);}else {System.out.println(用户登录失败);}}
}bodyform action/login methodpostinput nameusernameinput namepassword typepasswordinput typesubmit/form
/body方式一请求转发的形式方式二响应重定向的方式两者的区别请求转发一个是一次即可请求完成紧密相关因为由一个tomcat管理只能在应用的内部进行转发响应重定向不是紧密相连的对象默认get方式因为两次响应可以跳到其他服务器管理站点如百度 登录后主页面显示账号名称实例WebServlet(/login)
public class CheckLoginServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username request.getParameter(username);String password request.getParameter(password);if(username.equals(admin)password.equals(123456)){System.out.println(登录成功);request.setAttribute(username,username);request.setAttribute(password,password);
// 请求转发总体一个请求可以设置和获取属性request.getRequestDispatcher(/index).forward(request,response);
// //响应重定向一共两个请求会出现Null的情况
// response.sendRedirect(/index);}else {System.out.println(用户登录失败);}}
}WebServlet(/index)
public class IndexServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType(text/html;charsetutf-8);String username (String)request.getAttribute(username);response.getWriter().println(我是主页username);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req,resp);}
}CookieWebServlet(/cookie/random)
public class RandomServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Integer random new Random().nextInt(10000);Cookie cookie new Cookie(random , String.valueOf(random));cookie.setMaxAge(60*60*24);response.addCookie(cookie);response.setContentType(text/html;charsetutf-8);response.getWriter().println(h2随机数 random 已生成/h2);}
}WebServlet(/cookie/show)
public class CookieServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie[] cookies request.getCookies();Integer random-1;if(cookiesnull){response.getWriter().println(无cookie);return;}for(Cookie c:cookies){if (c.getName().equals(random)) {randomInteger.parseInt(c.getValue());}}response.setContentType(text/html;charsetutf-8);response.getWriter().println(random);}
}
为什么说session是和浏览器窗口绑定的因为当我把窗口关闭cookie默认消除此时向tomcat发送请求的时候因为cookie没了所以此时会创建一个新的session原来的30min会自动销掉。public class CheckLoginServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username request.getParameter(username);String password request.getParameter(password);if(username.equals(admin)password.equals(123456)){System.out.println(登录成功);//为请求开辟一片内存空间并设置属性及值设置同时设置cookie的sessionidHttpSession session request.getSession();session.setAttribute(username,username);//响应设置好cookie的sessionid,响应重定向到indexresponse.sendRedirect(/index);}else {System.out.println(用户登录失败);}}
}WebServlet(/index)
public class IndexServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType(text/html;charsetutf-8);//根据cookie来查找session空间并获取属性HttpSession session request.getSession();String username(String) session.getAttribute(username);response.getWriter().println(我是主页username);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req,resp);}
}WebServlet(/servletcontext/init)
public class ServletContextInitServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext req.getServletContext();servletContext.setAttribute(copyright,xxxx);resp.setContentType(text/html;charsetutf-8);resp.getWriter().println(ServletContext已初始化);}
}WebServlet(/servletcontext/indx)
public class IndexServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType(text/html;charsetutf-8);ServletContext context req.getServletContext();String copyright (String)context.getAttribute(copyright);resp.getWriter().println(copyright);}
}