【JavaWeb】 Servlet与Tomcat服务器

目录

一. 基本概念

1. Servlet

2. Tomcat

二. Tomcat运行过程

三. 环境配置

1. Tomcat服务文件

2. 手动配置

2.1 编写Java Servlet类

2.2 编写html页面

2.3 编译check类

2.4 在tomcat下组建web项目

2.5 配置web.xml

2.6 结果展示

3. eclipse自动搭建

3.1 环境导入Tomcat

3.2 项目导入tomcat编译环境

3.3 运行服务

3.4 项目结构说明

四. Servlet基础

1. Request对象

2. Response对象

3. 页面中文乱码处理

4. Servlet页面转发与重定向

5. Session会话与Cookie存储

5.1 Session基础

5.2 Cookie基础


一. 基本概念

1. Servlet

        Servlet实质上是一个Java类,是一种运行在支持Java应用服务器上的Web组件,它与普通Java类的区别在于它是一个专门处理请求和响应的Java类。其主要功能是:接受前端用户的请求,调用后端的逻辑处理程序,最终给客户返回响应。HttpServlet是Servlet API的核心类,其自定义的Servlet都是该类的子类。

        那么这里为什么要引入Servlet呢?主要是因为HTML+JS的静态页面非常局限,不能灵活的处理页面和请求响应,所以引入Servlet + HTML来进行动态页面处理。

2. Tomcat

        Servlet是一种特殊的java类,必须在服务器容器里面生存与工作。Tomcat就是这样一种服务器容器,它给Servlet提供生存环境(servlet必须在容器里启动),同时将Web请求封装成对象交给Setvlet处理,将Servlet响应封装成对象,然后返回给Web显示。

二. Tomcat运行过程

三. 环境配置

1. Tomcat服务文件

(1)你发布的项目文件必须放在webapp目录下才能被Tomcat扫描到;

(2)有关的servlet类放置到classes文件夹下;

bin

包含启动/关闭脚本

conf

包含不同的配置文件,包括 server.xml(Tomcat的主要配置文件)和为不同的Tomcat配置的web应用设置缺省值的文件web.xml

lib

包含Tomcat使用的jar文件.unix平台此目录下的任何文件都被加到Tomcat的classpath中

logs

存放Tomcat的日志文件

webapp

包含web项目示例,当发布web应用时,默认情况下把web文件夹放于此目录下

work

Tomcat自动生成,放置Tomcat运行时的临时文件(如编译后的JSP文件).如在Tomcat运行时删除此目录.JSP页面将不能运行.[ jsp生成的sevlet放在此目录下]

classes

你可以创建此目录来添加一些附加的类到类路径中.任何你加到此目录中的类都可在Tomcat的类路径中找到自身.

2. 手动配置

2.1 编写Java Servlet类

        该类主要用来处理请求和响应,且Servlet类必须有包名。

package characpter10;

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

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Hello extends HttpServlet {

	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
	}
        public void service(HttpServletRequestrequest,HttpServletResponse response)throws IOException,ServletException {
		response.setContentType("text/html;charset=GB2312");//设置响应编码方式
		PrintWriter out = response.getWriter();//用于输出html页面
		String name = request.getParameter("name");
		out.println("<html><body>");
		if(name==null) {
			out.print("你需要输入名字!");
		}
		else if(name.equals("Krito")) {
			out.print("<h2>您好,欢迎 " + name + " 老师");
			out.println("</h2>");
		}
		else {
			out.print("<h2>您好,欢迎 " + name + " 同学");
			out.println("</h2>");
		}
		out.println("</body></html>");
	}


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2.2 编写html页面

<html>
<head>
<title>test</title>
</head>

<body>
<form action="check" method="post">
<INPUT type="text" NAME="name" size="20">(*用户名)<br>
<INPUT type="submit" NAME="button" value="提交">
</form>
</body>

</html>

2.3 编译check类

        我们需要的就是可以直接工作的.class文件。由于servlet类的编译文件是由tomcat提供的,所以需要用tomcat的 servlet-api.jar 文件来编译,其cmd编译命令如下: 

javac -cp servlet-api.jar check.java

        其编译结果如下:

2.4 在tomcat下组建web项目

(1)WebProject

(2)WEB-INF

WEB-INF是Java的WEB应用的安全目录,客户端无法访问,只能通过服务端访问,从而实现了代码的安全。在WEB-INF中主要是系统运行的配置信息和环境,主要有classes、config、lib文件夹和web.xml。

  • classes文件夹:包含了站点所有用的 class 文件,包括 servlet class 和非servlet class;
  • lib文件夹:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件;
  • web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。让Tomcat认识servlet的名字,路径;

其中classes-characpter10:

2.5 配置web.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">
  <servlet>//声明servlet名字以及类
     <servlet-name>check</servlet-name>
     <servlet-class>characpter10.check</servlet-class>
  </servlet>
  <servlet-mapping>//声明相应servlet的url路径
     <servlet-name>check</servlet-name>
     <url-pattern>/check</url-pattern>
  </servlet-mapping>

