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中完成了;
二、文件上传相对容易了;
等等。
(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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树