优秀的手机游戏下载!
首页 Serverlet文件基本结构

Serverlet文件基本结构

发布时间:2024-08-15 17:32:07 编辑:打包星星 浏览:169

jsp serverlet 区别 JSP和Servlet的概念对于JSP初学者来说比较不清楚,以下总结一些个人看法: (1).简单的来说Jsp就是含有Java代码的html,而servlet是含有html的Java代码; (2).Jsp最终也是被解释为servlet并编译再执行,Jsp不过是servlet的另一种编写方式; (3).Jsp擅长表示,servlet擅长数据处理,在MVC三层结构中,Jsp负责V(视图),servlet负责C(控制),各有优势,各司其职; Servlet在功能实现上其实是一样的,可以说用Jsp的能实现的,Servlet也可以实现,但是从应用的角度来讲,Jsp更适合做表现层的事情因为他有标签支持,而Servlet适合做数据逻辑层的数据处理。 Serverlet 就是一个Java类,Web中应用的应该是HttpServerlet ,它扩展自GenericServerlet(这是一个对Serverlet接口进行了部分实现的抽象类),Serverlet类最大的好处就是能够提供request/response的服务器功能,当有请求提交到Serverlet 时,他执行它自身的service( …

在Java中如何用Serverlet实现分页查看数据库

对一类 url,或所有 url 进行业务处理 对各种 url 之类进行匹配,查找,执行相应操作,与 action 相比较而言,action 只能针对 某一特定的 url 进行匹配,进行操作 如: &ltform action = ”update.action”&gtaction 对应的 url 是固定的,对于 struts1.x 可能一个 action 只有一个 url 对于 struts2.0,一个 action 可能有多个 url,看它实现的方法数量,不过这些 url 在提交 之前都是已经的,固定的。而上面四种可以对任意 url 进行操作,如 &lturl-pattern&gt*.action&lt/url-pattern&gt区别:1,servlet 流程是短的,url 传来之后,就对其进行处理,之后返回或转向到某一自 己指定的页面。它主要用来在 业务处理之前进行控制. 2,filter 流程是线性的, url 传来之后,检查之后,可保持原来的流程继续向下执行, 被下一个 filter, servlet 接收等,而 servlet 处理之后,不会继续向下传递。filter 功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而 servlet 的功能主要用 来主导流程。 filter 可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等 3, servlet,filter 都是针对 url 之类的, listener 是针对对象的操作的, session 而 如 的创建,session.setAttribute 的发生,在这样的事件发生时做一些事情。 可用来进行:Spring 整合 Struts,为 Struts 的 action 注入属性,web 应用定时任 务的实现,在线人数的统计等 4,interceptor 拦截器,类似于 filter,不过在 struts.xml 中配置,不是在 web.xml, 并且不是针对 URL 的,而是针对 action,当页面提交 action 时,进行过滤操作,相当于 struts1.x 提供的 plug-in 机制,可以看作,前者是 struts1.x 自带的 filter,而 interceptor 是 struts2 提供的 filter. 与 filter 不同点:(1)不在 web.xml 中配置,而是在 struts.xml 中完成配置,与 action 在一起 ( 2 interceptor 来在接收之前做事 一,servlet 1, 在 web.xml 中配置 Servlet &ltservlet&gt&ltservlet-name&gtAutoServlet&lt/servlet-name&gt&ltservlet-class&gtcom.servlet.AutoServlet &lt/servlet-class&gt&lt/servlet&gt&ltservlet-mapping&gt&ltservlet-name&gtAutoServlet&lt/servlet-name&gt&lturl-pattern&gt/AutoServlet&lt/url-pattern&gt&lt/servlet-mapping&gt2,定义 AutoServlet,继承 HttpServlet,实现方法 doGet, doPost ) 可由 action 自己指定用哪个 3, 应用: (1)Struts1.x 就是一个 Servlet, 它会在 doGet 方法中读取配置文件 struts-config.xml 进行 action 的匹配,进行 (2)验证码生成(也可用 action 来做) 业务处理 二,filter 1, web.xml 配置 &ltfilter&gt&ltfilter-name&gtcheckUrl&lt/filter-name&gt&ltfilter-class&gtcom.lvjian.filter.CheckUrl&lt/filter-class&gt&ltinit-param&gt&ltparam-name&gtname&lt/param-name&gt&ltparam-value&gtasong&lt/param-value&gt//初始化传参,得到时在 filter 的 init 方法中用 filterConfig.getInitParameter( ”name” ) &lt/init-param&gt&lt/filter&gt&ltfilter-mapping&gt&ltfilter-name&gtcheckUrl&lt/filter-name&gt&lturl-pattern&gt/*&lt/url-pattern&gt&lt/filter-mapping&gt2, 继承 javax.servlet.Filter,实现 doFilter(HttpServletRequest request, HttpServletResponse response FilterChain filterChain) 等方法 HttpServletRequest request = (HttpServletRequest) reqHttpServletResponse response = (HttpServletResponse) res//获取用户请求的 URI String request_uri = request.getRequestURI()//获取 web 应用程序的上下文路径 String contextPath = request.getContextPath()//去除上下文路径,得到剩余部分的路径 String uri = request_uri.substring(contextPath.length())//创建会话 session HttpSession session = request.getSession(true)//保持原有流程不变 filterChain.doFilter( servletRequest , servletResponse )3,应用:(1)Struts2.0 (2) 进行字符编码的过滤,检测用户是否登陆的过滤等 (3)禁止页面缓存,原理就是对各个请求的 url 令其为空,在 doFilter 加入: request.setCharacterEncoding(”GB2312”)//设置编码 ((HttpServletResponse)response).setHeader(”Pragma” ,”No-cache”)((HttpServletResponse)response).setHeader(”Cache-C ontrol”,”no-cache”)((HttpServletResponse)response).setHeader(”Expires ”,”0”)//禁止缓存 三,listener 1, 在 web.xml 中配置 &ltlistener&gt&ltlistener-class&gtdemo.listener.MyContextLoader&lt/listener-class&gt&lt/listener&gt//这样服务器就会在启动时创建 MyContextLoader 的一个实例,并开始监听 servlet,session 的操作 2, 实现 常用的 listener 有: (1) ServletContextListener 监听 ServletContext。 当创建 ServletContext 时,激 发 contextInitialized(ServletContextEvent sce)方法; 当销毁 ServletContext 时, 激发 contextDestroyed(ServletContextEvent sce)方法。 (2)ServletContextAttributeListener 监听对 ServletContext 属性的操作,比 如增加、删除、修改属性。 (3)HttpSessionListener 监听 HttpSession 的操作。 当创建一个 Session 时,激发 session Created(HttpSessionEvent se) 方法; 当销毁一个 Session 时, 激发 sessionDestroyed (HttpSessionEvent se) 方法。 (4)HttpSessionAttributeListener 监听 HttpSession 中的属性的操作。 当在 Session 增加一个属性时,激 发 attributeAdded(HttpSessionBindingEvent se) 方法; 当在 Session 删除一个属性时,激发 attributeRemoved(HttpSessionBindingEventse)方法; 当在 Session 属性被重新设置时,激发 attributeReplaced(HttpSessionBindingEvent se) 方法。 四,interceptor 1, 在 struts.xml 中配置 创建一个 strus.xml 的子配置文件 struts-l99-default.xml,它继承与 struts2 的 struts-default,此配置文件是其他子配置文件的父类,只要是继承与该文件的配置文件所 声明的路径都会被它过滤 . 方法 1. 普通配置法 &ltstruts&gt&ltpackage name=”struts2” extends=”struts-default”&gt&ltinterceptors&gt&ltinterceptor name=”myInterceptor” &gt&lt/interceptor&gt&lt/interceptors&gt&ltaction name=”register” &gt&ltresult name=”input”&gt/register.jsp&lt/result&gt&ltresult&gt/result.jsp&lt/result&gt&lt!– 在自定义 interceptor 并将其 ref 时, 系统会覆盖掉默认的 interceptor-stack(defaultStack), 为了保证系统默认的 defaultStack 不受影 响, 我们需要显式的将其引入 –&gt&lt!– 注意两个 interceptor-ref 的顺序, 顺序不同, 执行效果也不同: 先配置的先 执行/后配置的先退出(先进后出) –&gt&ltinterceptor-ref name=”defaultStack”&gt&lt/interceptor-ref&gt&ltinterceptor-ref name=”myInterceptor”&gt&lt/interceptor-ref&gt&lt/action&gt&lt/package&gt&lt/struts&gt方法 2. 配置拦截器栈(即将多个 interceptor 串联的一种元素)。然后在&ltaction&gt中引入 该拦截器栈就可以了。 执行顺序为先配置的先执行 这样做的原因是:多个 action 有相同的多个 interceptor 时,如一般自己写一个,系统 默认的有一个,要注入两个, 对多个 action 都写这两个,不利于修改,可以写成一个链,只需引用此链即可。 (1)拦截目标对象(被代理对象),这里目标对象就是 action;(2)拦截器(一个类,动态的将 某些方法插入到目标对象的某方法的 before、after);(3)对目标对象生成的(动态)代理对 象(代理对象内部方法综合了目标对象方法+拦截器方法)。程序最终执行的是目标对象的代理, 而这个代理已经插入了 interceptor。拦截器作用:拦截 action。interceptor 相当于一 个入口和出口, 通过 interceptor 进入 action, 执行完 action 的代码再通过 interceptor 出去。针对”struts2 — interceptor(Interceptor 怎么写)”这篇文章的 MyInterceptor.class 和 MyInterceptor2.class。根据下面的配置文件执行程 序 &ltstruts&gt&ltpackage name=”struts2” extends=”struts-default”&gt&ltstruts&gt&ltpackage name=”struts2” extends=”struts-default”&gt&ltinterceptors&gt&ltinterceptor name=”myInterceptor” &gt&lt/interceptor&gt&ltinterceptor-stack name=”myInterceptorStack”&gt&ltinterceptor-ref name=”myInterceptor”&gt&lt/interceptor-ref&gt&ltinterceptor-ref name=”defaultStack”&gt&lt/interceptor-ref&gt&lt/interceptor-stack&gt&lt/interceptors&gt&ltaction name=”register” &gt&ltresult name=”input”&gt/register.jsp&lt/result&gt&ltresult&gt/result.jsp&lt/result&gt&ltinterceptor-ref name=”myInterceptorStack”&gt&lt/interceptor-ref&gt&lt/action&gt&lt/package&gt&lt/struts&gt方法 3. 修改默认拦截器,将自定义的拦截器栈定义为 struts2 的默认拦截器。 &ltstruts&gt&ltpackage name=”struts2” extends=”struts-default”&gt&ltinterceptors&gt&ltinterceptor name=”myInterceptor” &gt&lt/interceptor&gt&ltinterceptor-stack name=”myInterceptorStack”&gt&ltinterceptor-ref name=”myInterceptor”&gt&lt/interceptor-ref&gt&ltinterceptor-ref name=”defaultStack”&gt&lt/interceptor-ref&gt&lt/interceptor-stack&gt&lt/interceptors&gt&lt!– 此默认 interceptor 是针对当前包内所有 action 的,若不为 action 显式指定 interceptor,就会用 default-interceptor-ref–&gt&lt!– 如果某个 action 中引入了 interceptor, 则在这个 action 中此默认 interceptor 就会失效 –&gt&ltdefault-interceptor-ref name=”myInterceptorStack”&gt&lt/default-interceptor-ref&gt&ltaction name=”register” &gt&ltresult name=”input”&gt/register.jsp&lt/result&gt&ltresult&gt/result.jsp&lt/result&gt&lt/action&gt&lt/package&gt&lt/struts&gt3. extends MethodFilterInterceptor 的拦截器如何配置哪些方法该拦截、哪些方法不 该拦截(针对方法拦截的配置) &ltstruts&gt&ltpackage name=”struts2” extends=”struts-default”&gt&ltinterceptors&gt&ltinterceptor name=”myInterceptor3” &gt&lt/interceptor&gt&lt/interceptors&gt&ltaction name=”register” method=”queryAll”&gt&ltresult name=”input”&gt/register.jsp&lt/result&gt&ltresult&gt/result.jsp&lt/result&gt&lt!– myInterceptor3 拦截器只对 RegisterAction 中的 queryAll()方法和 insert()方法进行了拦截, 其他方法未进行拦截 –&gt&ltinterceptor-ref name=”myInterceptor3”&gt&ltparam name=”includeMethods”&gtqueryAll, execute&lt/param&gt&lt/interceptor-ref&gt&ltinterceptor-ref name=”defaultStack”&gt&lt/interceptor-ref&gt&lt/action&gt&ltaction name=”register” method=”insert”&gt&ltresult &ltspan 2, 实现 interceptor 类似于 filter, 自定义 filter 是实现 javax.servlet.Filter 来完成, 而 interceptor 类似,它通过实现 com.opensymphony.xwork2.interceptor.Interceptor 来自定义实现。 该接口提供了三个方法: 1) void init()在该拦截器被初始化之后,在该拦截器执行拦截之前,系统回调该 方法。对于每个拦截器而言,此方法只执行一次。 2) void destroy()该方法跟 init()方法对应。在拦截器实例被销毁之前,系统将 回调该方法。 3) String intercept(ActionInvocation invocation) throws Exception该方法是用户需要实现的拦截动作。该方法会返回一个字符串作为逻辑视图。 除此之外,继承类 com.opensymphony.xwork2.interceptor.AbstractInterceptor 是更简单的一种实现拦截器类的方式,因为此类提供了 init()和 destroy()方法的空实现, 这样我们只需要实现 intercept 方法。 3, 应用 import java.util.Mapimport com.opensymphony.xwork2.Actionimport com.opensymphony.xwork2.ActionInvocationimport com.opensymphony.xwork2.interceptor.AbstractInterceptor/** * 权限检查拦截器 * * @author qiujy * @version 1.0 */ public class AuthorizationInterceptor extends AbstractInterceptor { /* * 拦截 Action 处理的拦截方法 * */ public String intercept(ActionInvocation invocation) throws Exception { //清除后台页面的缓存 HttpServletResponse response = ServletActionContext.getResponse()// ServletActionContext 自动提供,可让其获得 request,session,response 等 response.setHeader(”Pragma”,”No-cache”)response.setHeader(”Cache-Control”,”no-cache”)response.setHeader(”Expires”,”0”)Map session = invocation.getInvocationContext().getSession()String userName = (String) session.get(”userName”)if (null != userName &amp&ampuserName.equals(”test”)) { System.out.println(”拦截器:合法用户登录—”)return invocation.invoke()//保持原来的流程不改变 } else { System.out.println(”拦截器:用户未登录—”)return Action.LOGIN//返回到配置文件中名字为 login 的 action } } }

给你一个非缓存分页类的简单例子吧(Page类可以视作javabean):

/**

* @author Administrator

*

*

* TODO 要更改此生成的类型注释的模板,请转至

* 窗口 - 首选项 - Java - 代码样式 - 代码模板

*/

import java.util.*

public class Pager {

private String PageUrl

private boolean hasNext

private boolean hasPrevious

private String previousPage

private String nextPage

private int offset

private int size

private int length

private int pagenumber

public Pager(int offset,int length, int size, String url){

this.offset=offset

this.length=length

this.size=size

int index=url.indexOf(”&amppager.offset”)

if (index&gt-1){

this.PageUrl=url.substring(0,index)

}else{

this.PageUrl=url

}

}

public void setoffset(int offset){

this.offset=offset

}

public void setPagerUrl(String PagerUrl){

this.PageUrl=PagerUrl

}

public void setsize(int size){

this.size=size

}

public void setlength(int length){

this.length=length

}

public int getoffset(){

return this.offset

}

public String getPageUrl(){

return this.PageUrl

}

public boolean gethasNext(){

if((offset+1)*length&gt=size){

hasNext=false

}else{

hasNext=true

}

return hasNext

}

public boolean gethasPrevious(){

if(offset&gt=1){

this.hasPrevious=true

}else{

this.hasPrevious=false

}

Serverlet文件基本结构

return hasPrevious

}

public String getpreviousPage(){

this.previousPage=””

if (this.gethasPrevious()){

this.previousPage=this.PageUrl+”&amppager.offset=”+(offset-1)

}

return previousPage

}

public String getnextPage(){

this.nextPage=””

if(this.gethasNext()){

this.nextPage=this.PageUrl+”&amppager.offset=”+(offset+1)

}

return this.nextPage

}

public int getpagenumber(){

float temppn=(float)size/(float)length

pagenumber=new Float(temppn).intValue()

if (temppn&gtpagenumber){

this.pagenumber++

}

return this.pagenumber

}

public static ArrayList FindPageList(int offset,int length,List list){

ArrayList alist=new ArrayList()

for(int i=offset*lengthi&lt(offset*length+length)&amp&ampi&ltlist.size()i++){

alist.add(list.get(i))

}

return alist

}

}

具体使用:

1、在servlet初始化这个page

List list=DataUtil.getSpecifiedList()//得到整个数据列表

int offset=0//便宜量

int length=10//每页数据记录数

String pageOffset=request.getParameter(”pager.offset”)

if(pageOffset==null||pageOffset.equals(””)){

offset=0

}else{

offset=Integer.parseInt(pageOffset)

}

String Url=request.getRequestURL().toString()+”?”+request.getQueryString()

Pager pager=new Pager(offset,length,list.size(),Url)

List RsList=Pager.FindPageList(offset,length,list)

request.setAttribute(”Pager”,pager)

request.setAttribute(”List”,RsList)

RequestDispatcher dispatcher= request.getRequestDispatcher(”/UI/someModule/list_display.jsp”)

dispatcher.forward(request,response)

2、具体jsp中得到分页结果,并显示,并附页面跳转部分:

页面中得到分页结果

&lt%

List RpList=(List)request.getAttribute(”List”)

Pager pager=(Pager)request.getAttribute(”Pager”)

%&gt

&lt%–用for循环把RpList显示–%&gt

&lt!–页面跳转代码,这只是个形式,简化和改变方式的余地很大–&gt

&ltform name=”pageForm”&gt&lt%if(pager.gethasPrevious()){%&gt&lta href=”&lt%= pager.getpreviousPage()%&gt”&gtprev&lt/a&gt

&lt%}%&gt

&lt%if( pager.gethasNext()){%&gt&lta href=”&lt%=pager.getnextPage()%&gt”&gtnext&lt/a&gt&lt%}%&gt&lt%if(pager.getpagenumber()&gt1) {%&gt第&ltselect name=”pager” onchange=”window.location=’&lt%=pager.getPageUrl()%&gt&amppager.offset=’+document.pageForm.pager.selectedIndex”&gt&lt%for(int i=0i&ltpager.getpagenumber()i++){%&gt&ltoption value=&lt%=i%&gt&lt%if(pager.getoffset()==i){ %&gtselected&lt%}%&gt&gt&lt%=(i+1)%&gt&lt/option&gt&lt%}%&gt&lt/select&gt页&lt%}%&gt 共&lt%=pager.getpagenumber()%&gt页&lt/form&gt

ps:1、2两部分可以都放在页面类,不过你好像要MVC,所以给你这个代码。

以上就是关于Serverlet文件基本结构全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

jsp serverlet 区别 JSP和Servlet的概念对于JSP初学者来说比较不清楚,以下总结一些个人看法: (1).简单的来说Jsp就是含有Java代…
查看详情
jsp serverlet 区别 JSP和Servlet的概念对于JSP初学者来说比较不清楚,以下总结一些个人看法: (1).简单的来说Jsp就是含有Java代…
查看详情
jsp serverlet 区别 JSP和Servlet的概念对于JSP初学者来说比较不清楚,以下总结一些个人看法: (1).简单的来说Jsp就是含有Java代…
查看详情
相关资讯
猜你喜欢