Servlet-01入门

1.web工程

2.web服务器软件

3.Servlet入门

4.注册案例

 

一、web工程

JavaEE: Java Enterprice Edtion 企业版。不是一个具体的技术,也不是一个框架。是一个平台(企业级开发平台),是一个标准。JavaEE下包含13个技术规范:Servlet,JSP,JDBC,JNDI,JavaMail,JTA,EJB...

1.引入

       WEB:网页(前台)    我们在浏览器上能够查看的一切信息,都称之为WEB资源

       作用:用来展示信息

       分类

       1、静态WEB资源:代码不变,展示内容就不变。比如:HTML、CSS、JS、图片、声音、视频等。

       例如:<img src=”001.jpg”/>,代码不换,效果就不会换

       2、动态WEB资源:展示内容的改变,由程序控制。比如:JSP/Servlet、ASP、PHP、Ruby、Python等

       例如:网站有统计计数器

       15:00登录网站,显示在线会员10人

       17:00登录网站,显示在线会员100人。

        这种效果展示由程序控制

2.IDE创建web工程

3.软件架构

目前市场上有两种流行的软件架构:

        C/S架构:Client/Server 客户端/服务器。要求客户端用户在 电脑安装一个客户端程序。

        常见应用:QQ,欢乐斗地主,消消乐,王者荣耀 等

        优点:(体验好、效果炫、服务器压力小)

        1、用户体验好,效果炫

        2、对信息安全的控制较强 

        3、应用服务器运行数据负荷较轻,部分计算功能在客户端完成。

        缺点:(客户端程序上)

        1、 占用硬盘空间

        2、 维护麻烦

        3、 安装使用依赖于其他条件

        B/S架构:Browser/Server 浏览器/服务器 。通过浏览器与服务器交互,不需要安装其他程序

        常见应用:网银系统,淘宝,京东 12306 等

        优点:(没有客户端,直接使用浏览器即可)

        1、  维护和升级简单,无缝升级。

        2、  不用必须安装程序,操作系统内置了浏览器。大大减少了使用成本

        缺点:(效果一般、体验一般、服务器压力极大)

        1、 动画效果受浏览器限制

        2、 对信息安全控制较差。例如:网银就需要使用U盾,在浏览器端加密。

        3、 应用服务器运行数据负荷较重。大部分计算都在服务器端,增加服务器压力。使用Ajax可以改善部分用户体验。

二、web服务器软件

1.Tomcat简介

       Tomcat 服务器是Apache旗下一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

      支持Servlet和JSP 规范,且最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。

2.Tomcat下载

       网盘连接https://pan.baidu.com/s/15pGLWauScyFsUXFH03TFZg 

       提取码:p38s

       官网下载http://tomcat.apache.org/


3.Tomcat常见问题

     (1)JAVA_HOME的配置

     原因是tomcat无法识别当前Java环境的位置和自身tomcat位置

     

     1、启动Tomcat

      

      2、在浏览器中访问当前的tomcat服务器   tomcat的默认端口号为8080      http://localhost:8080

     (2)端口号冲突

      处理方式

     1、关闭正使用该端口的程序

     cmd>netstat -ano

     查看哪些程序占用了哪些端口,找到占用端口的程序,进入任务管理器结束该进程。

     2、更换端口号 server.xml中

    

    注意:修改时,不要使用1024以前的端口号(一般被操作系统占用)

4.eclipse和Tomcat的整合

5.使用Tomcat部署web工程

浏览器访问项目 :协议+IP+端口号+项目名+具体的页面 

6.Tomcat管理

重新启动Tomcat,访问

三、Servlet入门

1.Servlet快速入门

Server applet 服务器小程序。SUN公司提供的一种动态网页编程技术

     作用

     1、处理数据(获取客户端提交的数据)

     2、调用后台代码

     3、控制跳转

     4、国际化

     5、异常处理

     

     访问流程图

1、创建项目

2、创建HTML文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form action="wangpozi" method="post">
	
		商品名称:<input type="text" name="g_name"><br>
		商品价格:<input type="text" name="g_price"><br>
		商品简介:<textarea rows="10" cols="50" name="g_mark"></textarea><br>
		商品日期:<input type="text" name="g_date"><br>
		<input type="submit" value="增加商品">
	</form>
