您的位置:首页 > Web前端 > JavaScript

JavaEE编程技术(JSP/Servlet)

2016-04-24 20:13 387 查看
1、DOS,命令窗口下编译运行java文件

(1)编译.java文件:若没有配置环境变量,可以直接到开始搜索cmd打开命令窗口,进入java文件所在的磁盘文件地址,(如:进入Server.java所在的D:\MyEclipse\test1\Server.java可用命令:D:——>cd MyEclipse——>cd test1;注:进入一个文件夹后可以用dir命令获取该文件夹中含有哪些子文件),然后运行java文件命令如下:

javac Server.java  

(2)运行已经编译好的.class文件:若没有配置环境变量,如上打开cmd命令窗口并进入包文件的上一级文件地址(如:D:\MyEclipse\test1\Package\Server.class,需要用cd xx命令进入test1文件夹下),然后使用如下命令语句:

java Package.Server

注:java运行环境是JRE,而JDK是java开发工具包,前者是java运行所必需的,也是java在不同操作系统可运行的前提,后者是包含JRE的,同时还包括编译java类所需要的一些工具包。

更多有关DOS命令请查看:http://baike.so.com/doc/2807622-2963302.html

2、JavaWEB开发主要包括servlet和JSP(JSP实质上也是一个servlet类,发布时tomcat服务器自动将jsp的html生成为一个服务类)两部分内容。

servlet:适用于后端开发;

JSP:适用于前端开发;

两者都有request和response对象,一般的方法参数都一样;

如何选择:java代码比较多,即逻辑部分用servlet写,HTML代码比较多,即输入输出就用JSP写;

3、html中添加java语句需要使用<%   %>符号。

eg:<%=变量名%>可以直接输出变量的值,当然<% out.println(变量名) %>也是一样的作用;

<%@ page import="java.util.*" pageEncoding="gbk"%>可以引入调用类包或者设置文本字符类型等,但这必须是在html结构体外面的。

 <%! 

int counter=0; //在JSP中声明实例变量(C中的全局变量)

private boolean IsEven(int num){

/**  **/

}//在JSP中声明一个方法用于调用

%>

4、javaEE中转发forward与重定向sendRedirect两种页面跳转方式的区别:

(1)forward是在服务器端完成的跳转,地址栏的url地址不会变化;而sendRedirect是服务器返回url后客户端重新访问新的页面地址,url地址栏会改变;

(2)forward是在一般在servlet中使用比较多,该方式可以在类中使用request.setAttribute(,)直接传参数;而sendRedirect传递参数则需要在URL中使用“?arg=xxx”方式传参数;

(3)forward只可以跳转到本项目内的页面,而sendRedirect可以跳转到项目外的其他网站页面;

(4)forward由于是直接由服务器完成跳转,所以运行步骤简单,响应速度也就很快,而sendRedirect因为需要多次请求服务器等步骤,因此响应速度较慢。

注:转发除了forward还有另一种方式,以JSP文件MyJsp1.jsp转发到MyJsp2.jsp为例,可以如下在JSP编辑页面中写HTML语句:

  <jsp:forward page="MyJsp2.jsp"/>

5、javaEE中如何将登录信息自动填充到登陆文本框?

答:使用cookie记录登录信息并在每次登录时读取cookie从存储的登录信息,具体代码如下:

//创建并实例化一个cookie对象,“gbk”是包含简繁体中文的编码模式

Cookie cookie=new Cookie("userName", URLEncoder.encode(userName, "gbk"));

//设置cookie信息的有效周期

cookie.setMaxAge(60*60*24*30);

//设置cookie保存地址,一般不写,自动保存到C:\Users\lenovo\AppData\Local\Microsoft\Windows\Temporary Internet Files

//cookie.setPath("\\address");

//将保存信息的cookie添加到response对象,生效

response.addCookie(cookie);

6、如何防止用户不经过登录页面直接访问登录成功的页面?

答:用session机制解决这一问题,示例如下:

//登录成功时先给跳转的下一页面

if(**登录信息正确**){

//设置跳转页面及传送参数信息

//request.setAttribute("name", userName);

HttpSession session=request.getSession();

session.setAttribute("name", userName);

path="SuccessLogin.jsp";
}