</web-app>

2.6 结果展示

3. eclipse自动搭建

3.1 环境导入Tomcat

Windows--Preference--Server--Runtime Environments--Add--Tomcat 7.0

3.2 项目导入tomcat编译环境

(1)创建时导入可编译

(2)创建完后导入tomcat编译环境

        右键项目--Build Path--Configure Build Path... --Libraries--Add Library--Server Runtime--tomcat 7.0--Apply--添加完成

3.3 运行服务

run on server

3.4 项目结构说明

(1)src文件:存放所有的.java,图片等其他资源文件。

(2)WebContent:存放所有的html,jsp文件。

(3)WEB-INF:存放web.xml以及.class文件,其内部的文件是不能通过客户端访问的。

四. Servlet基础

1. Request对象

(1)String getParameter:获取客户以GET方式发送的参数或者以POST方式提交的form表单的控件值。 例:String ans = request.getParameter("name");

(2)String[]  getParameterValues:如果有多个同名的控件或参数,则该方法可以获得对应的多个参数值,并且放到一个String数组里,如复选框集(checkbox)。例:String []s = request.getParameterValues("name");

(3)String getMethod():获取请求方式(GET or POST);

(4)Object getAttribute():获取setAttribute()设置的参数对象;

        request.getParameter和request.getAttribute的区别如下:

(1)方法:有setAttribute()方法,而没有setParameter()方法

(2)取值:getParameter取得通过类似post,get,或者url等方式传入的数据,由客户端传入服务器端。而getAttribute中,转发目标组件通过getAttribute()方法来和转发源组件共享request范围内的数据。

2. Response对象

(1)setContentType

        在给调用者发回响应前,必须用该方法来设置HTTP响应的MIME类型。通常设置为:response.setContentType(“text/html,charset=utf-8”);但是注意MIME映射策略就是在网页中使用哪个应用程序(即插件),打开哪种文件。

(2)getWriter

        返回PrintWriter对象,把Servlet的结果作为文本返回给调用者。PrintWriter对象自动把Java内部的Unicode编码字符转换成正确的编码以使客户端能够阅读。

PrinterWriter out = response.getWriter();

out.print()/println();//输出至MIME

3. 页面中文乱码处理

(1)请求中包含中文

//GET方式提交的请求:
String name = new String(request.getParameter("name") .getBytes("ISO-8859-1"), "utf-8");

//POST方式提交的请求 :
request.setCharacterEncoding("utf-8");

(2)响应页面中包含中文

//1.
response.setCharacterEncoding("utf-8"); 
//2.
response.setContentType(“text/html,charset=utf-8”)

4. Servlet页面转发与重定向

(1)页面重定向

        结束本次用户的请求,发送新的请求给下一个页面,因为此时的请求和用户最初的请求已经不属同一请求了。重定向后在地址栏里最终显示的也是重定向以后页面的URL(浏览器URL变化)。

 response.sendRedirect(url)

(2)页面转发

        继续把当前的请求对象传递给转发后的页面,因此前后可以共用同一个请求对象(共享请求数据,如查询字符串)。转发后在地址栏里最终显示的是转发前页面的URL(浏览器URL无变化)。  

 request.getRequestDispatcher(url).forward (request,response)

5. Session会话与Cookie存储

5.1 Session基础

(1)session对象

        客户端与服务器的一次会话,从客户访问服务器的一个Web应用开始,直到客户端与服务器断开连接为止。session对象存在于服务器的内存中。 session是javax.servlet.http.HttpSession的实例 。

HttpSession session = request.getSession();//来获取一个请求所属的会话。

        session对象可用来存储用户的信息,这些信息可以在不同页面被传递。

(2)常用方法

public void setAttribute(String name, Object value);
//该方法使用指定的名称绑定一个对象到该 session 会话。
String use = (String)session.getAttribute("username");
//String use = session.getAttribute("username").toString();
public void invalidate();
//该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
public void setMaxInactiveInterval(int interval);
//该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

5.2 Cookie基础

(1)Cookie概念

        当用户浏览某网站时,网站服务器存储到客户机上的一个小文本信息,它可以记录用户的会话ID以及登录名、密码等信息,当用户再次来到该网站时,网站通过读取该用户的Cookie,便可以得知用户曾经访问该网站的相关信息。Cookie 的作用就是用于解决 "如何记录客户端的用户信息";

(2)常用方法

Cookie以“名-值”对的形式保存数据。

Cookie[] cookies = request.getCookies();
//获取Cookie数组
for (int i = 0; i < cookies.length; i++) {
        out.println("cookie name:" + cookies[i].getName());
        out.println("cookie value:" +cookies[i].getValue());
    }
//遍历Cookie数组
public void setValue(String newValue);
//该方法设置与 cookie 关联的值。
public void setMaxAge(int expiry);
//该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
 Cookie c = new Cookie("my_cookie_create_date",new Date().toString());
 response.addCookie(c);
//创建添加Cookie
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿阿阿安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值