Servlet入门

新建maven 有错误提示

(1)点击Deployment Descriptor:servlet,然后点击Generate

Deployment Descriptor Stub

2)配置环境变量:选择项目,右键properties

弹出框里选择Targeted Runtimes

在右侧勾选Apache Tomcat

Apply

 

 

Tomcat配置2、点击菜单栏的“Window”,然后选择“Preferences”。
3、点击弹出窗口的“Server”,然后选择“Runtime Environment”,然后点击右边的“Add”按钮。
4、选择弹出窗口上的“Apache”,然后选择Tomcat版本,然后单击“Next”。
5、选择Tomcat的安装根目录,点击“Finish”即可。

打开Services窗口,如果已经打开了,就不用打开,如果没有就Window -> Show View -> Servers

然后可以看到你配置的tomcat , 双击Tomcate Service  
会出来一个Tomcate配置的视图 , 
Service Location 下面选择User Tomcate installacion(默认选择的是第一个)
然后Save path 选择你的tomcat安装路径 , Deploy path选择你准备把项目放到哪个文件夹下最好为webapps

 

如果双击后,发现service location无法配置,需要移除与Tomcat服务器关联的项目,同时,鼠标右键菜单Clean清除Tomcat服务器的状态^^就可以修改了。

 

然后crlt + s 保存 。重新部署就Ok了

 

Servlet开发

静态网页

动态网页

servlet:服务器保存一个组件,动态给每一个用户拼一个网页

java里面称之为servlet

servlet特点:

服务器端组件

满足Sun的规范

可以动态拼资源

servletSun推出的用于服务器端处理http协议的组件

服务器

java服务器

web服务器

java web服务器

servlet容器

Tomcat()

Jboss

weblogic

websphere

开发servlet

1)编写servlet

 (2)创建package

3)创建 类,名为XXXServlet

4)继承HttpServlet,从而间接实现了servlet接口

重写父类的service()

Web.xml下:

配置Servlet

先声明类,并给他取别名

再通过别名引用此类,给他取一个访问路径

部署(拷贝)

Servers视图下,选择Tomcat 右键点击Add and Remove

在弹出框内将左边的待部署的项目选中

访问:

在浏览器输入http://localhost:8080/项目名/网名

常见错误:

404:找不到资源,一般情况路径不对

500:类名有误,Service()方法内的代码自身有误

405:方法声明有误

http协议:就是一个规范(W3C)

规定了浏览器和服务器如何通信以及通信的规则(数据格式)

如何通信

1)建立连接

2)发送请求

3)接受响应

4)断开连接

一次请求一次连接,减低服务器的压力

数据格式

1)请求数据

请求行:请求的基本信息

消息头:请求数据的描述

实体内容:具体的业务数据

2)响应数据

状态行:响应的基本信息

消息头:响应数据的描述

实体内容:具体返回的数据

对开发者的要求

1)不需要开发者处理的地方

浏览器自动打包请求数据

浏览器自动发送请求数据

服务器自动打包响应数据

服务器自动发送响应数据

2)需要开发者处理的地方

提供具体的请求中的业务数据

提供具体的响应中的返回数据

通过request处理请求数据,通过response处理响应数据

开发者会使用request和response的使用

1,完整路径:http://localhost:8080/servlet2/reg

2,绝对路径:

格式:/项目名/网名

实例:/servlet/reg

3,相对路径(要求掌握)

只需写出目标和当前页面的相对位置

当前页面的路径:/servlet2/register.html

访问目标:/servlet2/reg

二者是平级关系,相对路径为reg

注意:相对路径不能以“/”开头

请求方式:浏览器向服务器发送数据的方式

需要掌握众多方式中的两种:GET和POST

GET:采用请求路径传参数:

参数在传输过程中可见,导致隐私差

路径可以容纳的数据有限

所有的请求默认都是GET请求

POST:采用实体内容传参

参数在传递过程中不可见,隐私性好

实体内容专门用来传数据,大小没有限制

form上加method="post"默认是GET请求的

观察GET和POST请求

在浏览器f12,看NetWork选项

返回乱码问题解决:

1:get/post

将乱码后的字符串按照ISO编码还原成byte,

再将byte按照UTF-8编码转换为字符串

优点:万能                  缺点:麻烦

2:get有效

修改Tomcat配置文件(servlet.xml)第65行加上

URIEncoding="utf-8"

3:post有效

再接受参数之前加上

req.setCharaterEncoding("utf-8")

声明实体内容的编码为utf-8

实体类(entity,po,vo...)

javaBean

满足如下规范的类

1)在包下

2)有默认构造器

3)实现序列化接口

4)有get/set方法(可选)

当前是查询页面:/EmpManager/findEmp

目标是增加页面:/EmpManager/add_emp.html

相对路径是:add_emp.html

重定向:

1:经典使用场景:解决两个网站之间的跳转问题

2:后来也用来一个网站内2个独立组件之间的跳转

一般增加,修改,删除后重定向到查询

两个独立组件之间不要直接调用,为了降低耦合度

源代码(workspace)

EmpManager

 src

   main

    java

resource

webapp

 WEB-INF

 web.xml

