答: 网页形式BS架构 2. B/S模式和C/S模式的特点是什么,二者比较有什么区别?
答:C/S模式是一种两层结构的系统,第一层在客户机上安装了客户机应用程序,第二层在服务器上安装服务器管理程序.在C/S模式的工作过程中,客户机程序发出请求,服务器程序接收并且处理客户机程序提出的请求,然后返回结果. C/S模式有以下特点:
1).C/S模式将应用与服务分离,系统具有稳定性和灵活性
2).C/S模式配备的是点对点的结构模式,适用于局域网,有可靠的安全性 3).由于客户端实现与服务器端的直接连接,没有中间环节,因此响应速度快
4).在C/S模式中,作为客户机的计算机都要安装客户机程序,一旦软件系统升级,每台客户机都要安装客户机程序,系统升级和维护较为复杂 B/S模式,即浏览器/服务器模式,是一种从传统的两层C/S模式发展起来的新的网络结构模式,其本质是三层结构的C/S模式。在用户的计算机上安装浏览器软件,在服务器上存放数据并且安装服务应用程序,服务器有WWW服务器和文件服务器等。用户通过浏览器访问服务器,进行信息浏览、文件传输和电子邮件等服务。 B/S模式有以下特点:
1).系统开发、维护、升级方便
每当服务器应用程序升级时,只要在服务器上升级服务应用程序即可,用户计算机上的浏览器软件不需要修改,系统开发和升级维护方便 2).B/S模式具有很强的开放性
在B/S模式下,用户通过通用的浏览器进行访问,系统开放性好 3).B/S模式的结构易于扩展
由于Web的平台无关性,B/S模式的结构可以任意扩展,可以从包含一台服务器和几个用户的小型系统扩展成为拥有成千上万个用户的大型系统
4).用户使用方便
B/S模式的应用软件都是基于Web浏览器的,而Web浏览器的界面是类似的。对于无用户交换功能的页面。用户接触的界面都是一致的,用户使用方便 3. 常见的HTTP响应代码有哪些,分别表示什么意思?
答:200 成功:请求成功.
302临时移动:请求消息临时驻留在不同的URI.如果驻留位置是新的URI,则响应中的Location题头域会给出新的URI. 当客户端被重新定向时,通常使用此代码.
400不良请求:由于语法错误而导致服务器无法理解请求信息. 401 未授权:请求要求身份验证或授权.
403禁止:服务器理解了请求,但是出于某种原因却拒绝处理请求.服务器可能会揭示拒绝原因,也可能不揭示. 404未发现 :服务器未发现与请求URI相匹配的内容
500内部服务器错误:服务器遇到了未预期的情况,使它无法处理请求. 4. Java技术中最早的Web解决方案是什么技术?
答:EJB和Servlet 5. Weblogic下数据库连接池的使用
答:1)新建一个project ;2)导入相应的jar包; 3)配置MySQL数据库;4)配置Weblogic服务器;5)设置数据库连接属性; 6)验证数据库连接;7)选择目标,把这个数据库的JNDI挂个某个目标(用户)上 第二部分:Servlet应用,考察题型:选择、简答 1. 什么是Servlet?其功能是什么?
答:Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理 功能:接收请求数据;处理请求;完成响应 2. Sevlet开发和部署的步骤是什么?
答:①编写Servlet并编译成class文件,编译时,将servlet-api.jar文件(在/common/lib 目录下)加入到classpath中; ②将编译好的class文件拷贝到应用的WEB-INF/classes/下(如/myapp/WEB-INF/classes/); ③在web.xml中进行配置 答:例如: 答:用户请求一个Servlet,Servlet容器自动构建请求和响应对象,然后执行Servlet的service()方法,该方法会接收请求和响应对象,通过响应对象将处理结果发送给用户。 6. Servlet的生命周期? 答:a、Servlet的class经过部署,并启动容器 b、(当请求该Servlet时候)容器自动创建Servlet对象xServlet,然后xServlet调用其init()方法。到此,Servlet初始化结束。 c、一旦客户端请求该Servlet,xServlet自动调用service()来处理请求。 d、一旦很长时间都没有请求该Servlet(或者说该Servlet超时),则容器会将xServlet从容器中清除掉。 7. Servlet应用:输出Hello World! 答:public class HelloServlet implements Servlet{ Public void init(ServletConfig) throws ServletException{} Public ServletConfig getServletConfig(){return null;} Public void destroy(){} Public String getServletInfo(){return null;} Public void service(ServletRequest req,ServletReponse res)throws ServletException,IOException{ System.out.println(“Hello World!”); } } 第三部分:JSP基础和JavaBean,考察题型:选择、简答、程序填空 1. JSP运行原理是什么?一个JSP文件运行时经历几个阶段? 答:JSP的运行原理:WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。 经历的几个阶段:预编译、翻译、编译执行三个阶段。 1.需要导入的子JSP整合进来2.把JSP文件对译成相应的Java原代码3.编译并执行java代码生成输出,而且这个过程一般只执行一次,除非JSP文件改变。 2. JSP一般存储在扩展名为.jsp的源文件中。 3. JSP的脚本元素有哪3种?表现形式? 答:声明、小脚本和表达式。声明是以<%!开头,以%>结束的标签;小脚本是以<%开头,以%>结束的标签;表达式(expression)是以<%=开头,以%>结束的标签 4. 在JSP中使用JavaBean 通过三个标准动作useBean、getProperty和setProperty完成。 答:例如: 答:三大指令:page、include、taglib page指令用户定义JSP页面中的全局属性,它的语法格式如下: <%page {language=\"java\ {extends=\"package.class\ {import=\"{package.class|package.*},...\ {session=\"true | false\ {buffer=\"none | 8kb | sizekb\ { false\ {isThreadSafe=\"true | false\ {info=\"text\ {errorPage=\"relativeURL\ {contentType=\"mimeType [;charset=characterSet]\" | \"text/html ; charset=ISO-8859-1\ {isErrorPage=\"true | false\ {pageEncoding=\"charset=characrerSet | ISO-8859-1\ %> page指令对整个页面有效,包括静态的包含文件,但page指令不能用于被动态包含的文件,例如使用包含的文件。在一个JSP页面中可以使用多个page指令,但page指令中的属性只能出现一次(import属性除外)。 Include指令的功能是在JSP编译时插入包含的文件。包含的过程是静态的。它可以把内容分成更多可管理的元素,如包括普通页面的页眉或页脚的元素。包含的文件可以是JSP、HTML、文本或是Java程序。 include指令的语法: <%@ include file=\"relativeURL\" %> 其中只有一个file属性,这个属性指定了被包含文件的路径。taglib指令中的uri属性用于根据标签的前缀对自定义的标签进行唯一的命名,其值可以是相对路径,就对路径或标签库描述文件。属性prefix制定了标签的前缀。taglib指令的语法:<%@ taglib uri=\"URIToTagLibrary\" prefix=\"tagPrefix\" %> 7. include指令和include动作有什么异同? 答: include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改。由于被包含的文件是在编译时才插入的,因此如果只修改了include文件内容,而没有对JSP修改,得到的结构将不会改变,所以直接执行已经存在的字节码文件,而没有重新编译。因此对不经常变化的内容,用include指令是合适的,如果需要的内容是经常变化的,则需要动作元素 include可以在JSP页面转换成Servlet之前,将JSP代码插入其中。它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性、方法的定义和文档类型的设定。它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改。 语法:<%@ include file=\"sample.jsp\" %> include动作 jsp:include动作是在主页面被请求时,将次级页面的输出包含进来。尽管被包含的页面的输出中不能含有JSP,但这些页面可以是其他资源所产生的 结果。服务器按照正常的方式对指向被包含资源的URL进行解释,因而这个URL可以是Servlet或JSP页面。服务器以通常的方式运行被包含的页面, 将产生的输出放到主页面中,这种方式与RequestDispatcher类的include方法一致。它的优点是在被包含的页面发生更改时,无须对主页 面做出修改。它的缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。 语法: 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实例 编写程序使用session和application实现网站计数器,并查看计数的不同处。 答:application实现网站计数器如下: <% Object oCount=application.getAttribute(\"count\"); //取得count属性值,如果还没有该属性则返回null Integer count=null; 8. 9. if(oCount==null){ count=new Integer(1); //新建一个Integer对象,因为这是首个访问 application.setAttribute(\"count\ //为application对象增加count属性并指定其值 }else{ count=(Integer)application.getAttribute(\"count\"); count=new Integer(count.intValue()+1); //将count对象包含的值增加1 application.setAttribute(\"count\ //把增加后的新count对象赋值到application对象的count属性 } %> 您是第<%=count.intValue() %> 位访客,祝你玩的愉快! Session实现计数: <%! int count=0;%> 定义整型变量用于计数 <% String usercount; 定义字符串行变量以便写入session request.getSession(true); 建立用户的 session if(session.isNew()) 判断用户的 session是否为新创建的 { count++; 整型变量加一 usercount = String.valueOf(count); 将数值型数据转换成字符串型数据 session.putValue(\"usercount\session } out.print(\"您是本站的第 \"); out.print(session.getValue(\"usercount\")); 从session中提取数据送到屏幕上显示 out.print(\" 答:(1)新建登录页面login.jsp (2)配置处理器映射与处理器 (3)新建登录表单类com.demo.spring.forms.LoginForm.java package com.demo.spring.forms; public class LoginForm { private String username; private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } 写入 } (4)新建登录处理器com.demo.spring.actions.LoginAction.java package com.demo.spring.actions; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.validation.BindException; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController; import com.demo.spring.dao.UserDAO; import com.demo.spring.forms.LoginForm; import com.demo.spring.util.Constants; public class LoginAction extends SimpleFormController { protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { LoginForm loginForm = (LoginForm) command; if (isValid(loginForm)) { request.getSession().setAttribute(Constants.USERNAME_KEY, loginForm.getUsername()); return new ModelAndView(getSuccessView()); } else { Map modle = errors.getModel(); modle.put(\"loginForm\ return new ModelAndView(getFormView(), modle); } } public boolean isValid(LoginForm loginForm) { if (loginForm.getUsername().equals(\"admin\") || loginForm.getPassword().equals(\"admin\")) { return true; } else { return false; } } } (5)新建欢迎页面welcome.java <%@ taglib prefix=\"spring\" uri=\"/spring\"%> <%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%> <%String path = request.getContextPath(); String basePath = request.getScheme() + \"://\" + request.getServerName() + \":\" + request.getServerPort() + path + \"/\"; %> 答:JDBC API 既支持数据库访问的两层模型(C/S),同时也支持三层模型(B/S)。在两层模型中,Java applet或应用程序将直接与数据库进行对话。这将需要一个JDBC驱动程序来与所访问的特定数据库管理系统进行通讯。用户的SQL语句被送往数据库中,而其结果将被送回给用户。数据库可以位于另一台计算机上,用户通过网络连接到上面。 在三层模型中,命令先是被发送到服务的”中间层”,然后由它将SQL 语句发送给数据库。数据库对 SQL 语句进行处理并将结果送回到中间层,中间层再将结果送回给用户。 4. Servlet作为控制器,其主要任务有哪些? 答:1)接收请求信息;2)对信息进行验证;3)把信息转换成需要的类型;4)使用这些信息调用业务逻辑方法;5)对用户响应 5. Servlet过滤器的使用,解决中文乱码和用户权限。 答:解决中文乱码: 1).在包中新建类FormFilter,添加代码: public class FormFilter implements Filter { private FilterConfig config; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String encoding = config.getInitParameter(\"encoding\"); if (null != encoding && !\"\".equals(encoding)) { request.setCharacterEncoding(encoding); } chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { this.config = config; } } 2).web.xml在webapp中添加: 在 SPRING 3 MVC 模式下,还可以如下实现: public class SecurityFilter extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(\"==>>Begin to Filter session====\"); HttpSession session = request.getSession(); String user = (String) session.getAttribute(\"user\"); System.out.println(\"===??Current User==\"+user); String curPath=request.getRequestURL().toString(); System.out.println(\"===>> curpath:\"+curPath); if (curPath.indexOf(\"GPS/User/Index\")>=0){ return true; } if(null==user || \"\".equals(user)){ return true; /** * handle session and security if you want. */ //request.getRequestDispatcher(\"/index.jsp\").forward(request, response); } return super.preHandle(request, response, handler); } } 在 name-servlet.xml spring 的配置文件中注明: 第六部分:EL和JSTL,考察题型:选择、简答、程序填空 1. JSP中完成动态信息输出的技术有哪3种? 答:1)out对象:<% out.println(“要输出的信息”);%>;2)表达式:<%=new java.util.Date()%>;3)表达式语言(EL) 2. EL语法:.和[]的使用; 答:点运算符和方括号运算符可以实现某种程度的互换,如${student.name}等价于${student [“name”]}。当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号时,就一定要使用[]。例如${student.name }应当改为${student[“name”] }。如果要动态取值,就可以用[]来做,而.无法做到动态取值。例如${sessionScope.student[data]}中data是一个变量。 3. EL变量的查找存取过程。 答:EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null 4. 用EL操作JavaBean。 答:因为EL只做读取操作,所以javaBean一定要提供get方法,而set方法没有要求 5. 为什么使用JSTL? 答:易于安装在多个项目上;扩展JSP;容易维护;快速的开发时间 6. JSTL标签的使用。 答:常用的核心标签库包括:out, set , remove , catch , if , choose , when 和 URL 等.例如: 答:装载驱动程序;定义所要链接数据库的地址;建立与数据库的链接;建立语句对象;声明并执行sql语句;处理返回的结果;关闭对象 8. EL函数的使用。 答:在页面中使用JSTL定义的EL函数: <%@taglib url=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>就可以使用fn里边定义的函数了 第七部分:Struts框架,考察题型:选择、程序填空、程序设计 1. 什么是框架?Struts2中Action接收用户输入的3种方式是什么? 答:框架指为解决一个开放性问题而设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。 三种方式:1、使用Action类中的属性接收用户输入参数;2、使用领域模型对象接收用户输入参数; 3、使用Struts2独有的模型驱动接收用户输入参数 2. Struts2的工作原理、工作流程。 答:客户端发送请求 (客户端初始化一个指向Servlet容器(如Tomcat)的请求);请求经过一系列过滤器(如ActionContextCleanUp、SiteMesh等),ActionContextCleanUp-->FilterDispatcher ;FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action ;如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;ActionProxy通过ConfigurationManager询问Struts配置文件(Struts.xml),找到需要调用的Action类。;ActionProxy创建一个ActionInvocation的实例 ;ActionInvocation调用真正的Action,当然这涉及到相关的调用(interceptor) ;Action执行完毕,ActionInvocation创建Result并返回,返回结果前要做些动作也是可以的 3. 4. struts.xml配置文件的使用。 Struts2中对内置对象如request、session等的访问方法; 答:与Servlet API解耦的方式;与Servlet API耦合的访问方式;实现相关接口 第八部分:Hibernate框架,考察题型:选择、简答、程序填空、程序设计 1. Hibernate的核心类和接口有哪些? 2. 3. 4. 5. 6. 7. 答: Hibernate的配置文件的主要作用? 答:Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性,这个配置文件应该位于应用程序或Web程序的类文件夹 classes中。Hibernate配置文件支持两种形式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件,采用“键=值”的形式。建议采用xml格式的配置文件。xml配置文件可以直接对映射文件进行配置,并由Hibernate自动加载,而properties文件则必须在程序中通过编码加载映射文件。 Hibernate对象的三种状态及其特征 答:对象的状态有三种:瞬态、游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save()、saveOrUpdate()、get()、load();持久态到瞬态的方法有delete();游离态到持久态的方法有update()、saveOrUpdate()、lock();持久态到游离态的方法有:session.close()、session.evict()、session.clear()。 Hibernate配置文件hibernate.cfg.xml的使用。 答:系统配置文件:关于数据库链接的基本配置 实体类的创建; 答:public class myDao{ @Autowired @Qualifier(\"sessionFactory\") private SessionFactory sessionFactory; private List Map if(!set.contains(entityClass.getName())){ for(SessionFactory factory : sessionFactoryList){ Set if(existSet.contains(entityClass.getName())){//该sessionFactory包含了此实体,就用该SessionFactory return factory; } } LocalSessionFactoryBean localSessionFactoryBean = SpringContextUtil.getBean(\"&sessionFactory\"); Configuration configuration = localSessionFactoryBean.getConfiguration(); synchronized(configuration){//避免并发操作导致configuration重复添加相同的entityClass if(configuration.getClassMapping(entityClass.getName())==null){ configuration.addAnnotatedClass(entityClass); } } ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); SessionFactory newSessionFactory = configuration.buildSessionFactory(serviceRegistry); sessionFactoryList.add(newSessionFactory); return newSessionFactory; }else{ return sessionFactory; } } } 映射xxx.hbm.xml配置文件的创建。 答:例如: 关联映射,不同关系的映射方法。 答:1)多对一关联映射:就是在“多”的一端加外键,指向“一”的一端。2)单向的一对一主键关联映射:就是让两个实体的主键一样,就不需要加入多余的字段了。3)双向一对一关联映射:有些需求要求从一端可以查到另一端,从另一端又可以查到这一端,就需要双向的关联映射。4)单向一对一唯一外键关联映射:一对一主键关联不好维护,用外键关联对象比较好。原理:多对一的特殊情况。5)双向一对一唯一外键关联:如果有需求要求的情况下,也可以建立双向的外键关联。6)单向一对多关联映射:让一的一端维护关系,和多对一的映射原理是一样的,都是在多的一端加入一个外键指向一的一端;7)双向一对多关联映射:让多的一端来维护关系。8)单向多对多关联映射;9)双向多对多关联映射: 因篇幅问题不能全部显示,请点此查看更多更全内容尊敬的访客,欢迎您的到来!
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务