Java Web部分

Java Web部分

1、Tomcat的优化经验?

答:去掉对web.xml的监视,把JSP提前编辑成Servlet。

有富余物理内存的情况,加大tomcat使用的JVM的内存

2、HTTP请求的get与post方式的区别?

答: get:是以实体的方式得到由请求URL所指定资源的信息,如果请求URL只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。

post:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URL所指定资源的附加新子项,post被设计成用统一的方法实现下列功能:

1:对现有资源的解释

2:向电子公告栏、新闻组、邮件列表或类似讨论组发信息。

3:提交数据块

4:通过附加操作来扩展数据库

从上面描述可以看出,get是向服务器索取数据的一种请求;而post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。

4、说一说Servlet的生命周期?

答:Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

Web容器加载Servlet,生命周期开始。通过调用Servlet的init()方法进行Servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的doXXX()方法。结束服务,Web容器调用Servlet的destroy()方法。

5、Servlet的基本架构?

public class ServletName extends HttpServlet{
Public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
}
Public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException IOException{
}
}

6、Servlet API中forward()与redirect()的区别?

答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

7、什么情况下调用doGet()和doPost()?

JSP页面中的form标签里的method属性为get时调用doGet(),为post时调用dopost()。

8、Request对象的主要方法:

setAttribute(String name,Object):设置名字为name的request的参数值

getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式

getContentLength():返回请求的Body的长度

getHeader(String name):获得HTTP协议定义的文件头信息

getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例

getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例

getInputStream():返回请求的输入流,用于获得请求中的数据

getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParametervalues(String name):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString():获得查询字符串

getRequestURL():获取发出请求字符串的客户端地址

getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session

getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性

9、forward和redirect的区别?

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

10、request.getAttribute() 和 request.getParameter() 有何区别?

1、getAttribute 必须先setAttribute,request.setAttribute() 和 getAttribute() 方法传递的数据只会存在于Web容器内部。

2、request.getParameter() 是用来接受用post或get方法传递过来的参数的,取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在Web容器内部流转,仅仅是请求处理阶段。方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。

3、还有一点就是,HttpServletRequest 类有 setAttribute() 方法,而没有setParameter() 方法。

11. JSP有哪些内置对象?作用分别是什么? 分别有什么方法? 

答:JSP共有以下9个内置的对象:

request 用户端请求,此请求会包含来自get/post请求的参数

response 网页传回用户端的回应

pageContext 网页的属性是在这里管理

session 与请求有关的会话期

application Servlet 正在执行的内容

out 用来传送回应的输出

config Servlet的构架部件

page JSP网页本身

exception 针对错误网页,未捕捉的例外

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header和session数据的有用的方法。

response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)

out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、Servlet相关的对象的API,并且包装了通用的Servlet相关功能的方法。

session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息

applicaton 表示一个Javax.servle.ServletContext对象。这有助于查找有关Servlet引擎和Servlet环境的信息

config表示一个javax.servlet.ServletConfig对象。该对象用于存取Servlet实例的初始化参数。

page表示从该页面产生的一个Servlet实例

12. JSP有哪些动作?作用分别是什么?

答:JSP共有以下6种基本动作

jsp:include:在页面被请求的时候引入一个文件。

jsp:useBean:寻找或者实例化一个JavaBean。

jsp:setProperty:设置JavaBean的属性。

jsp:getProperty:输出某个JavaBean的属性。

jsp:forward:把请求转到一个新的页面。

jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

13、JSP的常用指令 

isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)

14. JSP中动态include与静态include的区别?

答:动态include用jsp:include动作实现

<jsp:include page=included.jsp flush=true />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数;静态include用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file=included.htm %>

15、两种跳转方式分别是什么?有什么区别? 

(下面的回答严重错误,应该是想问forward和sendRedirect 的区别,毕竟出题的人不是专业搞文字艺术的人,可能表达能力并不见得很强,用词不一定精准,加之其自身的技术面也可能存在一些问题,不一定真正将他的意思表达清楚了,严格意思上来讲,一些题目可能根本就无人能答,所以,答题时要掌握主动,只要把自己知道的表达清楚就够了,而不要去推敲原始题目的具体含义是什么,不要一味想着是在答题)

