javaweb一

JavaWeb就是在服务器端以Java语言为解释运行基础的web程序。

php代码要想在服务器端运行,需要在服务器软件(通常是Apache)上加php的解释器,Java也一样,但是这个解释器是TomCat。但还是有点不一样,可能与两种语言的特性有关:php是脚本语言,解释执行;而Java需要编译执行。php解释器添加到Apache上就可以了,但是只是将请求转交给Tomcat来执行并返回结果。(具体区别以后总结)

在eclipse中设置Javaweb环境

java web开发的基础:servlet

servlet是url和后台Java类的对应机制,通过web.xml配置进行中转。

 1     <servlet>
 2         <servlet-name>AServlet</servlet-name>
 3         <servlet-class>hello.AServlet</servlet-class>
 4         <init-param>
 5           <param-name>p1</param-name>
 6           <param-value>v1</param-value>
 7         </init-param>
 8         <init-param>
 9           <param-name>p2</param-name>
10           <param-value>v2</param-value>
11         </init-param>
12     </servlet>
13     <servlet-mapping>
14         <servlet-name>AServlet</servlet-name>
15         <url-pattern>/aservlet</url-pattern>
16     </servlet-mapping>

web.xml配置

 1 package hello;
 2
 3 import java.io.IOException;
 4 import java.util.Enumeration;
 5
 6 import javax.servlet.Servlet;
 7 import javax.servlet.ServletConfig;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11
12 /*Servlet是该体系的顶端接口
13  *
14  */
15 public class AServlet implements Servlet {
16
17     private ServletConfig sc;
18
19     @Override
20     /*生命周期方法:!!!初始化方法,在servlet在被tomcat创建时调用,只有一次,在执行构造函数方法之后立即被调用
21      *注意:声明周期方法是被tomcat调用,所以传入的参数是由其自动传入,而且该对象也是有tomcat创建的,
22      *    但是依据的是用户自己的web.xml配置文件
23      *
24      * 初始化方法通常用来给servlet类进行赋值
25      */
26     public void init(ServletConfig ServletConfig) throws ServletException {
27         System.out.println("init...");
28         //使用tomcat提供的SerletConfig对象获取对应配置信息
29         Enumeration<String> e=ServletConfig.getInitParameterNames();
30         while(e.hasMoreElements()){
31             String para=e.nextElement();
32             System.out.println(para+"..."+ServletConfig.getInitParameter(para));
33         }
34
35         this.sc=ServletConfig;
36         this.init();
37     }
38
39     public void init() {
40         /*!!!该方法留空,是留给子类(如果有)覆盖的,不要是覆盖生命周期方法,因为其需要对该类进行配置
41          * 这里要再次注意:Java中函数只要返回值/参数个数/参数类型 不同即使重写
42          * 该方法只要在生命周期的init方法中调用即可,由继承的特点即可工作
43          *
44          * 这也是GenericServlet类中使用的方式
45          */
46     }
47
48     @Override
49     public ServletConfig getServletConfig() {
50         System.out.println("getServletConfig...");
51         return this.sc;
52     }
53
54     @Override
55     public String getServletInfo() {
56         System.out.println("getServletInfo...");
57         return null;
58     }
59
60     /*生命周期方法:每次请求servlet都会调用,在init方法之后
61      *
62      */
63     @Override
64     public void service(ServletRequest ServletRequest, ServletResponse ServletResponse)
65             throws ServletException, IOException {
66         System.out.println("service...");
67     }
68
69     /*生命周期方法:销毁方法。注意并不是真正的删除对象,删除是垃圾回收器的任务,这里只是切断与对象的连接
70      *同样只执行一次
71      */
72     @Override
73     public void destroy() {
74         System.out.println("destroy...");
75     }
76
77 }

AServlet

使用servlet有三种途径:

1、实现javax.servlet.Servlet接口;        --》顶层接口,只是定义了几个生命周期方法和简单方法

2、 继承javax.servlet.GenericServlet类;      --》servlet接口的简单实现

3、 继承javax.servlet.http.HttpServlet类;     --》专用于http协议的GenericServlet类的实现,注意这个类是没有抽象方法的抽象类

package hello;

import java.io.IOException;

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

public class BServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        //注意这里的两个方法:doGet()和doPost()必须实现一个
        //就是使用的传输方法:get/post,就实现对应的方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("doGet...");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("doPost...");
    }
}
    、、

HttpServlet的一个简单实例

servlet细节:

1、servlet由自己写,由tomcat调用(所以tomcat是一个容器)。并且每个servlet只会生成一个类实例,即单例模式,所以有线程安全问题。线程安全的解决方法有

  1、不在servlet中创建成员,使用局部变量

  2、可以创建无状态成员。所谓状态成员也就是描述一个事物的,即类的属性。

  3、创建有状态成员,但是状态必须是只读的。也就是说可以有属性,但是只有读取的方法而没有写的方法。