//登录成功后的第一个跳转页面要获取登陆成功时传送的参数,若为空表示未经等录直接访问,跳转到登录界面

//String username=(String)request.getAttribute("name");

String username=(String)session.getAttribute("name");//此处的session是隐含对象

if(username==null)

  response.sendRedirect("login.jsp");

注:为什么不用以上绿色部分的request对象传送和获取参数?原因是:该参数会随着第一次跳转结束而释放,而后的直接访问登录成功页面本来是合法的,但因为参数释放而不能获得传送的参数username,就会导致执行response.sendRedirect("login.jsp")而又要重新登录。

7、session原理与作用

作用:

在服务器上,通过Session来区分每一个上网用户,用户只要一连接到服务器,则立刻分配一个Session给用户

原理:

服务器上通过Session来分别不同的用户-->Session ID(长度:32),该ID在客户端和服务端各保存一个,客户端的sessionID是以cookie形式保存的;

每次客户端请求页面时都会发送sessionID给服务端,服务端根据自己保存的sessionID进行验证,得出该用户是否合法,同时客户端可以根据该sessionID从服务端获取相应的保存内容;

session机制下保存的信息相比cookie更加安全,因为Session将信息保存在服务器上,而Cookie保存在客户端上。

8、javaEE中的四种范围变量:

(1)pageContext:该变量只在本页面文件中有效,一旦页面转发后就失效了,所以一般很少使用;

(2)request:该变量转发后还可以获取,但转发后的页面标签关闭或者更换URL后就不在有效,简单说只适用于转发后的页面标签范围内;

(3)session:该变量适用于浏览器窗口,只要浏览器窗口不关闭就不会失效,常见的可以用于登录后,关闭或刷新页面仍可以访问网站页面而不需要重新登录,以及购物车等记录保存(现在的淘宝京东不是使用的session,他们的购物车信息可以在关闭浏览器后仍然存在);

(4)application:作用范围是整个项目,只要有参数一application形式保存,关闭浏览器后仍可以获取该参数。还要注意,servletContext对象就是application,application=范围变量.getServletContext();

注:其中,常用的只有request和session两个,application偶尔可以代替实例变量(C中全局变量)保存参数。

4种变量的读写如下:

(写)

pageContext.setAttribute("scope", "123456");

request.setAttribute("scope", "123456");

session.setAttribute("scope", "123456");

application.setAttribute("scope", "123456");

(读)

pageContext.getAttribute("scope")

request.getAttribute("scope")

session.getAttribute("scope")

application.getAttribute("scope")

9、页面访问与转发中的地址问题

java web中的路径使用以分两种情况:

情况一、指向外部的web组件及和本身关系不大的,包括:html中使用路径的标签,比如<a>标签中的href、servlet和jsp中的重定向sendRedirect(path);

情况二、指向内部的web组件及和本身有关系的,包括:servlet或者jsp转发

假设在test项目下有login.html,index.jsp,及两个servletA和servletB.

在web.xml中的地址配置:

<url-pattern>/servlet/servletA</url-pattern>

<url-pattern>/servlet/servletB</url-pattern>

对于“情况一”:若在路径中以/开头就表示绝对路径,则这个/相当于http://localhost:8080/,举例如下:

1、login.html有个form表单有提交给servletA,那么action要填的路径:

绝对路径方式:action="/test/servlet/servletA"       ------http://localhost:8080/myapp/servlet/servletA

相对路径方式:action="servlet/servletA"                   ------http://localhost:8080/test/servlet/servletA

2、login.html有个<a>链接到index.jsp 那么

绝对路径方式:href="/test/index.jsp"                      ------http://localhost:8080/myapp/index.jsp

相对路径方式:action="index.jsp"                            ------http://localhost:8080/test/index.jsp

3、index.jsp中重定向到servletA

绝对路径方式:sendRedirect("/test/servlet/servletA");      ------http://localhost:8080/myapp/servlet/servletA

相对路径方式:sendRedirect("servlet/servletA");     ---http://localhost:8080/test/servlet/servletA