答:有两种,分别为:

<jsp:include page=included.jsp flush=true>

<jsp:forward page= nextpage.jsp/>

前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。

16、页面间对象传递的方法

request,session,application,cookie等

17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类Servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

18、MVC的各个部分都有那些技术来实现?如何实现? 

答:MVC是Model-View-Controller的简写。Model 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), View 是应用的表示面(由JSP页面产生),Controller 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

19、我们在Web应用开发过程中经常遇到输出某种编码的字符,如ISO8859-1等,如何输出一个某种编码的字符串? 

 Public String translate (String str) {
   String tempStr = "";
   try {
     tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
     tempStr = tempStr.trim();
   }
   catch (Exception e) {
     System.err.println(e.getMessage());
   }
   return tempStr;
 } 

20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset

package com.tfj.demo;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class WindowTextArea extends JFrame implements ActionListener {
    JButton button, button2;
    JMenuBar menubar;
    JMenu menu;
    JMenuItem item1, item2;
    JTextArea text1, text2;
    boolean boo = true;
    JPanel p;
    JLabel j;

    public WindowTextArea(String s) {
        super(s);
        button = new JButton("排列");
        button2 = new JButton("重置");
        item1 = new JMenuItem("升序");
        item2 = new JMenuItem("降序");
        menu = new JMenu("排列顺序");
        j = new JLabel("");
        menu.add(item1);
        menu.add(item2);
        menubar = new JMenuBar();
        menubar.add(menu);
        setJMenuBar(menubar);
        p = new JPanel();
        p.add(button);
        p.add(button2);
        add(p, BorderLayout.SOUTH);
        item1.addActionListener(this);
        item2.addActionListener(this);
        button.addActionListener(this);
        button2.addActionListener(this);
        setLayout(new FlowLayout());
        text1 = new JTextArea(10, 10);
        text2 = new JTextArea(10, 10);
        add(new JScrollPane(text1));
        add(new JScrollPane(text2));
        p.add(j);
        text1.setLineWrap(true);
        text1.setWrapStyleWord(true);
        text2.setEditable(false);
        setBounds(400, 200, 200, 500);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == item1) {
            j.setText("升序");
            boo = true;
            text1.setText(null);
            text2.setText(null);
        } else if (e.getSource() == item2) {
            j.setText("降序");
            boo = false;
            text1.setText(null);
            text2.setText(null);
        } else if (e.getSource() == button2) {
            text1.setText(null);
            text2.setText(null);
        } else {
            String s = text1.getText();
            StringTokenizer fenxi = new StringTokenizer(s, ",");
            int n = fenxi.countTokens();
            int[] a = new int[n];
            for (int i = 0; i <= n - 1; i++) {
                try {
                    a[i] = Integer.parseInt(fenxi.nextToken());// 如果这里的出来的不是整数则捕获异常
                } catch (Exception ee) {
                    JOptionPane.showMessageDialog(this, "请输入数字字符", "警告",
                            JOptionPane.WARNING_MESSAGE);
                    text1.setText(null);
                }
            }
            Arrays.sort(a); // 按字典从小到大排序
            text2.setText(null);
            if (boo) {
                for (int i = 0; i < n; i++) {
                    text2.append(a[i] + "\n");
                }
            } else {
                for (int i = n - 1; i >= 0; i--) {
                    text2.append(a[i] + "\n");
                }
            }
        }
    }

    public static void main(String[] args) {
        new WindowTextArea("测试程序");
    }
}

21、session和cookie的区别

session是存储在服务器端,cookie是存储在客户端的,所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。又由于session是存放在服务器的内存中,所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,会话cookie确切的说是存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session会不会丢失,从上面叙述分析session的信息是通过sessionid获取的,而sessionid是存放在会话cookie当中的,当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在。那么,session在什么情况下丢失,就是在服务器关闭的时候,或者是sessio过期,再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,然后session在什么时候被创建呢,确切的说是通过调用session.getsession来创建,这就是session与cookie的区别