2、servlet对象的创建时间:默认是在用户首次调用时创建对象,所以第一次使用时较慢;但是可以在web.xml中对应的servlet配置中配置一条

  <load-on-startup>0</load-on-startup>,只要值>=0即可在tomcat开启时自动创建。如果有多个,则按照值升序依次创建

3、在web.xml配置<url-pattern>的值可以有多个与一个<servlet-name>对应,并且可以使用*通配符。

  注意:通配符只能放在开头(匹配路径)或结尾(匹配扩展名)。

  匹配的优先级:具体的路径(/a/b.jsp)>使用通配符的路径(/a/b.*)>根路径(/,匹配所有路径)

web.xml中的默认配置有以下作用

1、servlet和JSP的关系:

 1     <servlet>
 2         <servlet-name>jsp</servlet-name>
 3         <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
 4         <init-param>
 5             <param-name>fork</param-name>
 6             <param-value>false</param-value>
 7         </init-param>
 8         <init-param>
 9             <param-name>xpoweredBy</param-name>
10             <param-value>false</param-value>
11         </init-param>
12         <load-on-startup>3</load-on-startup>
13     </servlet>
14
15     <servlet-mapping>
16         <servlet-name>jsp</servlet-name>
17         <url-pattern>*.jsp</url-pattern>
18         <url-pattern>*.jspx</url-pattern>
19     </servlet-mapping>

web.xml中的配置

由配置信息可知:所有以JSP结尾的文件都会转交到org.apache.jasper.servlet.JspServlet这个类中进行处理

2、访问一个不存在的路径时显示404页面

 1     <servlet>
 2         <servlet-name>default</servlet-name>
 3         <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
 4         <init-param>
 5             <param-name>debug</param-name>
 6             <param-value>0</param-value>
 7         </init-param>
 8         <init-param>
 9             <param-name>listings</param-name>
10             <param-value>false</param-value>
11         </init-param>
12         <load-on-startup>1</load-on-startup>
13     </servlet>
14
15     <servlet-mapping>
16         <servlet-name>default</servlet-name>
17         <url-pattern>/</url-pattern>
18     </servlet-mapping>

web.xml中的配置

由配置信息可知:所有没有其他servlet接收的路径(即无效不存在的路径)都会被转到org.apache.catalina.servlets.DefaultServlet中去处理,就是显示404页面

3、配置session,以后使用

1     <session-config>
2         <session-timeout>30</session-timeout>
3     </session-config>

web.xml中的配置

servlet是通过配置文件,使用反射技术产生对象实例的

 1 package hello;
 2
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.util.Set;
 8
 9 import javax.servlet.ServletContext;
10 import javax.servlet.ServletException;
11 import javax.servlet.annotation.WebServlet;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15
16 /**
17  * Servlet implementation class CServlet
18  */
19 @WebServlet("/CServlet")
20 public class CServlet extends HttpServlet {
21     private static final long serialVersionUID = 1L;
22
23     /**
24      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
25      */
26     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
27         //获取Servlet公共配置参数示例
28         getInitPara();
29         //获取该项目下的资源
30         getPath();
31         //获取该项目的类资源
32         getClassPath1();
33         getClassPath2();
34     }
35
36     private void getInitPara() {
37         /*Servlet除了可以使用自己局部的参数,还可以使用公共的配置参数,即<context-para>中的配置参数
38          * 必须通过ServletContext对象的方法来获取
39          */
40         ServletContext app=this.getServletContext();
41         String context_value=app.getInitParameter("context-para");
42         System.out.println(context_value);
43     }
44
45     private void getPath() {
46         //获取该项目中指定资源的真实路径,带盘符
47         String realPath=this.getServletContext().getRealPath("/index.jsp");
48         //D:\Java\tomcat\apache-tomcat-7.0.42\me-webapps\hello\index.jsp
49         System.out.println(realPath);
50
51         //还可以进一步获取流对象
52         //InputStream is=this.getServletContext().getResourceAsStream("/index.jsp");
53
54         //还可以获取一个路径下的所有资源路径,注意只是浅获取,即只获取该目录下而不向下获取,用Set集合保存
55         Set<String> set=this.getServletContext().getResourcePaths("/WEB-INF");
56         System.out.println(set);
57     }
58
59     private void getClassPath1() throws IOException {
60         //获取类路径下资源,通过ClassLoader对象,在获取该资源的输入流对象就可以读取资源(文件)的内容了
61         ClassLoader cl=this.getClass().getClassLoader();
62         //注意:使用ClassLoader对象时,这里的路径是相对于 /项目/WEB-INF/classes ,也就是编辑器中的 /src
63         InputStream is=cl.getResourceAsStream("/a.txt");
64         BufferedReader br=new BufferedReader(new InputStreamReader(is));
65         String line="";
66         while((line=br.readLine())!=null){
67             System.out.println(line);
68         }
69     }
70
71     private void getClassPath2() throws IOException {
72         //获取类路径下资源,通过Class对象,在获取该资源的输入流对象就可以读取资源(文件)的内容了
73         Class<? extends CServlet> c=this.getClass();
74         /*注意:使用Class对象时,
75          * 如果路径以 / 开头,则相对 /项目/WEB-INF/classes ,也就是编辑器中的 /src
76          * 如果不以     / 开头,则相对于当前servlet路径
77          */
78         InputStream is=c.getResourceAsStream("a.txt");
79         is=c.getResourceAsStream("/../../index.jsp");
80         BufferedReader br=new BufferedReader(new InputStreamReader(is));
81         String line="";
82         while((line=br.readLine())!=null){
83             System.out.println(line);
84         }
85     }
86
87 }

