Servlet

1, 什么是Servlet
Servlet(Server Applet),全称Java Servlet,暂无中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

2,tomcat 目录介绍,
(1)bin:存入各种执行应用程序 tomcat 启动,关闭,都可以在这里面执行
(2)conf:配置文件信息 端口号就可以在这里面修改
server.xml 这里面改端口号 和字体
(3)lib:jar包
(4)logs:日记文件
(5)temp:临时存放文件
(6)webapps:就是我们的工程应用都是部署在这里面的
(7)work:用于存入编译后的文件
3,tomact配置
需要两个文件
在这里插入图片描述
注:这里的jdk与以前安装的jdk环境变量没有任何关系。
解压后配置
配置目录:myeclipse-window-preference-tomact-tomact7.x
(1)配置tomcat
在这里插入图片描述
(2)配置jdk
在这里插入图片描述
(3)配置成功后效果:
在这里插入图片描述
在浏览器输入http://localhost:8080测试成功即可
4,一个servlet例子,
开发步骤。前提是需要配置好了tomcat
1.工程设置为UTF-8 (workspace),还有输入jsp 也要设置为utf-8
在这里插入图片描述
在这里插入图片描述
2.建立一个web工程
3.建立一个控制层com.bdqn.action包 在src下哦
4.在com.bdqn.action建立一个类FirstDemo.java
5.FirstDemo.java 继承 HttpServlet
javax.servlet.http.HttpServlet不要导错包了
6.重写service方法
7.WebRoot 下面的WEB-INF 下面的web.xml文件中配置 firstDemo.java 这个servlet
8.把项目部署到tomcat中
9.启动tomcat
10.浏览器访问
http://localhost:8080/FirstDemo/firstDemo.jsp
5, Servlet是怎么运行的
当用户在浏览器上输入:http://ip:port/helloweb/hello?name=zh;

  1. 连接了服务器,通过ip:port来连接的;
  2. 浏览器将请求数据按照http协议进行打包(数据包),把数据包发送给服务器,这个数据包中包含了资源路径(工程名之后的所有东西)以及包含了浏览器自动生成的一些信息;
  3. 服务器生成了两个对象:请求对象(request)和响应对象(response),服务器开始解析请求数据包,将解析的数据包里面的数据存放在请求对象中,方便servlet读取这个请求对象里的数据,注意,请求对象必须是HttpServletRequest接口的一个实现,响应对象必须是HttpServletResponse的一个实现;
  4. 通过资源路径找到相应的servlet配置,通过反射来创建了一个servlet的实例,然后进行调用servlet实例中的service方法;
  5. 在调用service方法的时候,会将之前服务器创建的那两个对象作为参数传递给servlet实例中的service方法里去,在servlet内部,可以通过request来获取各种数据,然后经过你的业务处理,将你的处理结果通过response来返回给服务器;
  6. 服务器获取到response对象中的数据之后,按照http的协议打成一个数据包再发送给浏览器;
  7. 浏览器进行解析这个数据包,取出响应,生成相应的动态页面
    在这里插入图片描述
    在这里插入图片描述
    1,由浏览器发送请求http://localhost/day04/demo01给服务器,
    2,服务器端的tomcat获得请求后,根据浏览器发送的url找到demo01,通过xml文件找到对应的类loginAction,
    3,tomcat会自动创建request和reponse对象,request对象封装请求消息数据,并将两个对象传递给service方法,并且调用service方法,
    4,在service方法中,程序员通过request对象获取请求消息数据,通过response对象设置响应消息数据。
    5,最后服务器将程序猿写好的响应消息返还给浏览器。

注:
request对象和reponse对象是由服务器创建的,我们只负责使用。
reponse对象获取请求消息,reponse对象用来设置响应消息

6,HttpRequest对象

System.out.println("servlet中request一些请求信息");
System.out.println("请求方式"+request.getMethod());//post get
System.out.println("请求资源路径URI"+request.getRequestURI());
System.out.println("请求资源URL"+request.getRequestURL());
System.out.println("请求servvlet路径"+request.getServletPath());

结果为:

servlet中request一些请求信息
请求方式GET
请求资源路径URI/SecondDemo/login.do
请求资源URLhttp://localhost:8080/SecondDemo/login.do
请求servvlet路径/login.do

常用方法
在这里插入图片描述
注:
get:
参数通过地址栏传递,默认get提交。
在这里插入图片描述
post
参数通过表单传递
在这里插入图片描述

7,HttpResponse对象
HttpResponse就是把值响映到jsp文件,就是发送到客户端,浏览器
常用方法:

8,编码格式
(1)service包含doGet,doPost两大方法,当有doGet,doPost方法存在时,不需用在写service方法。
(2)doGet,doPost两大方法与html或者JSP中<form action="/Demo01/login1.do" method="post">互相对应。当jsp中不写method时默认调用get方法。
(3)doPost乱码处理方法

// 请求处理乱码
req.setCharacterEncoding("UTF-8");
// 响应乱码处理
resp.setContentType("text/html;charset=UTF-8");

(4)doGet乱码请求处理方法

//处理请求乱码
   //获取表单传过来的值
   String name=request.getParameter("name");
   //将ISO-8859-1转换为UTF-8;
   name=new String(name.getBytes("iso-8859-1"),"utf-8");
   system.out.println("name的值是"+name);
// 响应乱码处理
resp.setContentType("text/html;charset=UTF-8");

9,Servlet实例的创建方式
方式一:继承HttpServlet这个类

class ServletTest1 extends Httpservlet{}

方式二:实现Servler接口