</body>
</html>

3、配置xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>web</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 媒婆 -->
  <!-- 负责找java类 -->
  <servlet>
  	<servlet-name>GoodsServlet</servlet-name>
  	<servlet-class>com.xj.servlet.GoodsServlet</servlet-class>
  </servlet>
  <!--  找媒婆 -->
  <servlet-mapping>
  	<servlet-name>GoodsServlet</servlet-name>
  	<url-pattern>/wangpozi</url-pattern>
  </servlet-mapping>
  
</web-app>

4、创建Servlet类

package com.xj.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GoodsServlet extends HttpServlet{

	//固定的方法
	@Override
	protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
		
		request.setCharacterEncoding("utf-8");
		String g_name = request.getParameter("g_name");
		String g_price = request.getParameter("g_price");
		String g_mark = request.getParameter("g_mark");
		String g_date = request.getParameter("g_date");
		
		System.out.println("g_name:"+g_name);
		System.out.println("g_price:"+g_price);
		System.out.println("g_mark:"+g_mark);
		System.out.println("g_date:"+g_date);
		
	}
	
}

5、添加商品

6、结果

2.Servlet介绍

        Servlet=server+applet(服务器端小程序)

        Servlet是sun公司提供的一门用于开发动态web资源的技术。

       运行在服务器端,一个小的Java程序。它可以接收从web浏览器发送过来的请求,也可以给浏览器产生相应。通常使用超文本传输协议(HTTP)

3.Servlet的作用

      用来处理从客户端发送过来的请求,并对该请求作出响应。

      Servlet的任务有:入口

      1、接收浏览器数据

      2、调用Service处理请求

      3、向浏览器发出响应(结果展示)

     Servlet中的规范代码结构:

     try{

             //1、准备数据

             //2、调用service处理

             //3、结果展示

      }catch(Exception e){}

4.Servlet与Tomcat关系

     在创建web工程的时候,默认是需要导入服务器的Jar文件到项目中,为什么要导入呢?

     这里有对web工程的一些支持jar包,如果不导入很多功能是无法实现的

     例如:

     servlet-api.jar  支持Servlet 环境

     el-api.jar 对EL表达式的支持

     jsp-api.jar 对JSP文件的支持

     ....

    Servlet依赖支持Servlet技术规范的服务器运行

    其本质Servlet就是一个接口,这个接口标准被实现之后才有了现在应用Servlet功能

    实现一个Servlet需要我们

    继承 HttpServlet  继承  GenericServlet  实现了  Servlet接口

Servlet 接口 
|
GenericServlet  抽象类
|
HttpServlet  抽象类
|
自定义的Servlet

        Servlet接口:

        和Servlet的生命周期有关的3个方法:

        1、init()

        2、destroy()

        3、service()

        无关的两个方法:

        1、getServletConfig()

        2、getServletInfo()

        GenericServlet  实现Servlet接口,也就实现了Servlet接口中的方法。

        GenericServlet  也增加了一些自己的方法,例如:getServletContext() ...

        HttpServlet 继承自GenericServlet

        service(){   // 根据请求的类型 去执行不同的方法

           if(是get请求){

                 doGet()

            }

           if(是post请求){

                doPost()

           }

           if(是put请求){

                 doPut()

           }

      }

     自定义Servlet extends HttpServlet

     一般重新父类的doGet或doPost方法

    Servlet的生命周期:

    Servlet的生命周期是由服务器管理的。第一次访问某个Servlet时,服务器负责创建Servlet对象,并调用init方法一次

    多次访问Servlet时,服务器会为每一次访问都开启一个新的线程执行service(根据请求类型执行相应的doGet 、doPost .....)

    正常关闭服务器时,在Servlet对象被销毁之前执行destroy方法一次。

    :Servlet对象是单例的

5.Servlet中的方法介绍

     重写Servlet接口中方法

     

     init :Servlet对象被创建后,调用init方法

     service:服务,这个方法用来执行Servlet服务 数据的接收以及页面的跳转。(所有操作都在service中进行)

     service方法可以接收任意请求方法类型的数据。

     destory:销毁,这是一个Servlet销毁的时候执行的方法。

 

     doGet  接收get请求信息

     doPost  接收Post请求信息

     doDelete....

     do系列的方法都是从service方法根据不同的请求类型拆分出来的。

     我们在写代码的时候,要么写doGet/doPost  要么写Service 不能都写。

 

  