servlet的一些应用

负责处理http的请求和响应对象

时间: 2024-10-18 00:28:19

javaweb一的相关文章

第一个远程javaweb项目测试全过程

2017-5-20,在这个奇特的日子,我不再满足于在本地测试javaweb,于是在上腾讯云买了第一个云服务器,由于是学生认证,所以一个月只要10块钱,还是要抢的,每天早上9点开抢 打开后,发现其实是一个云主机,就是远程主机,只不过他可以给你一个公网ID,就是在浏览器输入公网ID的话,全国所有人都可以访问你的项目 关于怎么把自己的javaweb项目放到云主机,有一个教程http://www.cnblogs.com/diyunfei/p/6826557.html,前提是得先在云主机下载配置jkd,t

Javaweb程序服务器部署

话说从接触web后就想着写一个自己的站点然后别人都可以访问,这也是一个小目标吧,从之前在使用校园网的时候把自己的电脑当成服务器然后部署使用同学的电脑访问,现在想让所有人都可以访问,于是就花重金租了腾讯的云服务器,至于怎么租腾讯的云服务器就不赘述了,其实还有阿里的可以选择. 在租服务器的时候选的系统是centos7,之前使用过ubuntu只是听说服务器的系统一般都选centos就选了,后来查了一些centos的资料后来好多都是在使用的时候查的. 首先我自己安装的是java环境 在官网下在相应的rp

javaWeb基础知识----Cookie,Session

?HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的,浏览器的每一次请求都是完全孤立的 ?即使 HTTP1.1支持持续连接,但当用户有一段时间没有提交请求,连接也会关闭. ?怎么才能实现网上商店中的购物车呢:某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息. ?作为 web 服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态 1.会话和会话状态 ?WEB应用中的会

JavaWeb:EL表达式

JavaWeb:EL表达式 EL表达式说明 1.Expression Language语言,一种用于JSP文件中的数据访问的语言. 2.能够简化JSP文件中该数据访问的代码,可用来替代传统的基于<%= %>和部分<% %>的程序片段. 3.EL表达式使得JSP文件的创建人员能够用更加简单的语法来访问数据. 4.基本形式为: ${var} EL运算符 (来自孤傲苍狼) 1.关系运算符 2.逻辑运算符: 3.empty运算符:检查对象是否为null(空) 4.二元表达式:${user!

javaweb学习之Servlet开发(二)

javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletConfigDemo1</servlet-name> 3 <servlet-class>gacl.servlet

javaweb学习总结(四十五)——监听器(Listener)学习二

一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换

Javaweb学习笔记4—Reuest&amp;Response

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍 今天来讲javaweb的第四段学习. Request和Response还是比较重要的 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 响应对象 1,Response响应: 常用响应对象:ServletResponse HttpServletResp

Javaweb学习笔记5—Cookie&amp;Session

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍  今天来讲javaweb的第五阶段学习. Cookie和Session同样是web开发常用到的地方. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 一.会话管理技术概述 1 什么是会话? 这里的会话指的是web开发中的一次通话过程,当打开浏览

Javaweb学习笔记6—EL表达式与JSTL及自定义标签

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍 今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 一.EL表达式 1,EL简介 Expression Lan

JavaWeb网站技术架构

JavaWeb网站技术架构总结 题记 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充(附带架构装逼词汇). 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的,当然对于我们开发人员来说,一个好的架构也不是一蹴而就的. 初始搭建 开始的开始,就是各种框架一搭,然后扔到Tomcat容器中跑就是了,这时候我们的文件,数据库,应用都在一个服务器上. 服务分离 随着系统的