您的位置:

首页 >

软件编程 >

Spring MVC url提交参数和获取参数 >

Spring MVC url提交参数和获取参数

2016-01-20 14:01:08

分类:软件编程

普通URL提交参数该格式url为:url.do?param1=mahc¶m2=8888.00需要在上文中的HelloController对象添加方法如下:/** * Spring MVC URL提交参数 * @param name * @return */ @RequestMapping("/param") public ModelAndView getInfo(@RequestParam("name") String name){ String str = name + " Spring MVC示例"; return new ModelAndView("message", "str", str); } 访问该方法的url格式为:param?name=hoking(Get方式)。该方式是很普通的提交方式。用注解@RequestParam绑定请求参数a到变量a当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,例如: @RequestParam(value="a", required=false)。如上文中,通过name获取提交的参数。RESTful风格的URL参数接下来我们了解一下Restful风格。HTTP请求方法在RESTful Web 服务中的典型应用资源GET PUT POST DELETE一组资源的URI,比如http://example.com/resources/单个资源的URI,比如http://example.com/resources/142。更多信息请阅读如下文章。具体的实现需要在上文中的HelloController对象添加方法如下:/** * Spring MVC 支持RESTful风格的URL参数 * * @return */ @RequestMapping("/index/{username}") public String getMessage(@PathVariable("username") String username){ System.out.println(username); return "message"; } 上文使用了@PathVariable。PathVariable与RequestParam的不同在于。使用@RequestMapping URI template样式映射时,即 someUrl/{paramId}, 这时的paramId可通过@Pathvariable注解绑定它传过来的值到方法的参数上。访问该方法的url格式为:index/mahoking。@PathVariable是用来获得请求url中的动态参数的,十分方便。mahoking即是username的动态值。上文中的getMessage()方法,返回String对象,该值代表页面的跳转地址,不包含扩展名(后缀名)。本例中为message.jsp页面。以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

