servlet初步学习

1,定义:
一个小型的java程序,运行在Web服务器,用于接收和响应客户端的http请求
2,测试运行Web工程
A,在Java resource中新建一个类,实现servlet接口
B,配置servlet:
在webContent/WEB-INF/web.xml文件中进行配置:

	<servlet>
	  	<servlet-name>HelloServlet</servlet-name>
	  	<servlet-class>com.summerxia.servlet.HelloServlet</servlet-class>
	</servlet>
	//注册servlet的映射
	<servlet-mapping>
	  	<servlet-name>HelloServlet</servlet-name>
	  	<url-pattern>/a</url-pattern>
	</servlet-mapping>

3,servlet的通用法
Servlet (接口)
|
|
GenericServlet(实现类,父类)
|
|
HttpServlet (用于处理http的请求)(子类)

   定义一个类,继承HttpServlet 复写doGet() 和 doPost()	

4,servlet的生命周期
生命周期方法——在对象的创建到销毁过程中,一定会执行的方法
A,初始化
init方法
在创建一个servlet实例时,执行此方法
该方法只会在初次访问servlet时,才会执行一次
B,服务
service方法
客户端有请求时,就会执行此方法
客户端每请求一次,此方法执行一次
C,销毁
destroy方法
servlet销毁时,执行此方法
即项目从服务器移除或者正常关闭服务器(shutdown.bat)时,会执行此方法

5,servlet初始化提前
在webContent/WEB-INF/web.xml配置中的标签内添加标签,此标签属性为int类型的数字,数字越小,越早初始化。

6,ServletConfig
A. 未来我们自己开发的一些应用,使用到了一些技术,或者一些代码,我们不会。 但是有人写出来了。它的代码放置在了自己的servlet类里面。

B. 刚好这个servlet 里面需要一个数字或者叫做变量值。 但是这个值不能是固定了。 所以要求使用到这个servlet的公司,在注册servlet的时候,必须要在web.xml里面,声明init-params

ServletContext
context–上下文
每个web工程都只有一个ServletContext对象。 也就是不管在哪个servlet里面,获取到的这个类的对象都是同一个。
如何得到ServletContext对象:

ServletContext context = getServletContext();

ServletContext的作用:
1. 获取全局配置参数

			ServletContext context = getServletContext();
			String address = context.getInitParameter("key");
  1. 获取web工程中的资源
    A,获取资源在tomcat里面的绝对路径

     			ServletContext context = getServletContext();
     			String path = context.getRealPath("file/config.properties");
    

    B,获取资源流对象

     		ServletContext context = getServletContext();
     		InputStream ips = context.getResourceAsStream("file/config.properties");
    
    1. 存取数据,servlet间共享数据 域对象
      步骤:1, 定义一个登陆的html页面, 定义一个form表单

       		 <body>
       			<form action ="LoginServlet" method ="get">
       				用户名:<input type ="text" name ="username">
       				密码:<input type ="password" name ="password">
       				<input type ="submit" value ="登录">
       			</form>
       		</body>
      

    2,定义一个Servlet,名为LoginServlet.java
    重写doGet()和doPost(),在doGet()方法中进行步骤3的操作代码编写

    3,针对成功或者失败,进行判断,然后跳转到不一样的网页

     			//通过HttpServletRequest对象request获取参数
     			String username = request.getParameter("username");
     			String password = request.getParameter("password");
     			//通过HttpServletResponse对象response获取输出流
     			PrintWriter pw = response.getWriter();
     			//数据校验,并进行相关处理
     			if("admin".equals(username)&&"123".equals(password)){
     			
     				//设置状态码
     				response.setStatus(302);//302--see other
     				//定位跳转的是哪一个html文件
     				response.setHeader("Location","login_success.html");
     				
     				//重定向,综合简写
     				response.sendRedirct("login_success.html");  //该方法将login_success.html返回客户端,再产生一个request访问该地址
     				
     				//请求转发,写法
     				request.getRequestDispancher("login_success.html").forward(request,response);  //该方法直接同一个request访问login_success.html
    
     				
     			}else{
     				pw.writer("login failed...");
     			}				
    

ServletContext 何时创建, 何时销毁?
服务器启动的时候,会为托管的每一个web应用程序,创建一个ServletContext对象
从服务器移除托管,或者是关闭服务器。

ServletContext 的作用范围:
只要在这个项目里面,都可以取。 只要同一个项目。 A项目存, 在B项目取,是取不到的

HttpServletRequest–这个对象封装了客户端提交过来的一切数据(key=value形式数据)。
作用:1,可以获取客户端请求头信息

		//获取请求头中头信息的头名
		Enumeration<String> headerNames = request.getHeaderNames();
		//根据头名获取头值
		while (headerNames.hasMoreElements()) {
			String name = (String) headerNames.nextElement();
			String value = request.getHeader(name);
			System.out.println(name+"="+value);	
		}

2,获取客户端提交过来的数据

	  String name = request.getParameter("name");
		String address = request.getParameter("address");
		System.out.println("name="+name);
		System.out.println("address="+address);

**3,获取的对象,中文乱码现象

GET方式:
		原因:tomcat收到了这批数据,getParameter 默认使用ISO-8859-1去解码
		处理方法:1,先让文字ISO-8859-1对应的字节数组 , 然后再按utf-8拼接字符串
			    eg:username = new String(username.getBytes("ISO-8859-1") , "UTF-8");
			  2,可以在tomcat里面做设置处理 conf/server.xml 加上URIEncoding="utf-8"
POST方式:
		处理方法: request.setCharacterEncoding("UTF-8");//此设置必须写在getParameter()之前
		       eg: request.setCharacterEncoding("UTF-8");
			   String name = request.getParameter("name");
			   String address = request.getParameter("address");

HttpServletResponse–负责响应客户端的请求,返回数据给客户端。
作用:
1,输出数据到页面上
A, 以字符流输出–response.getWriter();

				 //步骤1,指定输出到客户端的时候,这些文字的使用UTF-8编码
				response.setCharacterEncoding("UTF-8");
				//步骤2,指定浏览器解析数据时,使用UTF-8编码
				response.setHeader("Content-Type","text/html;charset=UTF-8");
				//获取输出流对象,并输出数据
				response.getWriter().write();

B, 以字节流输出–response.getOutputStream()

				//步骤1,指定浏览器解析数据时,使用UTF-8编码
				response.setHeader("Content-Type","text/html;charset=UTF-8");
				//步骤2,指定输出到客户端的时候,这些文字的使用UTF-8编码
				response.getOutputStream().write("string".getBytes("UTF-8"));

C, 不管是字节流还是字符流都可以使用的方法

				 //此方法需定义在数据操作之前
				response.setContentType("text/html;charset=UTF-8");

2,下载文件/资源

A, 直接以超链接的方式下载,不写任何代码。 也能够下载东西下来。
原因:tomcat里面有一个默认的Servlet – DefaultServlet 。这个DefaultServlet 专门用于处理放在tomcat服务器上的静态资源。

B, 以底层流的方式进行传输下载

						 //获取下载对象的文件名
						String filename = request.getParameter("filename");
						//获取这个文件在tomcat中的绝对路径
						String path = getServletContext().getRealPath(filename);
						//设置弹框下载
						response.setHeader("Content-Disposition","attachment;filename="+filename);
						//使用输入流读取文件,并使用输出流进行输出
						InputStream is = new FileInputStream(path);
						OutputStream os = response.getOutputStream();
					
					int len = 0;
					byte[] byte = new byte[1024];
					while((len = is.read(byte)! = -1){
						os.write(byte,0,len);
					}
					os.close();
					is.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值