当前位置: 首页 > news >正文

建设一个公司网站大概多少钱网站快速收录

建设一个公司网站大概多少钱,网站快速收录,河南省城乡与住房建设厅网站首页,物联网解决方案前言前面Struts博文基本把Struts的配置信息讲解完了.....本博文主要讲解Struts对数据的处理Action开发的三种方式在第一次我们写开发步骤的时候#xff0c;我们写的Action是继承着ActionSupport类的...为啥我们继承了ActionSupport类呢#xff1f;下面我就会讲解到继承Action…前言前面Struts博文基本把Struts的配置信息讲解完了.....本博文主要讲解Struts对数据的处理Action开发的三种方式在第一次我们写开发步骤的时候我们写的Action是继承着ActionSupport类的...为啥我们继承了ActionSupport类呢下面我就会讲解到继承ActionSupport类我们来看一下ActionSupport干了什么:也就是说如果我们在Action类中需要用到Struts为我们提供的数据校验等Struts已经帮我们实现的功能我们就继承着ActionSupport类..实现Action接口我们再来看看Action接口干了什么当然啦ActionSuppot也继承着Action接口所以ActionSuppot拥有Action接口的全部功能....因此这种开发方式我们是比较少用的...不继承任何类、不实现任何接口开发此类的Action它是不继承任何类、不实现任何接口的...也就是说它就是一个普通的Java类....Action类public class PrivilegeAction {public String login() {System.out.println(我是普通的javaAction不继承任何的类、不实现任何的接口);return success;}}在配置文件中配置/index.jsp效果小总结如果我们使用到了Struts2一些特用的功能我们就需要继承ActionSupport如果我们没用到Struts2的特殊功能只要平凡写一个Java类行了。大多情况下我们还是会继承ActionSupport的。请求数据封装一般地我们使用Servlet的时候都是分为几个步骤的得到web层的数据、封装数据调用service层的逻辑业务代码将数据保存在域对象中跳转到对应的JSP页面现在问题来了我们自己编写的Action类是没有request、response、Session、application之类的对象的....我们是怎么得到web层的数据、再将数据存到域对象中的呢前面已经说过了Struts预先帮我们完成了对数据封装的功能它是通过params拦截器来实现数据封装的register.jsp首先我们填写表单页面的数据请求Action处理数据用户名密码年龄生日Action封装基本信息在Action设置与JSP页面相同的属性并为它们编写setter方法private String username;private String psd;private int age;private Date birthday;public void setUsername(String username) {this.username username;}public void setPsd(String psd) {this.psd psd;}public void setAge(int age) {this.age age;}public void setBirthday(Date birthday) {this.birthday birthday;}我们直接在业务方法中访问这些变量看是否能得到表单的值。Action封装对象一般地我们注册的时候都是在Servlet上把基本信息封装到对象上...那么在Struts怎么做呢创建一个User类基本的信息和JSP页面是相同的。package qwer;import java.util.Date;/*** Created by ozc on 2017/4/27.*/public class User {private String username;private String psd;private int age;private Date birthday;public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPsd() {return psd;}public void setPsd(String psd) {this.psd psd;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday birthday;}}在Action中定义User对象出来并给出setter和getter方法....值得注意的是基本信息只要setter就够了封装到对象的话需要setter和getterpublic class ccAction extends ActionSupport {private User user;public User getUser() {return user;}public void setUser(User user) {this.user user;}public String register() {System.out.println(user.getUsername());System.out.println(user.getPsd());System.out.println(user.getAge());System.out.println(user.getBirthday());return success;}}在JSP页面提交的name要写成user.username之类的用户名密码年龄生日得到域对象Struts怎么把数据保存在域对象中呢Struts提供了三种方式一、得到Servlet API我们可以通过ServletActionContext得到Servlet API由于每个用户拥有一个Action对象那么底层为了维护用户拿到的是当前线程的request等对象使用ThreadLocal来维护当前线程下的request、response等对象...//通过ServletActionContext得到Servlet APIjavax.servlet.ServletContext context ServletActionContext.getServletContext();HttpServletRequest request ServletActionContext.getRequest();HttpSession session request.getSession();HttpServletResponse response ServletActionContext.getResponse();二、ActionContext类我们还可以通过ActionContext类来得到request、response、session、application被Struts封装的Map集合//得到ActionContext 对象ActionContext context ActionContext.getContext();Map session context.getSession();Map application context.getApplication();//这是request的MapMap request context.getContextMap();三、实现接口当web容器发现该Action实现了Aware接口会把相对应的资源通过Aware接口注射进去实际上就是一种IOC。Aware实际就是一种拦截器拦截代码在执行Action之前执行、将资源注射到Action中实现SessionAware, RequestAware, ApplicationAware接口它就要在程序中实现三个方法private Map request;private Map session;private Map application;Overridepublic void setApplication(Map map) {this.application map;}Overridepublic void setRequest(Map map) {this.request map;}Overridepublic void setSession(Map map) {this.session map;}通过这些方法我们就可以得到对应的Map对象.....小总结那么我们有三种方法可以得到Servlet对应的对象那么该使用哪一种呢分析第一种方法需要导入Servlet的包与Struts耦合了第二种方法只能在业务方法中使用ActionContext类得到对应的Map对象如果有多个方法那么每个方法都需要写类似的代码第三种方法可以在类上定义成员变量以至于整个类都能使用。但是需要实现类、实现对应的方法如果我们需要使用到对象的其他方法类似getContextPath()之类的那么只能使用第一种如果我们就按照平常的开发我们就使用第二种【获取简单没有耦合】至于第三种当我们将来可能开发BaseAction的时候就使用它日期转换问题前面博文已经讲解了Struts2为我们实现了数据自动封装...由上篇的例子我们可以看出表单提交过去的数据全都是String类型的但是经过Struts自动封装就改成是JavaBean对应成员变量的类型了。但是呢日期类型只支持是yyyy-MM-dd这种格式的因为我们在上个例子中直接使用的是Struts支持的格式因此没有报错...本篇博文就是讲解Struts如何对日期类型的格式更好地支持当我们使用的是yyyyMMdd这种格式的时候我们看看Struts的自动封装能不能解析出相对应的日期直接抛出了异常分析那么我们怎么让Struts能够支持更多的日期格式呢比如我想Struts在自动封装数据的时候支持yyyyMMdd,yyyy年MM月dd日这样的日期格式.....Struts提供了转换器给我们使用也就是我们可以自定义转换器我们定义了什么格式Struts就可以根据对应的格式进行自动封装...当我们写完自定义转换器是需要向Struts说明我们写了不然的话Struts是不知道我们自定义了转换器类的...也就是说我们要想实现类型转换需要两步编写自定义转换器类告诉Struts我们写了转换器类自定义转换器类一般地我们想要编写自定义转换器类都是实现StrutsTypeConverter类的..../*** Created by ozc on 2017/5/1.* 自定义异常转换器类** 我们要实现的就是在Struts转换的时候**/public class MyConvter extends StrutsTypeConverter {//需求当Struts自动封装数据时也支持yyyyMMdd,yyyy年MM月dd日等格式的支持\SimpleDateFormat[] format {new SimpleDateFormat(yyyy-MM-dd), new SimpleDateFormat(yyyyMMdd), new SimpleDateFormat(yyyy年MM月dd日)};/*** 把String转换为指定的类型 【String To Date】*** param map* 当前上下文环境* param strings* jsp表单提交的字符串的值* param aClass* 要转换为的目标类型*/Overridepublic Object convertFromString(Map map, String[] strings, Class aClass) {//判断是否有值if (strings null) {return null;}//判断是否是日期类型的if (Date.class ! aClass) {return null;}//遍历循环for (SimpleDateFormat dateFormat : format) {try {//解析传递进来的第一个就行啦dateFormat.parse(strings[0]);} catch (ParseException e) {//如果格式不对那么就跳出当前的循环continue;}}return null;}Overridepublic String convertToString(Map map, Object o) {return null;}}告诉Struts我写了转换器类告诉Struts我写了一个转换器类也分两种方式定义了局部转换器类就当前包下的Action类有效定义了全局转换器类整个项目有效全局转换器步骤在src目录下创建一个名为xwork-conversion.properties的文件配置文件的内容需要转换的类类型转换器类的全名java.util.Dateqwer.MyConvter局部转换器类步骤在当前的Action包下创建名为Action名-conversion.properties的文件文件的内容为需要转换的字段【如果是JavaBean里的字段需要写上JavaBean的】转换器类的全名user.birthdayqwer.MyConvter效果错误提示页面当发生了日期转换的异常时Struts给出的页面是这样子的这个我们称之为input视图我们要做的就是给出用户更友好的提示于是在struts.xml文件中配置如果返回的是input视图那么跳转到我们相对应的页面上/error.jsp文件上传和下载在讲解开山篇的时候就已经说了Struts2框架封装了文件上传的功能........本博文主要讲解怎么使用Struts框架来完成文件上传和下载回顾以前的文件上传可以使用FileUpload或者SmartUpload组件来完成文件上传的功能。但是呢FileUpload组件使用起来是比较麻烦的...而SmartUPload解决中文的问题也非常麻烦使用Struts进行文件上传从要导入的jar包我们就可以知道Struts内部还是使用fileUpload上传组件....但是它极大的简化地我们的具体操作那我们怎么用它呢看下面的图在Action中使用在表单中定义的name就可以获取代表的上传文件的File对象在Action中使用在表单中定义的nameFileName就得到上传文件的名字JSP页面在注册页面上拥有两个上传文件控件Action得到相对应的File对象、上传文件名称、上传文件的类型package fileupload;import java.io.File;/*** Created by ozc on 2017/5/2.*/public class FileUploadAction {//上传文件对应的File对象private File photo;private File photo1;//得到上传文件的名称private String photoFileName;private String photo1FileName;//得到上传文件的类型private String photoContentType;private String photo1ContentType;//给出相对应的setterpublic void setPhoto(File photo) {this.photo photo;}public void setPhoto1(File photo1) {this.photo1 photo1;}public void setPhotoFileName(String photoFileName) {this.photoFileName photoFileName;}public void setPhoto1FileName(String photo1FileName) {this.photo1FileName photo1FileName;}public void setPhotoContentType(String photoContentType) {this.photoContentType photoContentType;}public void setPhoto1ContentType(String photo1ContentType) {this.photo1ContentType photo1ContentType;}public String register() {System.out.println(photo1FileName);System.out.println(photoFileName);return success;}}成功得到数据Action业务代码public String register() throws IOException {//得到上传的路径String path ServletActionContext.getServletContext().getRealPath(upload);System.out.println(path);//创建文件对象File destFile new File(path,photoFileName);//调用工具类方法将文件拷贝过去FileUtils.copyFile(photo, destFile);return success;}效果文件下载我们以前是通过设置request消息头来实现文件下载的.....那么在Struts又如何实现文件下载呢我们请求服务器处理都是通过Action类来完成的但是呢Action类的业务方法都是返回字符串。因此Struts在节点中提供了类型为stream的type值。通过stream来配置相对应的信息从而实现下载列出所有可以下载的文件Action类的业务方法public class downLoadAction {//列出所有可以下载的文件public String list() {//得到upload文件夹String path ServletActionContext.getServletContext().getRealPath(/upload);//创建file对象File file new File(path);//列出文件下所有的文件File[] files file.listFiles();//将这些文件存到request域中HttpServletRequest request ServletActionContext.getRequest();request.setAttribute(files, files);return list;}}Struts配置文件/list.jspJSP显示页面对不起没有下载的页面编号文件名称操作${file.count}${fn:substringAfter(fileName, upload\\)}下载Action代码/*** 访问Action的业务方法仅仅返回的是字符串。因此Struts在result节点提供了stream类型的type* 指定了stream就代表着我这是要下载的...* * 既然要下载文件那么肯定需要几样东西* 1、文件名* 2、代表文件的流*/public String downLoad() {return downLoad;}//得到要下载的文件名Struts提供了自动封装的功能private String fileName;//如果文件名是中文的那么需要手动转换因为超链接是get方法提交public void setFileName(String fileName) throws UnsupportedEncodingException {fileName new String(fileName.getBytes(ISO8859-1), UTF-8);this.fileName fileName;System.out.println(fileName);}//得到代表下载文件流该方法由Struts调用public InputStream getAttrInputStream() {return ServletActionContext.getServletContext().getResourceAsStream(/upload/ fileName);}//下载时显示的名称【如果是中文可能会乱码因此要URLencode】----在Struts.xml文件中通过${}可获取public String getDownFileName() throws UnsupportedEncodingException {fileName URLEncoder.encode(fileName, UTF-8);return fileName;}Struts.xml/list.jspapplication/octet-streamattrInputStreamattachment;filename${downFileName}1024效果模型驱动什么是模型驱动在Struts2中模型驱动就是用来封装数据的..完成数据的自动封装.为什么要使用模型驱动我们之前就使用过Sturts2的数据自动封装功能是用params拦截器完成的...既然有了params拦截器为啥还要模型驱动当我们使用params拦截器完成数据自动封装的时候如果要封装的是JavaBean对象那么在web表单中就必须的name写上javaBean.属性名....这样的话web层和Action层就耦合了...因为在web层必须要知道封装的JavaBean对象是什么才能够实现自动封装而模型驱动就解决了这个问题即时不知道Action层的JavaBean对象是什么也能够完成数据自动封装模型驱动的实现原理实现模型驱动功能也是由拦截器完成的我们来看看拦截器到底做了什么吧....拦截方法的源码是这样的public String intercept(ActionInvocation invocation) throws Exception {//得到当前要执行的Action对象Object action invocation.getAction();//判断该Action对象是否实现了ModelDriven接口if(action instanceof ModelDriven) {ModelDriven modelDriven (ModelDriven)action;//获取值栈对象ValueStack stack invocation.getStack();//得到model的对象Object model modelDriven.getModel();//把对象存到值栈对象中if(model ! null) {stack.push(model);}if(this.refreshModelBeforeResult) {invocation.addPreResultListener(new ModelDrivenInterceptor.RefreshModelBeforeResult(modelDriven, model));}}return invocation.invoke();}把model对象放到值栈对象之后Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中.也就是说使用模型驱动是需要配合Params拦截器完成的使用数据模型驱动实现ModelDriven接口实现ModelDriven接口重写方法....实现接口时要封装的对象是什么形参类型就给什么public class UserAction extends ActionSupport implements ModelDriven {public String login() {return SUCCESS;}Overridepublic User getModel() {return null;}}对象实例化public class UserAction extends ActionSupport implements ModelDriven {//这里一定要实例化User user new User();public User getUser() {return user;}public void setUser(User user) {this.user user;}Overridepublic User getModel() {return user;}}测试JSP提交页面直接写上JavaBean对象的属性就行了..不需要写上JavaBean对象的名称用户名 密码电话 邮箱在Action业务方法中输出User对象的数据Overridepublic String execute() throws Exception {System.out.println(user);return SUCCESS;}如果文章有错的地方欢迎指正大家互相交流。习惯在微信看技术文章想要获取更多的Java资源的同学可以关注微信公众号:Java3y
http://www.pierceye.com/news/991037/