22、解析XML文件的几种技术

1、 解析XML的几种技术

1.dom4j

2.SAX

3.JAXB

4.JDOM

5.DOM

1.dom4j

dom4j是一个Java的XML API,类似于JDOm,用来读写XML文件的。dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。

2.SAX

SAX(Simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。

3.JAXB

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

2、dom4j与 SAX 之间的对比:[注:必须掌握!]

dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,

SAX是基于事件来对XML进行解析的,所以他可以解析大文件的XML,也正是因为如此,所以dom4j可以对XML进行灵活的增删改查和导航,而SAX没有这么强的灵活性,所以SAX经常是用来解析大型XML文件,而要对XML文件进行一些灵活(crud)操作就用dom4j

23、XML和JSON的特点

XML特点:

1、有且仅有一个根节点;

2、是独立与软件和硬件的信息传输工具(传输量较大)

3、所有的标签都需要自定义

4、仅仅是纯文本文件

JSON(JavaScript Object Notation)特点:

JSON分为两种格式: JSON对象(就是在{}中存储键值对,键和值之间用冒号分隔, 键-值 对之间用逗号分隔),JSON数组(就是[]中存储多个JSON对象,JSON对象之间用逗号分隔)(两者间可以进行相互嵌套)数据传输的载体之一

24、XML和JSON的区别

区别:

XML的传输数据量比JSON的要大,流行的是基于JSON的数据传输。

共同点:

XML和JSON都是传输数据的载体,并且具有跨平台跨语言的特性。

25、jQuery总结

jQuery是一个轻量级的js框架,具有跨浏览器的特性,兼容性好,并且封装了很多工具,方便使用。

常用的有:  选择器 ,DOM操作,AJAX(AJAX不能跨域),特效,工具类

26、request.getSession()、reqeust.getSession(false)和request.getSession(true) ?

getSession()/getSession(true):当session存在时返回该session,否则新建一个session并返回该对象

getSession(false):当session存在时返回该session,否则返回null

27、AJAX总结

1.AJAX 全称(Asynchronous JavaScript And XML):异步JavaScript及XML

AJAX的核心是JavaScript对象XmlHttpRequest(XHR)。

AJAX的优点:

提高用户体验度(UE)

提高应用程序的性能

进行局部刷新

AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。

2.通过 AJAX,我们的 JavaScript 可使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信。通过这个对象,我们的 JavaScript 可在不重载页面的情况与Web服务器交换数据,即可局部刷新。

3.AJAX 在浏览器与Web服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面,减轻服务器的负担,提升站点的性能。

AJAX 可使因特网应用程序更小、更快,更友好,用户体验(UE)好。

  1. AJAX是基于标准化并被广泛支持的技术,并且不需要插件和下载小程序

28、JSP 9大隐视对象中四个作用域的大小与作用范围

四个作用域从大到小:appliaction>session>request>page

application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。

session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。

request:请求作用域,就是客户端的一次请求。

page:一个JSP页面。

以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward)。

时间: 2024-10-23 11:58:18

Java Web部分的相关文章

java web环境搭建

1. 根据自己电脑版本下载对应的tomcat和eclipse安装包 2. 在eclipse中找到preferences 找到 runtime environments 找到add 3. 选择tomcat的版本 next 4. 选择browse  tomcat解压的地方选择对应的版本,最后finsih 5. 数据库方面 只需要下载Mysql的安装包即可. 最后完成了java web环境的搭建.

Java Web -- Servlet(1) 必备知识