test

   target

    classes

    test-classes

   保存时,自动编译

   

   部署代码(Tomcat

   

   

   

 

所谓的访问路径都是针对部署代码而言

1:静态资源(HTML/IMG/CSS/JS等)就是在Tomcat内存放的位置

2:动态资源(Servlet

访问路径就是web.xml中声明的网名

建议:将访问路径理解为一个资源的名字(兰州拉面不一定只有兰州有)

 

 

System.out.println(req.getContextPath());

System.out.println(req.getServletPath());

System.out.println(req.getRequestURI());

System.out.println(req.getRequestURL());

输出:

/servlet3

/abc

/servlet3/abc

http://localhost:8080/servlet3/abc

 

URI和URL区别

(1)狭义的理解

只在java中理解URI和URL

URI:绝对路径

URL:完整路径

从表面上看URI包含了URL

(2)广义的理解

在任意的WEB项目中理解URI和URL

URI:资源的名称

URL:资源的真名

URI包含了URL

 

如何配置Servlet访问路径

(1)精确匹配

举例:/abc

只有/abc才能访问此Servlet

Servlet只能处理这一个请求

适合规模很小的项目

 

(2)通配符

举例:/*
所有路径都能访问此Servlet

Servlet能处理所有的请求

适合一个项目只写一个Servlet

 

(3)后缀

注意:不能以斜线开头

举例:*.XX

表示所有以XX为后缀的请求都能访问此Servlet

Servlet能处理多个请求
适合一个项目写少量的几个Servlet

 

 

public class MainServlet extends HttpServlet {

 

@Override

protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

//获取请求路径:

String path=req.getServletPath();

//根据规范处理路径

if("/findEmp.do".equals(path)){

findEmp(req, res);

}else if ("/addEmp.do".equals(path)) {

addEmp(req, res);

}else {

throw new RuntimeException("查无此页");//该异常抛给服务器,服务器统一处理

}

}

protected void findEmp(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

//1.接收参数(没有)

//2.处理业务(查询)

EmpDao dao=new EmpDaoImpl();

List<Emp> list=dao.findAll();

//3.输出响应(表格)

res.setContentType("text/html;charset=utf-8");

PrintWriter out=res.getWriter();

out.println("<a href='add_emp.html'>增加</a>");

//为了格式,方便检查

out.println("<table border='1' cellspacing='0' width='40%'>");

out.println("<tr>");

out.println("<td>编号</td>");

out.println("<td>姓名</td>");

out.println("<td>月薪</td>");

out.println("<td>职位</td>");

out.println("</tr>");

if(list!=null){

for (Emp e : list) {

out.println("<tr>");

out.println("<td>"+e.getEmpno()+"</td>");

out.println("<td>"+e.getEname()+"</td>");

out.println("<td>"+e.getJob()+"</td>");

out.println("<td>"+e.getSal()+"</td>");

out.println("</tr>");

}

}

out.println("</table>");

out.close();

}

protected void addEmp(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

String ename=req.getParameter("ename");

String job=req.getParameter("job");

String sal=req.getParameter("sal");

Emp e=new Emp();

e.setEname(sal);

if(sal!=null&&sal.equals(sal)){

e.setSal(new Double(sal));

}

e.setEname(ename);

if(ename!=null){

e.setEname(ename);

}

e.setJob(job);

if(job!=null){

e.setJob(job);

}

//重定向访问的目标:/EmpManager/findEmp

res.sendRedirect("findEmp.do");//相对路径

}

}

 

 

Servlet特性:

 

(1):默认首次访问servletTomcat会实例化它

(2)可以改为启动Tomcat时就实例化servlet(在web.xml中添加<load-on-startup>1</load-on-startup>,中间数字是加载的顺序

(3)1,2,4步只执行一次,所以servlet是单例的

(4)3步执行多次,每个处理请求都执行

(5)意义:当需要规定在什么时刻做什么处理时,开发者知道在哪个方法内写代码

(6)

 

 

重写父类方法,super.XX一般别删,但是重写service需要删除

 

 

ServletConfigServletContext

 

 

作用:

 

区别:

(1)config:与Servlet11的关系,Tomcat在初始化每个Servlet前会给他创建一个config,在调用init()前创建一个config,如果单独给某个servlet预置数据,使用config

 

(2)Context:与Servlet1n的关系,Tomcat在启动时创建唯一的context,多个servlet共用一份预置数据

 

应用:

(1)Config

假设要开发一个网页游戏

当用户数超出最大在线人数时需要排队

登录时判断是否已达到最大人数

登录:LoginServlet

最大人数:maxOnline(可变),可以配置,maxOnline只给LoginServlet使用

Web.xml下:

<init-param>

  <!-- 给此Servlet预置参数 -->

  <param-name>maxOnline</param-name>

  <param-value>3000</param-value>

  </init-param>

 


2context

软件内有很多查询功能,都带有分页功能

每页显示的行数size时常量,并且可配置,而且在多个查询功能之间所共用


<!-- 在标签外配置的参数是个所有Servlet共用的,他们都可以通过context读取该参数 -->

  <context-param>

  <param-name>size</param-name>

  <param-value>20</param-value>

  </context-param>

 

/*

 * tomcat启动时就会创建唯一的context

 * 并且会调用他的方法加载web.xml 中的公共参数

 * context时全局的,任何servlet都可以使用

 * */

 

 

 

//Tomcat创建servlet的逻辑:

//LoginServlet s=new LoginServlet();

//ServletConfig c=new ServletConfig();

//s.init(c)

 

 

 Context的特殊用法

前提:之前使用configcontext读取的都是常量

context还有能力读写变量,可以被所有Servlet所共用

setAttribute()/getAttribute

 

想开发流量统计的功能,无论访问哪个功能,流量+1

由于流量是变量,并且在多功能间调用

 

 

 

 

总结:当需要给servlet预置参数时使用这样的对象

若参数只给一个servlet使用,使用config

若参数给多个servlet使用时,使用context

 

 

蓝色:接口 红色:类

 

 

 

 

快捷键ctr+T查看所选中的类

快捷键ctr+shift+t 查找类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值