6.Get和Post请求方式

     Get请求:超链接、浏览器地址栏直接输入、<form method=”GET”>

     Post请求: <form method=”post”>

    或者直接写service()  方法

   表单中get方法与post方法请求的区别【面试题】

   1、get方式传参会将表单中的信息使用URL拼接的方式显示到浏览器的地址栏中,不安全;post传参不会暴露信息

   2、get方式属于URL参数传递信息会以?的形式进行拼接,多个参数使用&形式拼接;post会将信息放在请求主体中,这样的信息是不会暴露的。

   3、get传参数有长度限制,超过限制后直接报错;post传参长度不受限制。

   get唯一的好处就是比post快。

7.自启动的Servlet配置

       Servlet默认情况下是第一次访问时,服务器负责创建对象

       但是,Servlet可以设置为服务器启动时就创建对象

直接创建一个Servlet类

配置xml设置成自启动

重写servlet1的init方法

启动服务器

创建第二个servlet,并设置第二个servlet为自启动

重写servlet2的init方法

启动服务器

8.servlet路径的访问和配置

1、直接在WebContent目录下创建HTML文件

具体流程

2、在WebContent目录下创建html文件夹,然后在文件夹下创建HTML文件

退回到WebContent目录下(相当于test2.html和test1.html的位置一样),其余的操作和1相同。

四、注册案例

1.准备工作

2、创建注册页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="StudentServlet" method="post">
		<table width="70%" align="center">
			<tr>
				<td>name</td>
				<td>
					<input type="text" name="name">
				</td>
			</tr>
			<tr>
				<td>age</td>
				<td>
					<input type="text" name="age">
				</td>
			</tr>
			<tr>
				<td>birthday</td>
				<td>
					<input type="text" name="birthday">
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="register">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

3、创建实体类

package com.xj.bean;

import java.util.Date;

public class Student {
	private int id;
	private String name;
	private int age;
	private Date birthday;
	public int getId() {
		return id;
	}
	
	public Student(){}
	
	public Student(int id, String name, int age, Date birthday) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.birthday = birthday;
	}

	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
		
}

4、dao层

 

package com.xj.dao;

import com.xj.bean.Student;

public interface StudentDao {
	public int insertStudent(Student stu);
}
package com.xj.dao.impl;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;

import com.xj.bean.Student;
import com.xj.dao.StudentDao;
import com.xj.utils.C3p0Utils;

public class StudentDaoImpl implements StudentDao{

	@Override
	public int insertStudent(Student stu) {
		
		int result = 0;
		
		QueryRunner qr = new QueryRunner(C3p0Utils.getDataSource());
		String sql = "insert into student values(null,?,?,?)";
		try {
			result = qr.update(sql,stu.getName(),stu.getAge(),stu.getBirthday());
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return result;
	}

}

5、服务器

package com.xj.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.xj.bean.Student;
import com.xj.dao.StudentDao;
import com.xj.dao.impl.StudentDaoImpl;
import com.xj.utils.DateUtils;

public class StudentServlet extends HttpServlet {


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//客户端 register.html 请求StudentServlet 数据封装到了一个数据包中,通过网络传给Servlet,赋给Servlet中request这个参数
		//通过getParameter("input的name属性值"),获取到用户填写的value值
		
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		String birthday = request.getParameter("birthday");
		
		Student stu = new Student();
		stu.setName(name);
		stu.setAge(Integer.parseInt(age));
		stu.setBirthday(DateUtils.stringToDate(birthday));
		
		StudentDao dao = new StudentDaoImpl();
		int result = dao.insertStudent(stu);
		
		
		//Servlet是服务器,当其他操作完成后,给客户端一个响应
		//使用response这个参数给客户端一个响应
		PrintWriter out = response.getWriter();//使用response获得的PrintWriter这个字符流,数据会写给客户端
		if(result>0){
			out.print("<h1>successful</h1>");
		}else{
			out.print("<h1>fail</h1>");
		}
		
	}

}

6、启动服务器,浏览器注册

7、结果

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值