学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思.现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体(hypermedia).超文本传输协议(HTTP)等. 2.静态网页(可简单理解为html) 是指网页的内容是固定的,不会根据浏览器者的不同需求而改变.(实实在在保存在服务器上的文件) 3.动态网页 是指在接到用户访问要求后动态生成的页面,页面内容会随着访问时间和访问者发生变化(并不是独立存在于服务

[Java Web]2\Web开发中的一些架构

1.企业开发架构: 企业平台开发大量采用B/S开发模式,不管采用何种动态Web实现手段,其操作形式都是一样的,其核心操作的大部分都是围绕着数据库进行的.但是如果使用编程语言进行数据库开发,要涉及很多诸如事务.安全等操作问题,所以现在开发往往要通过中间件进行过渡,即,程序运行在中间件上,并通过中间件进行操作系统的操作,而具体一些相关的处理,如事务.安全等完全由中间件来负责,这样程序员只要完成具体的功能开发即可. 2.Java EE架构: Java EE 是在 Java SE 的基础上构建的,.NE

在java web项目中集成webservice

公司要求在项目中加入webservice服务,因为项目中使用了spring框架,所以在这里使用与spring兼容性较好的cxf来实现 cxf所需jar包 spring的jar包就不贴了 一:创建webservice服务器 1)创建一个服务接口 package com.service; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface IHelloWorld { public S

Java Web项目中缺少Java EE 6 Libraries怎么添加

具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build Path-->Java Build Path" 2.单击"Add Library..." 3.选择"User Library",单击"Next" 4.单击"User Libraries...",选择需要的Java EE 6 Libraries Java Web项目中缺少Java EE 6

java web 程序---购物车选商品,购买,付款

虚函数使用的时机 为什么虚函数不总是适用? 1. 虚函数有事会带来很大的消耗: 2. 虚函数不总是提供所需的行为: 3. 当我们不考虑继承当前类时,不必使用虚函数. 必须使用虚函数的情况: 1. 当你想删除一个表面上指向基类对象,实际却是指向派生类对象的指针,就需要虚析构函数. java web 程序---购物车选商品,购买,付款,布布扣,bubuko.com

使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误

我的百度知道回答,感觉这个知识很有意义,专门贴出来. 不过还有待验证的地方,就是 ActionContext.getContext().getSession("name", "Tom"); //如果在JSP中通过 EL 或者 Struts2 标签怎么显示? 以下是回答正文. 很多初学Java Web的同学因为使用 Strut2框架而分不清两个 Session的区别. 1.   JSP/Servlety有个原生的 session 对象,这是9大内置对象中的一个,书上写

java Web(2)

Servlet与web容器的配合: 1)客户端向Web服务器发起一个HTTP请求. 2)HTTP请求被Web服务器接受,如果请求的是静态页面,则由Web服务器负责处理.如果请求的是Java Web组件(Servlet或者JSP),则移交给Web容器.Web容器可以在主               机的同一个进程.不同的进程或其他的Web服务主机的进程中启动. 3)Web容器根据Servlet的配置文件确定调用的具体Servlet类,并把request对象.response对象传给它. 4)Ser

java web 数据库开发1

一个完整的数据库部署架构通常由客户端和服务器端两部分组成.客户端封装数据库请求将其发送给服务器端,服务器端执行完毕将其及结果返回给服务器端. 以mysql为例 介绍java应用程序对数据库的访问 JDBC意义:应用程序通过调用统一接口实现对任意数据库的访问,为我们屏蔽了客户端与服务器端交互协议的实现细节. 对java而言,JDBC是一个类库,对数据库而言,JDBC是接口规范. 有了JDBC,应用程序变得更加简单,提高了程序开发的效率,使java web面向不同的数据库时,具有跨平台性,基于JDB

使用InteIIiJ IDEA开发Java web 项目

1.介绍 IntelliJ IDEA是一款非常强大的集成开发环境,基本上可以做任何事情,它的强大大大降低了我们的工作量,提高了工作效率.那么它如何开发Java web呢?下面就为大家介绍使用IntelliJ IDEA开发Java web. 首先去官网下载安装包:http://www.jetbrains.com/idea 它有两个版本Ultimate(收费)和Community(免费),作者选择的是Ultimate 2.安装 点击下载即可,然后开始安装,一直Next就可以了,途中可以选择创建一个6