Servlet

Servlet

是服务器端运行的java小程序,起到一个桥梁的作用,用于浏览器和应用程序之间进行沟通。

1. 常见的java服务器

tomcat(免费的 apache)
jetty(免费的 eclipse)
jboss (jboss)
weblogic (bea, oracle)
websphere (ibm)

java se , java ee, java me

servlet, jsp, el, 都属于java ee范畴

2. tomcat 的目录结构 (**)

bin  可执行脚本目录
conf 配置文件目录
logs 日志目录
webapps  应用程序目录

3. 启动和停止 (**)

前提条件: 1. 要安装jdk, 2. 要配置JAVA_HOME 环境变量

启动: bin/startup.bat (windows下)
停止: bin/shutdown.bat (windows下)
或者
在启动的黑窗口下 CTRL+C (停止程序,不是拷贝)

可以用浏览器检查它是否真正启动: 在浏览器地址栏输入 http://localhost:8080
http://127.0.0.1:8080
http://192.168.10.240:8080
当端口号为80时可以省略不写

4. 修改端口号

在conf/server.xml 文件中搜索8080 找到后修改为其它端口号即可

5. 在idea 里配置tomcat(**)

6. 编写第一个servlet(*

/**
 * 1. 继承 HttpServlet父类
 * 2. 使用注解 @WebServlet(urlPatterns = "浏览器访问路径")
 * 3. 覆盖父类中  service 方法
 */
@WebServlet(urlPatterns = "/hello")
public class MyServlet extends HttpServlet {

    @Override
    // Request : 代表请求
    // Response : 代表响应
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("你好,世界");
        // 用servlet可以返回一段html代码,给浏览器

        // 对于中文,需要设置响应采用utf-8字符集,否则会使用英文字符集(iso-8859-1)返回响应,会有乱码问题
        resp.setContentType("text/html;charset=utf-8");

        // 向resp对象对象的字符输出流中写入的html代码都会返回给浏览器
        resp.getWriter().println("<html><body>你好,世界</body></html>");
    }
}

7. 浏览器发送请求(*

语法:
http://ip地址:端口号/servlet地址?参数名1=参数值1&参数名2=参数值2…

?name=张三&pass=123 // name是参数名,张三是参数值, pass是参数名, 123 是参数值

服务器要获取请求参数:
String 请求参数的值 = request.getParameter(“请求参数名”);

注意:
如果某个参数没有传递,使用request.getParameter()返回的是null值
request.getParameter()返回的总是字符串,需要自己做数据类型转换

@WebServlet(urlPatterns = "/aaa")
    public class Servelet1 extends HttpServlet {

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("你好世界");
   req.setCharacterEncoding("utf-8");
    System.out.println(req.getParameter("name"));
    System.out.println(req.getParameter("password"));

   resp.setContentType("text/html;charset=utf-8");
    resp.getWriter().println("<html><body>传送成功,谢谢访问</body></html>");
}

}

7. 请求类型(*

1) get 请求 直接通过浏览器地址发送的请求
2) post 请求
表单form既可以发送get请求,也可以发送post请求
区别: 1) get请求会把所有请求参数跟在地址栏之后,不适合发送敏感信息
而post请求不会把请求参数跟在地址栏之后
2) 不要以为post请求是安全的,通过一些网络监测工具仍然可以看到post中的参数信息
http 是不安全的,都是明文发送给服务器的
https 是安全的,会把信息发送给服务器的过程中进行加密
https 和post结合可以保证向服务器传输数据的安全性
3) get请求传输的数据有限制, post请求没有限制(任意大小的数据都可以发送给服务器)
4) get 意味着获取信息(对应查询操作)
post 意味着增,改,删等操作

对于post请求,会有中文乱码问题,解决方法是调用:
// 手工进行解码, 需要放在所有 req.getParameter方法之前调用
req.setCharacterEncoding(“utf-8”);

注意: tomcat 8 已经对get请求中的中文按utf-8进行解码了, 所以程序员不需要对get请求的中文进行额外处理
tomcat 7, tomcat 6 … 对get请求中的中文还需要特殊处理

8. servlet 的生命周期

浏览器首次向此servlet发送请求时,会创建它的实例对象;以后再发送请求使用的仍然是第一次创建的对象。
结论:整个生命周期中,servlet只有一个实例(单例的)

1) 构造方法首先执行(只执行一次)
2) 初始化方法init (只执行一次)
3) 服务方法 service (反复被执行)来一次请求执行一次
4) 销毁方法 destroy (只执行一次)在服务器停止前,或重新部署时

@WebServlet(urlPatterns = "/s1")
public class Servlet1 extends HttpServlet {
   public Servlet1(){
    System.out.println("Servlet1构造方法被执行");
      } 
// servlet 中的初始化方法, 仅会被调用一次
@Override
public void init() throws ServletException {
    System.out.println("Serlvet1初始化方法被执行");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("doGet方法被执行");
    resp.getWriter().println("<html><body>hello,world</body></html>");
}

 @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("doPost方法被执行");
    resp.getWriter().println("<html><body>hello,world</body></html>");
}
 // servlet 中的销毁方法,仅会被调用一次
@Override
public void destroy() {
    System.out.println("Servlet1销毁方法被执行");
}
}

9. doGet与doPost

覆盖service方法,可以处理所有类型的请求
覆盖doGet方法,仅能处理get方式的请求
覆盖doPost方法,仅能处理post方式的请求

10. 练习,把数据库中的数据展现在页面上

一个java web项目:
|-
|-WEB-INF (受保护不能直接访问)
|-classes 放自己编写的java类
|-lib 放第三方的jar包
|-css 放样式表
|-js 放js脚本
|-jsp 放网页文件
|-index.jsp 首页面 如果没有写具体的地址,会按 index.html, index.jsp

注意:在一个项目内,多个servlet的urlPatterns不能重复,要确保唯一

使用serlvet生成html标签,代码难以维护,可读性差,容易出错。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值