相关文章:

  • 做网站的好公司wordpress大前端模板下载
  • 建设网站的申请信用卡吗下载百度免费
  • 徐州企业网站设计做瑜伽网站
  • 网站开发就是ssh吗.net 网站开发书籍
  • 网站名称没有排名上海工商网查询企业章程
  • 网站建设方案报价费用明细价格免费开店的电商平台
  • 济南网络建站模板用c 做的网站怎么打开
  • 网站建设培训课程好人一生平安网站哪个好
  • seo怎么做网站的tdk网站优化的核心不包括
  • 如何做一份网站的数据分析网站营销案例
  • 中小企业网站建设公司个人微信号做网站行吗
  • 网站无法连接服务器哪些国家网站无须备案
  • 重庆做网站设计培训机构排名全国十大教育机构排名
  • 做网站建设销售网络营销推广技巧
  • 南宁网站制作定制北京网站seo服务
  • 门户网站网页设计规范willin kan 让你的wordpress飞起来
  • 建设银行广州招聘网站wordpress dz
  • 如何介绍自己做的网站东莞回收网站设计
  • 北京驾校网站建设厦门网页设计培训班
  • 网络公司给我做网站我有没有源代码版权吗我怎么做个人网站
  • 免费建站网站一站式做网站需要懂那些软件
  • 做新网站怎样提交360寻找销售团队外包
  • 重庆市建设网站wordpress 新闻模版
  • 国内网站建设推荐手工做的网站
  • 深圳罗湖做网站的公司网站建设与管理案例教程第三版课后答案
  • 有关网站招标商务标书怎么做做终端客户网站
  • c 网站做微信收款功能青岛网站建设定制
  • 贵州安顺建设主管部门网站网站全程设计技术
  • 公司宣传网站建设企业网站建设与实现的论文
  • 连云港网站建设推广网站的推广优化