java中只允许单一继承,但允许实现多个接口,因此第二种方法更灵活。复制代码 代码如下:/**     * 运行继承java.lang.Thread类定义的线程     */    public void startOne() {        // 创建实例        OneThread oneThread = new OneThread();        // 启动线程ThreadA        oneThread.startThreadA();        try {            // 设置线程休眠1秒            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        // 停止线程,此处为什么不用stop()方法,因为该方法已经废弃,但可以用在死锁。        oneThread.stopThreadA();    }复制代码 代码如下:/**     * 运行实现Runnable接口定义的线程     */    public void startTwo() {        // 创建实例        Runnable runnable = new TwoThread();        // 将实例放入到线程中        Thread threadB = new Thread(runnable);        // 启动线程        threadB.start();    }复制代码 代码如下:// 继承Thread类定义线程class OneThread extends Thread {    private boolean running = false;    public void start() {        this.running = true;        super.start();    }    public void run() {        int i = 0;        try {            while (running) {                System.out.println("继承Thread类定义线程程序体......" + i++);                Thread.sleep(200);            }        } catch (InterruptedException e) {            e.printStackTrace();        }    }    public void startThreadA() {        System.out.println("启动继承Thread类定义线程");        this.start();    }    public void stopThreadA() {        System.out.println("关闭继承Thread类定义线程");        this.running = false;    }}复制代码 代码如下:// 实现Runnable接口定义线程class TwoThread implements Runnable {    private Date runDate;    public void run() {        System.out.println("实现Runnable接口定义线程程序体......");        this.runDate = new Date();        System.out.println("线程启动时间......" + runDate);    }复制代码 代码如下:public static void main(String[] args) {        // 实例化对象        ThreadStartAndStop threadStartAndStop = new ThreadStartAndStop();        threadStartAndStop.startOne();        threadStartAndStop.startTwo();    } 启动继承Thread类定义线程继承Thread类定义线程程序体......0继承Thread类定义线程程序体......1继承Thread类定义线程程序体......2继承Thread类定义线程程序体......3继承Thread类定义线程程序体......4关闭继承Thread类定义线程实现Runnable接口定义线程程序体......线程启动时间......Fri Mar 15 12:56:

首先是继承自javax.mail.Authenticator的一个具体类。getPasswordAuthentication()方法也就是构建一个PasswordAuthentication对象并返回,有点费解JAVA Mail这样的设计意图,可能javax.mail.Authenticator为我们提供了附加的保证安全的验证措施吧。复制代码 代码如下:package com.mzule.simplemail;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;/*** 服务器邮箱登录验证* * @author MZULE* */public class MailAuthenticator extends Authenticator {/*** 用户名(登录邮箱)*/private String username;/*** 密码*/private String password;/*** 初始化邮箱和密码* * @param username 邮箱* @param password 密码*/public MailAuthenticator(String username, String password) {this.username = username;this.password = password;}String getPassword() {return password;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}String getUsername() {return username;}public void setPassword(String password) {this.password = password;}public void setUsername(String username) {this.username = username;}}  调用上面的邮箱发送器,可以构建一个工厂类,工厂类可以封装创建的过程,所以通过读配置文件获取邮箱用户名,密码都会变得十分方便。下面的代码是我在写观察者模式的时候写的,只是简单演示了工厂类。复制代码 代码如下:package com.mzule.dp.observer.factory;import com.mzule.dp.observer.constant.MailSenderType;import com.mzule.simplemail.SimpleMailSender;/*** 发件箱工厂* * @author MZULE* */public class MailSenderFactory {/*** 服务邮箱*/private static SimpleMailSender serviceSms = null;/*** 获取邮箱* * @param type 邮箱类型* @return 符合类型的邮箱*/public static SimpleMailSender getSender(MailSenderType type) {if (type == MailSenderType.SERVICE) {if (serviceSms == null) {serviceSms = new SimpleMailSender("[email protected]","hidden");}return serviceSms;}return null;}}  发送邮件,还是观察者模式DEMO里面的代码,呼呼。复制代码 代码如下:package com.mzule.dp.observer.observer;import java.util.ArrayList;import java.util.List;import java.util.Observable;import java.util.Observer;import javax.mail.MessagingException;import javax.mail.internet.AddressException;import com.mzule.dp.observer.constant.MailSenderType;import com.mzule.dp.observer.factory.MailSenderFactory;import com.mzule.dp.observer.po.Product;import com.mzule.simplemail.SimpleMailSender;public class ProductPriceObserver implements Observer {@Overridepublic void update(Observable obj, Object arg) {Product product = null;if (obj instanceof Product) {product = (Product) obj;}if (arg instanceof Float) {Float price = (Float) arg;Float decrease = product.getPrice() - price;if (decrease > 0) {// 发送邮件SimpleMailSender sms = MailSenderFactory.getSender(MailSenderType.SERVICE);List<String> recipients = new ArrayList<String>();recipients.add("[email protected]");recipients.add("[email protected]");try {for (String recipient : recipients) {sms.send(recipient, "价格变动", "您关注的物品"+ product.getName() + "降价了,由"+ product.getPrice() + "元降到" + price + "元,降幅达"+ decrease + "元人民币。赶快购物吧。

tomcat本地地址 E:\soft4develop\apache-tomcat-6.0.18System.getProperty("user.dir")//E:\soft4develop\apache-tomcat-6.0.18\binSystem.getProperty("catalina.home")//E:\soft4develop\apache-tomcat-6.0.18对于jboss同样适用。其他容器未做测试。说道这里,正好有朋友在群里头问了个问题,情景式这样的登陆需要用Https来做请求,登陆成功后,剩下的其他请求全部走http.比如https://www.jb51.net/admin/user_manager.apsx发现这个不需要走Https,就转发到http://www.jb51.net/admin/user_manager.apsx问题来了request.getServerPort() 只能获取https时的port1端口那如何获取port2端口呢。通过上面的方式可以获取到tomact的路径,在通过下面xml的xpath来获取到tomcat的server.xml中的端口配置拼接,来实现。获取tomcat端口的方法复制代码 代码如下: public static Integer getTomcatPortFromConfigXml(File serverXml) {    Integer port;    try {       DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();       domFactory.setNamespaceAware(true); // never forget this!       DocumentBuilder builder = domFactory.newDocumentBuilder();       Document doc = builder.parse(serverXml);       XPathFactory factory = XPathFactory.newInstance();       XPath xpath = factory.newXPath();       XPathExpression expr = xpath.compile         ("/Server/Service[@name='Catalina']/Connector[count(@scheme)=0]/@port[1]");       String result = (String) expr.evaluate(doc, XPathConstants.STRING);       port =  result != null && result.length() > 0 ? Integer.valueOf(result) : null;    } catch (Exception e) {      port = null;    }    return port; }最后附带下System.ge复制代码 代码如下:另外:System.getProperty()中的字符串参数如下:System.getProperty()参数大全# java.version                                Java Runtime Environment version # java.vendor                                Java Runtime Environment vendor # java.vendor.url                           Java vendor URL # java.home                                Java installation directory # java.vm.specification.version   Java Virtual Machine specification version # java.vm.specification.vendor    Java Virtual Machine specification vendor # java.vm.specification.name      Java Virtual Machine specification name # java.vm.version                        Java Virtual Machine implementation version # java.vm.vendor                        Java Virtual Machine implementation vendor # java.vm.name                        Java Virtual Machine implementation name # java.specification.version        Java Runtime Environment specification version # java.specification.vendor         Java Runtime Environment specification vendor # java.specification.name           Java Runtime Environment specification name # java.class.version                    Java class format version number # java.class.path                      Java class path # java.library.path                 List of paths to search when loading libraries # java.io.tmpdir                       Default temp file path # java.compiler                       Name of JIT compiler to use # java.ext.dirs                       Path of extension directory or directories # os.name                              Operating system name # os.arch                                  Operating system architecture # os.version                       Operating system version # file.separator                         File separator ("/" on UNIX) # path.separator                  Path separator (":" on UNIX) # line.separator                       Line separator ("\n" on UNIX) # user.name                        User's account name # user.home                              User's home directory # user.dir                               User's current working directoryFile.getCanonicalPath()和File.getAbsolutePath()大约只是对于new File(".")和new File("..")两种路径有所区别。复制代码 代码如下:# 对于getCanonicalPath()函数,“."就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹# 对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径# 至于getPath()函数,得到的只是你在new File()时设定的路径比如当前的路径为 C:\test :File directory = new File("abc");directory.getCanonicalPath(); //得到的是C:\test\abcdirectory.getAbsolutePath();    //得到的是C:\test\abcdirecotry.getPath();                    //得到的是abcFile directory = new File(".");directory.getCanonicalPath(); //得到的是C:\testdirectory.getAbsolutePath();    //得到的是C:\test\.direcotry.getPath();                    //得到的是.File directory = new File("..");directory.getCanonicalPath(); //得到的是C:\directory.getAbsolutePath();    //得到的是C:

优先级队列如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构。 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 。对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。Java数组模拟队列队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。这也就是我们平常经常用说到的先进先出原则(FIFO)。Java 中的 List 就可以作为队列来使用,在队列尾部添加元素则使用 list.add 方法,从队列头部删除元素则使用 list.remove 方法。Java数组模拟优先级队列结构实例:package datastruct; import java.util.Arrays; import java.util.Comparator; /** * 用数组模拟 优先级队列 优先级高的排前、先出 线性表结构 * 类似使用了比较器的 TreeSet、TreeMap */ public class SimulatePriorityQueue { public static void main(String[] args) { SimulatePriorityQueue queue = new SimulatePriorityQueue(4); // SimulateQueue queue = new SimulateQueue(); // System.out.println("取出元素:" + queue.remove()); queue.insert(1); queue.insert(3); queue.insert(2); queue.insert(5); queue.insert(4); System.out.println("size:" + queue.size()); System.out.println("peek:" + queue.peek()); System.out.println("取出元素:" + queue.remove()); System.out.println("取出元素:" + queue.remove()); System.out.println("取出元素:" + queue.remove()); System.out.println("取出元素:" + queue.remove()); // System.out.println("取出元素:" + queue.remove()); System.out.println("size:" + queue.size()); System.out.println(); } private int mSize = 3; //大小 private int[] mArray; //数组 private int mNextItem; //下一个位置,也可当作 当前的元素数 public SimulatePriorityQueue() { mArray = new int[mSize]; mNextItem = 0; } public SimulatePriorityQueue(int size) { this.mSize = size; mArray = new int[mSize]; mNextItem = 0; } /** * 插入元素 * @param item */ public void insert(int item) { if (!isFull()) { mArray[mNextItem++] = item; for (int i = 0; i < mNextItem; i++) {//冒泡排序 for (int j = 0; j < mNextItem - 1; j++) { if (mArray[j] > mArray[j + 1]) { mArray[j] = mArray[j + 1] + 0 * (mArray[j + 1] = mArray[j]); System.out.println(Arrays.toString(mArray)); } } } System.out.println(Arrays.toString(mArray)); } else { System.out.println("----不能插入元素了,队列已满----"); } } /** * 移出元素 先进先出 * @return */ public int remove() { if (!isEmpty()) { return mArray[--mNextItem]; } else { throw new IllegalArgumentException("没有元素可以取出了"); } } /** * 查看前面的元素 * @return */ public int peek() { return mArray[mNextItem - 1]; } /** * 是否为空 * @return */ public boolean isEmpty() { return mNextItem == 0; } /** * 是否满 * @return */ public boolean isFull() { return mNextItem == mSize; } /** * size * @return */ public int size() { return mNextItem; } } 输出结果:[1, 0, 0, 0][1, 3, 0, 0][1, 2, 3, 0][1, 2, 3, 0][1, 2, 3, 5]----不能插入元素了,队列已满----size:4peek:5取出元素:5取出元素:3取出元素:2取出元素:1size:

焦点访谈

最新最热的文章

更多 >

COPYRIGHT (©) 2017 Copyright ©2017 腾博会官网 网站地图

联系我们

827570882

扫描二维码分享到微信