对于“情况二”:若在路径中以/开头也表示绝对路径,但这个/相当于http://localhost:8080/test/,举例:

1.servletA转发到servletB

绝对路径方式:request.getRequestDispatcher("/servlet/servletB").forward(request, response);

       --------http://localhost:8080/test/servlet/servletB

相对路径方式:request.getRequestDispatcher("servlet/servletB").forward(request, response);

       --------http://localhost:8080/test/servlet/servletB

注意:

相对路径是相对于当前浏览器地址栏的路径(源地址),相对路径和绝对路径要配合使用,否则谁造成转发(情况二)跳不出servlet包文件。

获得相对路径和绝对路径:

项目路径:String path=request.getContextPath();           ----                /test

String p=this.getServletContext().getRealPath("/");     -----   G:\environment\tomcat\webapps\test\

总结:

外部时"/"就是代表主机路径,内部时"/"就是代表当前项目路径.

一般不需要传值时用重定向不较好,可以防止页面刷新而导致的重复动作;若需要用setAttribute()传值需要用forward转发了。

10、javabean指什么?

答:javabean是指java组件,常见的有可视化组件如常用控件和实体类class两种。

11、JSP标签是什么?

答:JSP标签是一种JSP自带的可以实现某些逻辑的编程语句,可以代替部分java语句,常用于前端程序员编写JSP前端部分。举例如下:

//首先是使用java语句实现

<%

  User u=new User(); //此语句作用和下面的JSP标签作用一致

  u.setUsername("zhang");//与下面的JSP标签作用相同

  request.setAttribute("u", u);//与下面的JSP标签作用相同

%> 

//接着是使用JSP标签的同一功能实现
<jsp:useBean id="u" class="entity.User" scope="request"></jsp:useBean>

<jsp:setProperty property="username" name="u" value="zhang"/>

<jsp:forward page="MyJsp2.jsp"></jsp:forward>

注:jsp:后面跟的词就是JSP标签名称

12、什么是MVC设计模式?

答:M指Model,包括java/JavaBean等作用为内在联系的包或者实体类等;

V指View,包括输入输出界面等用于交互的部分;

C指Control:表示用于进行逻辑运算的部分,如servlet。

一个典型的MVC设计模式javaEE程序包括三部分:servlet、JSP和JavaBean(就是一个实体类)。

13、JSP表达式和EL表达式如何使用?有何区别?

答:JSP表达式和EL表达式都是用于在JSP文件中输出表达式结果的语句。

(1)JSP表达式:<%=表达式 >

(2)EL表达式:${表达式}

不同点:EL表达式中的变量必须是保存在4个范围变量(pageContext、request、sesstion和application)中;其次就是EL对于未定义的变量不会报错空指针。

举个例子:



结果如下:



14、JSTL有什么作用?

答:JSTL在javaEE中一般都是结合EL表达式应用的,其最大的作用就是在JSP中尽可能的替代java语句。因为按照javaWeb开发习惯,JSP要尽可能减少java语句的使用,JSTL包含了if语句、for语句、setAttribute语句等很多常用的java逻辑语句的替代标签,同时EL标签又可以替代JSP表达式,故两者结合就可以大大减少JSP中的java语句使用。

举个例子:



输出结果为:



总结:从上述可以明显看出,在JSP中使用JSTL(包括EL)语句更加符合JSP编写习惯。

15、Filter的作用是什么?

答:学名“过滤器”,用于在对象(html、JSP、servlet)执行前运行的一个类对象,可以用于如登录标志验证等预先处理功能。举例如下:



这就是一个登录过滤器,用于防止用户不经登录就访问某些本应该登录成功后才可见的页面。

过滤器作用对象需要在web.xml中配置,如下:



16、监听器的作用与使用方法是什么?

答:监听器的作用相当于事件监听,每个对象的对应的监听器都会监听该对象的创建与销毁,举个例子:



这是一个session的监听器,每当创建session时,就会执行sessionCreate(),每当这个session销毁时就会执行sessionDestroyed(),上述这两个方法就相当于对应的事件处理方法

17、servlet 3.0有哪些不同?

答:一、web.xml配置可以在servlet中完成了;

二、文件上传相对容易了;

等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java myeclipse 编程