class ServletTest2 implements Servlet{}

注:实现接口和继承类的区别:
除了继承和实现这两者固有的区别(继承的开发效率高)之外,最重要的区别,就是HttpServlet这个类可以提供对Http协议的支持.
9.Http协议
8.1HTTP协议是什么?
HTTP(Hypertext Transport Protocal):超文本传输控制协议,是一种应用层的协议,它定义了浏览器(或者是其他程序)与web服务器之间通讯的过程与数据的格式;
8.2HTTP协议的特点?
(1)无连接:无连接的含义就是限制每次连接只处理一个请求,服务器处理完这个请求之后,马上断开连接,采用这种方式可以节省传输时间;减轻服务器压力;
(2)无状态:HTTP协议是无状态性的,即协议对事务处理没有任何记忆能力;
8.3HTTP协议的通信过程
在这里插入图片描述
10,Servlet生命周期
(1)加载和实例化
加载:调用login.do时加载
new对象
(2)初始化
init()方法,指挥执行一次
(3)服务 调用service方法
service()方法,调用多少次,执行多少次
(4)销毁
destory()方法
是tomact服务关闭才销毁。
11,Servlet中的错误和异常的处理方式

10.1 404错误
404产生的原因为Web服务器(容器)根据请求地址找不到对应资源,以下情况都会出现404的错误提示:
(1)输入的地址有误(应用名大小写不正确,名称拼写不正确)
(2)在web.xml文件中和中的两个不一致
(3)没有将工程部署到Tomcat的webapps下面

10.2 405错误
这个错误的产生原因是容器找不到service方法来处理请求。以下情况容器都将视为没有找到service()方法:
(1)service方法名写错,字母顺序不对或大小写错误
(2)service方法参数类型与标准不一致,或参数顺序与标准不一致。一定是先HttpServletRequest,然后是HttpServletResponse类型
(3)service方法异常、返回值类型与标准不一致,一定是抛出ServletException、IOException。返回值类型是void。

10.3 500错误
500的错误原因是请求的Servlet在执行service方法的过程中出现了错误,程序不能继续运行了。以下情况容器都将视为500的一种情况,而返回给客户端这个错误说明。
(1)Servlet没有继承HttpServlet或实现Servlet接口
(2)web.xml文件中的写错,与真正的包名类名不符
(3)service方法中的代码运行时抛出异常

10.4 错误代码及异常的处理方式
在Web开发过程中,有可能会出现异常以及错误代码的情况发生,如果直接让这种情况发生的话,用户体验度不好,所以我们可以在web.xml文件中引入一个的标签,在里面声明所发生的异常或者是错误代码,然后给定发生这种错误或异常的处理方式,即可;
在这里插入图片描述
注意:

<error-code>和<exception-type>这两个标签不能同时在一个<error-page>标签中存在

12,转发和重定向
转发和重定向 就是跳转到不同的url 或者是页面
12.1转发 :forward
1.转发使用的是request
2.只可以跳转到本工程中的url 或jsp html页面(意思就是不能跳转到本工程之外的url)
3.转发会自带工程名
4.转发可以携带数据
5.地址栏不会发生改变

//跳转到jsp
 request.getRequestDispatcher("/index.jsp").forward(request, response);
//跳转到forwardB类,首先在xml文件中配置好类forwardB的url为forwardB.do
  request.getRequestDispatcher("/forwardB.do").forward(request, response);

示例:
(1)定义ForwardA类
在这里插入图片描述
(2)定义ForwardB类
在这里插入图片描述
(3)配置xml信息,启动tomact,浏览器访问ForwardA的url:ForwardA.do
在这里插入图片描述
(4)在控制台打印出的信息如下:
在这里插入图片描述(5)总结:
在这里插入图片描述
12.2重定向:redirect
1.使用的是response
2.可以跳转到任意url 外部也行
3.重定向不会自带工程名(需要自己写上)
4.重定向不可以携带数据
5.地址栏会发生改变
例子:
创建 RedirctA类

public class RedirctA extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	//处理乱码
	request.setCharacterEncoding("UTF-8");
	response.setContentType("text/html;charset=utf-8");
	System.out.println("演示RedirctA开始");
	//1,封装数据
    //request.setAttribute("键", "值");
    //request.getAttribute("通过键去获取值");
	request.setAttribute("RedirctA", "RedirctA的值");
	
	//2,重定向到另一个url,需要工程名与url两部分
	response.sendRedirect("/Demo02/RedirctB.do");
    //跳转到外部工程百度
	//response.sendRedirect("http://baidu.com");
	System.out.println("演示RedirctA结束");
}
}

创建RedirctB类

public class RedirctB extends HttpServlet  {
	
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//处理乱码
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		System.out.println("演示RedirctB开始");
		//获取RedirctA中的值
		String RedirctA=(String)request.getAttribute("RedirctA");
		System.out.println("有没有值"+RedirctA);
		System.out.println("演示RedirctB结束");
	}
}

运行结果:在这里插入图片描述

13做一个登陆
前提是配置好了tomcat 编码已经设置好了
1.建立一工程
2.导入所需jar包
3.创建实体com.bdqn.entity User.java
4.创建com.bdqn.dao BaseDao UserDao
5.创建com.bdqn.dao.impl UserDaoImpl
6.创建com.bdqn.action LoginAction
7.LoginAction继承HttpServlet
8.然后重写service方法
9.配置WEB-INF下面的web.xml文件
需要把LoginAction配置在web.xml中
10.创建一个html 或jsp文件
11.部署
12.启动
13.浏览器访问

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值