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、结果