zoukankan      html  css  js  c++  java
  • servlet1

    b/s
    1、开发成本低
    2、管理维护简单
    3、产品升级遍历
    4、用户使用房兵,故障概率低。
    不足:
    1、安全性不同
    2、客户端不能改变,受浏览器限制
    Servlet
    Servlet(java服务器小程序)是java编写的服务器程序,特点:
    1、由服务器端调用和执行的;
    2、用java语言编写的
    3、按照Servlet规范开发的
    4、功能强大,可以完成几乎所有的网站功能
    5、学习jsp的基础
    Tomcat三个功能:
    1、web服务器
    2、jsp容器
    3、servlet容器
    安装Tomcat要配置环境变量
    1、jdk环境变量(最新的其实只安装配置jre就可以了)
    2、Tomcat环境变量配置

    1,新建变量名:CATALINA_BASE,变量值:C:	omcat
    2,新建变量名:CATALINA_HOME,变量值:C:	omcat
    3,打开PATH,添加变量值:%CATALINA_HOME%lib;%CATALINA_HOME%in
       path环境变量还可以设置成安装bin目录地址,就可以命令行直接打开Tomcat
    打开浏览器,在地址栏中输入http://localhost:8080回车,如果看到Tomcat自带的一个JSP页面,说明你的JDK和Tomcat已搭建成功。
    

    配置文件

    配置文件:
    用户名:admin
    密码:admin
    tomcat-users.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <tomcat-users>
    <role rolename="manager-gui"/>
    <user username="admin" password="admin" roles="manager-gui"/>
    </tomcat-users>
    
    

    一个servlet的部署

    <servlet>
    	<!-- 给servlet取名,这个名字是任意的,不要用汉字-->
    	<servlet-name>hello</servlet-name>
    	<!-- 指明servlet的路径(包名+类名)-->
    	<servlet-class>EclipseWorkSpace.javastudy.src.servletDemo.ServletTest</servlet-class>
    </servlet>
    <servlet-mapping>
    	<!--给你的servlet取名,任意的-->
    	<servlet-name>hello</servlet-name>
    	<!--这是在浏览器中输入的访问该servlet的url-->
    	<url-pattern></url-pattern>
    </servlet-mapping>
    

    程序

    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class ServletTest implements Servlet{
    	public static int i = 0;
    
    	//销毁servlet实例,释放内存
    	/*
    	 * 销毁servlet实例:
    	 * 1、reload该servlet(webapps)
    	 * 2、关闭Tomcat,或者关机
    	 * */
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	//得到servlet配置文件
    	@Override
    	public ServletConfig getServletConfig() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public String getServletInfo() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    	
    	//此函数用于初始化该servlet,该函数只会被调用一次(类似于构造器),当用户第一次访问该servlet,被调用
    	@Override
    	public void init(ServletConfig arg0) throws ServletException {
    		// TODO Auto-generated method stub
    		System.out.println("init");
    		
    	}
    
    	//用于处理业务逻辑,程序员应当把业务逻辑代码写在这里
    	//当用户访问servlet,都会被调用
    	//ServletRequest 用于获得客户端信息
    	//ServletResponse 向客户端返回信息
    	@Override
    	public void service(ServletRequest req, ServletResponse res)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		//从res中得到PrintWriter,然后通过IO流返回信息
    		PrintWriter pw = res.getWriter();
    		pw.println("返回到浏览器的信息");
    		
    	}
    
    }
    

    Servlet是部署在容器中的,它的生命周期由容器管理
    Servlet生命周期分为以下几个阶段:
    1、装在servlet,由相应的容器完成
    2、创建一个servlet实例
    3、调用servlet的init()方法,该方法只会在第一次访问该servlet时被调用一次
    4、服务,调用servlet的service()方法,一般业务逻辑在这里处理,该方法访问servlet时,都会被调用
    5、销毁,调用servlet的destory()方法,销毁servlet实例,该方法再一下情况被调用

    • tomcat重新启动
    • reload该Webapp
    • 重启电脑

    通过继承GenericServlet开发servlet
    通过GenericServlet开发servlet只需要重写service方法

    package servletDemo;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.GenericServlet;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class GenerciServletTest extends GenericServlet{
    
    	@Override
    	//ServletRequest 用于获得客户端信息
    	//ServletResponse 向客户端返回信息
    	public void service(ServletRequest req, ServletResponse res)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		try{
    			PrintWriter pw = res.getWriter();
    			pw.println("hello");
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		
    	}
    }
    

    通过集成HttpServlet开发servlet
    需要重写doGet、goPost方法。
    表单提交数据get请求和post请求的区别:
    1、从安全性看get<post,get提交的数据会在浏览器的地址栏显示
    2、从提交的内容大小看,get<post,get提交的数据不能大于2k,而post提交的数据理论上不受限制,但实际上建议不大于64k
    3、请求响应速度看:get>post,get请求服务器立即处理,post请求可能形成一个队列请求。

    import java.io.PrintWriter;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HttpServletTest extends HttpServlet{
    
    	/**
    	 * 
    	 */
    	//处理get请求
    	public void doGet(HttpServletRequest req, HttpServletResponse res){
    		//业务逻辑
    		try{
    			PrintWriter pw = res.getWriter();
    			pw.println("hello");
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		
    	}
    	//处理post请求
    	public void doPost(HttpServletRequest req, HttpServletResponse res){
    		this.doGet(req, res);
    	}
    }
    

    重新部署可能web服务器找不到信息,到处理页面reload一下就可以
    中文乱码问题:

    HttpServletResponse res
    res.setContetntYype("text/html;charset=gbk");
    

    获得浏览器的信息

    HttpServletRequest req
    string s1 = req.getParameter("usename");
    string s2 = req.getParameter("控件名");
    跳转到指定文件:
    res.sendRedirect("");//你要到的servlet那个url
    

    同一用户的不同页面如何共享数据
    1、cookie

    服务器在客户端保存用户的信息,比如登录名、密码等,就是cookie。
    一般保存在客户端的c:Documents and Settings目录下
    Cookie的用处:
    1、保存用户名、密码,在一定时间不用重新登录
    2、记录用户访问网站的喜好,比如:有无背景音乐等
    3、网站的个性化:比如定制网站的服务、内容
    

    2、sendRedirect跳转

    通过该方法可以将信息传送到下一个页面:
    sendRedirect("welcome?usename="shunping);;的形式
    1、welcome代表你要跳转的nameservlet的url
    2、servlet url名和变量之间有?号
    3、如果传递两个以上的值,用&号
    如果传递的是中文,可能会有乱码,需要处理一下。
    有点:传送信息的速度比较快
    缺点:只能传送字符串,而不能传送一个对象
    可以将一个页面的信息传递给另一个页面
    

    3、session技术

    
    

    4、隐藏表单的提交(form)

  • 相关阅读:
    adb client, adb server, adbd原理浅析(附带我的操作过程)【转】
    ADB运行框架原理解析【转】
    android adb 源码框架分析(2 角色)【转】
    android adb 源码框架分析(1 系统)【转】
    ADB 源码分析(一) ——ADB模块简述【转】
    Awesome Adb——一份超全超详细的 ADB 用法大全【转】
    Android系统设置Android adb 开关的方法【转】
    [RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】
    [RK3399][Android7.1] 调试笔记 --- 模块编译32位动态库【转】
    Linux内核中工作队列的使用work_struct,delayed_work【转】
  • 原文地址:https://www.cnblogs.com/changzuidaerguai/p/7192726.html
Copyright © 2011-2022 走看看